Я настраиваю приложение Spring MVC, используя Hibernate, MySQL и DBCP2.
Я пытаюсь понять, где мне установить dataSource.
Представьте себе ситуацию, когда я использую LocalSessionFactoryBean
для получения экземпляров Hibernate Session.
Настройка источника данных
@Bean
public BasicDataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
// dataSource configurations...
return dataSource;
}
Настройка LocalSessionFactoryBean
@Bean
public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {
LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
factory.setHibernateProperties(new PropertiesBuilder() {
Properties properties = new Properties();
@Override
public Properties build() {
return this.properties;
}
@Override
public PropertiesBuilder put(String key, String value) {
properties.put(key, value);
return this;
}
}.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect").build());
return factory;
}
Настройка TransactionManager
@Bean
public HibernateTransactionManager transactionManager(LocalSessionFactoryBean sessionFactory) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory.getObject());
return txManager;
}
Теперь, где я должен установить источник данных?Я имею в виду, в чем разница между transactionManager.setDataSource
и LocalSessionFactoryBean.setDataSource
?
В LocalSessionFactoryBean
@Bean
public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {
LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
factory.setDataSource(dataSource);
// omitted for brevity..
return factory;
}
В транзакцииManager
@Bean
public HibernateTransactionManager transactionManager(LocalSessionFactoryBean sessionFactory, DataSource dataSource) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setDataSource(dataSource);
// omitted for brevity
return txManager;
}