当前位置: 首页 > 知识库问答 >
问题:

如何在独立应用程序(jar)中使用spring将属性从外部文件包含到hibernate.cfg.xml

景景胜
2023-03-14

我需要能够将数据库配置属性存储在一个外部文件中,该文件很好地被应用程序jar使用,并以jstl表达式的形式包含它。(如:${password}等)?

<?xml version='1.0' encoding='UTF-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  

<hibernate-configuration>  

<session-factory>  
 <property name="hbm2ddl.auto">update</property>  
  <property name="dialect">org.hibernate.dialect.DB2Dialect</property>
  <property name="connection.url">jdbc:db2://localhost:50001/svntools</property> 
  <property name="connection.username">root</property> 
  <property name="connection.password">root</property> 
  <property name="connection.driver_class">com.ibm.db2.jcc.DB2Driver</property> 
-->

     <property name="show_sql">true</property>  


 <mapping class="fr.gouv.education.sirhen.svnreporting.persistance.eo.BrancheEntity"/>  
 <mapping class="fr.gouv.education.sirhen.svnreporting.persistance.eo.RevisionEntity"/>  
 <mapping class="fr.gouv.education.sirhen.svnreporting.persistance.eo.ProjectEntity"/>  
 <mapping class="fr.gouv.education.sirhen.svnreporting.persistance.eo.StatistiqueEntity"/>  
 <mapping class="fr.gouv.education.sirhen.svnreporting.persistance.eo.DomaineEntity"/>  


 </session-factory>  

</hibernate-configuration>  

springconfig.xml文件

<?xml version="1.0" encoding="UTF-8"?>

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd“>

<bean id="projectDAO" class="fr.gouv.education.sirhen.svnreporting.persistance.impl.ProjectDAOImpl">
</bean>
<bean id="reportDAO" class="fr.gouv.education.sirhen.svnreporting.persistance.impl.ReportDAOImpl" />
<bean id="brancheDAO" class="fr.gouv.education.sirhen.svnreporting.persistance.impl.BrancheDAOImpl" />

<bean id="domaineDAO" class="fr.gouv.education.sirhen.svnreporting.persistance.impl.DomaineDAOImpl" />

<bean id="svnKitDa"
    class="fr.gouv.education.sirhen.svnreporting.domaine.DA.impl.SVNKitDAImpl" />
<bean id="RevisionServicesBean"
    class="fr.gouv.education.sirhen.svnreporting.domaine.impl.RevisionsServicesImpl">
    <property name="svnKitDa" ref="svnKitDa" />
    <property name="brancheDAO" ref="brancheDAO" />
</bean>


<bean id="parser" class="fr.gouv.education.sirhen.svnreporting.transvers.utils.ParserImpl" />

<bean id="reportServices"
    class="fr.gouv.education.sirhen.svnreporting.service.impl.ReportServicesImpl">
    <property name="reportDAO" ref="reportDAO" />
    <property name="brancheDAO" ref="brancheDAO" />
    <property name="projectDAO" ref="projectDAO" />
    <property name="parser" ref="parser" />
</bean>
<bean id="projectServices"
    class="fr.gouv.education.sirhen.svnreporting.service.impl.ProjectServicesImpl">
    <property name="projectDAO" ref="projectDAO" />
</bean>

<bean id="domaineServices"
    class="fr.gouv.education.sirhen.svnreporting.service.impl.DomaineServicesImpl">
    <property name="domaineDAO" ref="domaineDAO" />
</bean>

<bean id="generator"
    class="fr.gouv.education.sirhen.svnreporting.domaine.generatorDocServices.impl.GeneratorDocServiceImpl" />

null

使用会话的类:

package fr.gouv.education.sirhen.svnreporting.persistance.impl;


import java.io.File;
import java.util.LinkedList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

import fr.gouv.education.sirhen.svnreporting.persistance.ProjectDAO;
import fr.gouv.education.sirhen.svnreporting.persistance.eo.ProjectEntity;

public class ProjectDAOImpl implements ProjectDAO {

    private static final String Location_Hibernate = 
            "resources/hibernate.cfg.xml";
    private SessionFactory sessionFactory;

     public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }


    public void addProject(ProjectEntity project) {
        File hibernatePropsFile = new File(Location_Hibernate);
         Session session=new Configuration().configure(hibernatePropsFile).buildSessionFactory().openSession();  
           Transaction t=session.beginTransaction();  
           session.saveOrUpdate(project);
           t.commit();
           session.close();  
    }

    public List<ProjectEntity> getProjects() {
        File hibernatePropsFile = new File(Location_Hibernate);
         Session session=new Configuration().configure(hibernatePropsFile).buildSessionFactory().openSession();  
           Transaction t=session.beginTransaction();  

          List<ProjectEntity> projects= session.createCriteria(ProjectEntity.class).list();
           t.commit();  
           session.close();  
           return projects;
    }

    public List<String> getProjectsNames() {
        File hibernatePropsFile = new File(Location_Hibernate);
         Session session=new Configuration().configure(hibernatePropsFile).buildSessionFactory().openSession();  
           Transaction t=session.beginTransaction();  

          List<ProjectEntity> projects= session.createCriteria(ProjectEntity.class).list();
           t.commit();  
           session.close();  
           List<String> ProjectsNames=new LinkedList<String>();
           for( ProjectEntity projet : projects)
           {
               ProjectsNames.add(projet.getName());   
           }
           return ProjectsNames;
    }



}

共有1个答案

张浩阔
2023-03-14

另一种方法是可以直接使用hibernate.properties文件,而不是hibernate.cfg.xml

但如果您想使用另一个文件,即hibernate.properties文件,请参阅下面给出的链接:

如何在hibernate中使用属性文件读取数据库配置参数

但是,如果您想要单独读取属性文件,那么您可以使用普通的Java代码从类路径或相对文件路径读取属性文件,并使用spring的configurableenvironment在环境中设置这些属性。

如果您想在应用程序(jar)之外读取属性文件,那么您可以通过编程方式从相对文件路径读取属性文件。我已经提供了一个答案,这是相同的情况,读取属性文件,您可以跟随我编辑的答案从那里。

spring boot嵌入式Tomcat未加载ApplicationListener中的外部属性文件

现在,您可以使用html" target="_blank">系统属性或环境属性来存储先前从相对文件路径加载的属性,然后它将在应用程序中的任何位置可用。

@Autowired
private ConfigurableEnvironment  myEnv;

System.setProperty ("propertyName", "propertyValue");
 类似资料:
  • 问题内容: 我需要能够在其中存储数据库配置属性,并以 jstl* 表达式的形式包含它。(例如:$ {password}等)。怎么做? * 当前的hibernate.cfg.xml: 我需要这样的东西: 问题答案: 您声明使用Spring,然后为什么不让Spring进行所有艰苦的工作。让属性占位符替换所需的占位符。 免费提供建议,而不使用内部hibernate连接(不建议在生产中使用),在Sprin

  • 问题内容: 我已经使用Netbeans开发了Java桌面应用程序。在我的应用程序中,我使用了一些属性文件,并将其放置在Project文件夹下,以便可以使用类似的代码来访问它 但是,当我将应用程序部署并打包到.jar文件时,我找不到属性文件在哪里,并且我的应用程序无法从属性文件读取值。 我该如何解决该错误,我应该在哪里放置我的属性文件并将其加载? 问题答案: 将其放在下面,然后按如下所示使用它。 N

  • 我创建了一个spring boot应用程序,它读取一个excel文件,以便在前端显示数据,因此基本上它是持久数据的来源。我能够从eclipse正确地运行,但是当我创建一个spring boot jar并从命令行运行它时,它会失败,因为jar中没有包含文件。 我尝试了两个位置src/main/resources和/src/main/webapp/WEB-INF/external/,但在这两种情况下都

  • 问题内容: 我正在寻找在 独立的(桌面/秋千)* 应用程序中使用 Spring的 示例或教程,我进行了很多搜索,但找不到有用的东西,所有示例和教程均适用于Web应用程序,请告知。 * 问题答案: 使用maven创建独立应用程序,如下所示: 使用Maven创建独立的应用程序 将applicationContext放在类路径中,并按如下所示将其加载到主类中: 在此处查看全文: http://www.d

  • 我正在开发一个spring boot应用程序 我想用外部文件(例如)重写中的某些属性。 我尝试了几种方法: 中的“我的应用程序.属性”中的 我使用对其进行了测试。第一个方法只添加了属性,但没有重写它们。