我正在尝试将 Spring 事务管理与 JDBI 3 集成。当我实现以下解决方案时,自动提交属性设置为 false,由于在提交或回滚事务之前关闭句柄,我得到以下异常*。
另一方面,如果自动提交属性设置为 true,则没有任何事务错误,但这次回滚不起作用(在运行时异常之后),因此 X 对象被持久化到数据库。
我使用 spring 2.0.3, JDBI 3.0.0-beta2 。
是否有任何推荐/适用的解决方案?
下面是配置类:
@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;
}
*检测到不正确的事务处理:已关闭具有打开事务的句柄。在关闭句柄之前,必须明确提交或回滚事务。Jdbi 已自动回滚此事务。
胡子哥哥
相关分类