如何将 Spring 事务管理与 JDBI 3 集成?

我正在尝试将 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 已自动回滚此事务。


BIG阳
浏览 229回答 1
1回答

胡子哥哥

问题解决了。我使用的是旧版本的 JDBI,更新了它(检查这个线程),一切都解决了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java