要提供与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);



