【发布时间】:2021-06-12 09:37:58
【问题描述】:
有一个包含 MySQL、Hibernate 和 HicariCP 组合的应用程序,用于使用 JTA 会话管理范例与数据库进行交互。 使用 WildFly 应用服务器运行的应用程序。 配置如下所示
@Configuration
@EnableTransactionManagement
@ComponentScan("XXX")
public class DatabaseConfig {
@Bean
public LocalSessionFactoryBean sessionFactory(CustomDatasource datasource) {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(datasource);
sessionFactory.setPackagesToScan("XXX");
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory);
return transactionManager;
}
@Bean
public DefaultMergeEventListener mergeEventListener() {
return new DefaultMergeEventListener();
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.current_session_context_class", "jta");
properties.put("hibernate.transaction.factory_class", "org.hibernate.transaction.JTATransactionFactory");
properties.put("hibernate.transaction.manager_lookup_class", "org.hibernate.transaction.JBossTransactionManagerLookup");
properties.put("hibernate.transaction.jta.platform", "JBossAS");
return properties;
}
}
在将 Hibernate 从 3.6.10.Final 升级到 5.1.17.Final 后,我们注意到从连接池中检索到的连接数显着增加。 出于验证目的,我们添加了一个计数器,用于记录 javax.sql.Datasource.getConnection() 执行的次数。
我们执行了涉及多个 API 的某些业务流程,并比较了升级前后的结果。有趣的是,每个 API 获得的连接数正好翻了一番。
就变化而言 - 只是依赖版本升级,更新了几个 hibernate 类包并在 Dao/Repository 级别添加了@Transactional 注解。没有别的了。
想知道 Hibernate 内部发生了什么变化导致了这种差异? 感谢任何帮助!
【问题讨论】:
标签: java mysql hibernate transactions database-connection