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

如何在独立应用程序(jar)中使用spring将外部文件的属性包含到hibernate.cfg.xml,spring,hibernate,jar,properties,Spring,Hibernate,Jar,Properties,我需要能够将数据库配置属性存储在应用程序jar使用的外部文件中,并以jstl表达式的形式包含它。(如:${password}等) 更新 org.hibernate.dial.DB2Dialect jdbc:db2://localhost:50001/svntools 根 根 com.ibm.db2.jcc.DB2Driver --> 真的 SpringConfig.xml文件 <?xml version="1.0" encoding="UTF-8"?> http://www

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


更新
org.hibernate.dial.DB2Dialect
jdbc:db2://localhost:50001/svntools
根
根
com.ibm.db2.jcc.DB2Driver
-->
真的
SpringConfig.xml文件

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

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


使用会话的类:

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;
    }



}
包fr.gouv.education.sirhen.svnreporting.persistence.impl;
导入java.io.File;
导入java.util.LinkedList;
导入java.util.List;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入org.hibernate.Transaction;
导入org.hibernate.cfg.AnnotationConfiguration;
导入org.hibernate.cfg.Configuration;
导入fr.gouv.education.sirhen.svnreporting.persistence.ProjectDAO;
导入fr.gouv.education.sirhen.svnreporting.persistence.eo.ProjectEntity;
公共类ProjectDAOImpl实现ProjectDAO{
私有静态最终字符串位置\u Hibernate=
“resources/hibernate.cfg.xml”;
私人会话工厂会话工厂;
public SessionFactory getSessionFactory(){
返回工厂;
}
public void setSessionFactory(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
公共项目(项目实体项目){
文件hibernatePropsFile=新文件(位置\u Hibernate);
会话会话=新配置().configure(hibernatePropsFile.buildSessionFactory().openSession();
事务t=session.beginTransaction();
会议.保存或更新(项目);
t、 提交();
session.close();
}
公共列表项目(){
文件hibernatePropsFile=新文件(位置\u Hibernate);
会话会话=新配置().configure(hibernatePropsFile.buildSessionFactory().openSession();
事务t=session.beginTransaction();
List projects=session.createCriteria(ProjectEntity.class).List();
t、 提交();
session.close();
返回项目;
}
公共列表getProjectsNames(){
文件hibernatePropsFile=新文件(位置\u Hibernate);
会话会话=新配置().configure(hibernatePropsFile.buildSessionFactory().openSession();
事务t=session.beginTransaction();
List projects=session.createCriteria(ProjectEntity.class).List();
t、 提交();
session.close();
List ProjectsNames=new LinkedList();
用于(项目实体项目:项目)
{
ProjectsNames.add(projet.getName());
}
返回项目SNAMES;
}
}

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

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

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

编辑答案 若您想在应用程序(jar)之外读取属性文件,那个么您可以从相对文件路径以编程方式读取属性文件。 我之前已经提供了一个答案,这与读取属性文件的情况相同,您可以从那里按照我编辑的答案进行操作

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

@Autowired
private ConfigurableEnvironment  myEnv;


嗨@Yasser Malek,你的问题还不够清楚,但根据我的理解,我可以为你提供一个答案,我正在开发一个独立的应用程序(可执行jar)我希望能够使用属性文件从jar外部创建hibernate.cfg参数中定义的db连接信息。我将相应地更新我的答案。您可以按照我编辑的问题,以便您可以重新发布。您可以看到,我已根据您的要求更新了我的答案,以便使用属性文件。您可以在您的d中使用它当您使用会话工厂时。
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;
    }



}
@Autowired
private ConfigurableEnvironment  myEnv;
System.setProperty ("propertyName", "propertyValue");