如何将 Spring 事务管理与 JDBI 3 集成?
How to integrate Spring transaction management with JDBI 3?
我正在尝试将 spring 事务管理与 JDBI 3 集成。当我实施以下解决方案时,自动提交 属性 设置为 false,由于关闭句柄,我得到以下异常*在提交或回滚事务之前。
另一方面,如果自动提交 属性 设置为真,则没有任何事务错误,但这次回滚不起作用(在运行时异常之后),因此 X 对象被持久保存到数据库中。
我使用 spring 2.0.3, JDBI 3.0.0-beta2 .
有什么 recommended/applicable 解决方案吗?
配置如下class:
@Bean
public HikariDataSource hikariDataSource() {
HikariConfig dataSourceConfig = new HikariConfig();
dataSourceConfig.setDriverClassName(driverClassName);
dataSourceConfig.setJdbcUrl(jdbcUrl);
dataSourceConfig.setUsername(username);
dataSourceConfig.setPassword(password);
dataSourceConfig.setAutoCommit(true);
return new HikariDataSource(dataSourceConfig);
}
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSourceProxy(HikariDataSource dataSource) {
return new TransactionAwareDataSourceProxy(dataSource);
}
@Bean
public PlatformTransactionManager platformTransactionManager(HikariDataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public Jdbi jdbi(TransactionAwareDataSourceProxy transactionAwareDataSourceProxy) {
Jdbi jdbi = Jdbi.create(transactionAwareDataSourceProxy);
jdbi.installPlugin(new SqlObjectPlugin());
return jdbi;
}
这里是服务层
@Override
@Transactional
public Long createX(X x) {
Long aLong = xDao.insertX(x);
if(true) throw new RuntimeException();
return aLong;
}
*Improper transaction handling detected: A Handle with an open transaction was closed. Transactions must be explicitly committed or rolled back before closing the Handle. Jdbi has rolled back this transaction automatically.
问题已解决。我使用的是旧版本的 JDBI,对其进行了更新 (check this thread ) 并解决了所有问题。
我正在尝试将 spring 事务管理与 JDBI 3 集成。当我实施以下解决方案时,自动提交 属性 设置为 false,由于关闭句柄,我得到以下异常*在提交或回滚事务之前。
另一方面,如果自动提交 属性 设置为真,则没有任何事务错误,但这次回滚不起作用(在运行时异常之后),因此 X 对象被持久保存到数据库中。
我使用 spring 2.0.3, JDBI 3.0.0-beta2 .
有什么 recommended/applicable 解决方案吗?
配置如下class:
@Bean
public HikariDataSource hikariDataSource() {
HikariConfig dataSourceConfig = new HikariConfig();
dataSourceConfig.setDriverClassName(driverClassName);
dataSourceConfig.setJdbcUrl(jdbcUrl);
dataSourceConfig.setUsername(username);
dataSourceConfig.setPassword(password);
dataSourceConfig.setAutoCommit(true);
return new HikariDataSource(dataSourceConfig);
}
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSourceProxy(HikariDataSource dataSource) {
return new TransactionAwareDataSourceProxy(dataSource);
}
@Bean
public PlatformTransactionManager platformTransactionManager(HikariDataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public Jdbi jdbi(TransactionAwareDataSourceProxy transactionAwareDataSourceProxy) {
Jdbi jdbi = Jdbi.create(transactionAwareDataSourceProxy);
jdbi.installPlugin(new SqlObjectPlugin());
return jdbi;
}
这里是服务层
@Override
@Transactional
public Long createX(X x) {
Long aLong = xDao.insertX(x);
if(true) throw new RuntimeException();
return aLong;
}
*Improper transaction handling detected: A Handle with an open transaction was closed. Transactions must be explicitly committed or rolled back before closing the Handle. Jdbi has rolled back this transaction automatically.
问题已解决。我使用的是旧版本的 JDBI,对其进行了更新 (check this thread ) 并解决了所有问题。