创建Hibernate SessionFactory时如何设置数据源?
我正在创建SessionFactory,并在创建SessionFactory的代码中将数据源作为对象,但是无法将数据源设置为Hibernate
Configuration对象。那么如何将数据源设置为SessionFactory?
Configuration configuration = new Configuration();Properties properties = new Properties();
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
configuration.setProperties(properties);
configuration.setProperty("packagesToScan", "com.my.app");
SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
回答:
要提供与Session的JDBC连接,您需要实现ConnectionProvider。
默认情况下,Hibernate使用DatasourceConnectionProvider
它DataSource
从JNDI 获取实例。
要使用自定义DataSource
实例,请使用实例并将其InjectedDataSourceConnectionProvider
注入DataSource
其中。
在InjectedDataSourceConnectionProvider上有TODO注释
注意:必须先调用setDataSource(javax.sql.DataSource)才能进行configure(java.util.Properties)。
TODO:找不到setDataSource实际调用的位置。不能仅通过此方法进行配置吗???
根据说明,setDataSource()
从configure()
方法调用方法。
public class CustomConnectionProvider extends InjectedDataSourceConnectionProvider { @Override
public void configure(Properties props) throws HibernateException {
org.apache.commons.dbcp.BasicDataSource dataSource = new BasicDataSource();
org.apache.commons.beanutils.BeanUtils.populate( dataSource, props );
setDataSource(dataSource);
super.configure(props);
}
}
您还可以扩展UserSuppliedConnectionProvider。
根据ConnectionProvider的合同
实现者应提供一个公共的默认构造函数。
如果通过Configuration实例设置了自定义ConnectionProvider,则Hibernate将调用此构造函数。
Configuration cfg = new Configuration();Properties props = new Properties();
props.put( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() );
cfg.addProperties(props);
以上是 创建Hibernate SessionFactory时如何设置数据源? 的全部内容, 来源链接: utcz.com/qa/410814.html