声明: 非原创
需求:
出于某种目的,我们要修改 hibernate.cfg.xml 文件中的一些属性
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:test</property>
<property name="connection.username"></property>
<property name="connection.password"></property>
需要在程序中动态生成,或者读取其他配置文件。
分析:
需要重hibernate加载配置文件的步骤开始,找到能修改的地方。
查看源码:
static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
这段代码说明在实例化HibernateSessionFactory时,就将hibernate.cfg.xml文件读入并配置.
跟踪configuration.configure(configFile)及configuration.buildSessionFactory();后发现,hibernate将xml文件分析后将属性置为properties交到DriverManagerConnectionProvider连接数据库,
那么,在provider连接数据前修改properties中的值就可以达到动态配置的目的。
实现:
修改代码
String configFile = "hibernate.cfg.xml";//配置文件位置
configuration.configure(configFile);
configuration.setProperty("hibernate.connection.username", "oneboss");//修改了数据库连接的用户名
SessionFactory sessionFactory = configuration.buildSessionFactory();
测试成功