Если у вас есть DataSource
, хранящийся в JNDI, просто используйте:
configuration.setProperty(
"hibernate.connection.datasource",
"java:comp/env/jdbc/yourDataSource");
Но если вы используете пользовательский поставщик источников данных, такой как Apache DBCP или BoneCP и , вы неЕсли вы хотите использовать инфраструктуру внедрения зависимостей, такую как Spring , то вы можете внедрить ее в StandardServiceRegistryBuilder
перед созданием SessionFactory
:
//retrieve your DataSource
DataSource dataSource = ...;
Configuration configuration = new Configuration()
.configure();
//create the SessionFactory from configuration
SessionFactory sf = configuration
.buildSessionFactory(
new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())
//here you apply the custom dataSource
.applySetting(Environment.DATASOURCE, dataSource)
.build());
Обратите внимание, что если вы используете этот подход, вы небольше не нужно помещать параметры соединения в ваш файл hibernate.cfg.xml.Вот пример совместимого файла hibernate.cfg.xml при использовании подхода сверху:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="show_sql">false</property>
<!-- your mappings to classes go here -->
</session-factory>
</hibernate-configuration>
Код, протестированный выше на Hibernate 4.3.