交易部分提交或回滚

问题描述 投票:0回答:1

我在代码中配置的交易中遇到了一些问题。下面是带有将数据写入数据库的事务的代码。

Writer.java

class Writer {

    @Inject
    private SomeDAO someDAO;

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void write(){
        this.batchWrite();

    }


    private void batchWrite () {

        try {
            someDAO.writeToTable1(true);
        } catch(Exception ex) {
            someDAO.writeToTable1(false);
        }

        someDAO.writeToTable2();

    }
}

SomeDAO.java

class SomeDAO {

    @Inject
    private JdbcTemplate JdbcTemplate;

    public void writeToTable1(boolean flag) {
        // Writes data to table 1 using jdbcTemplate
        jdbcTemplate.update();
    }


    pulic void writeToTable2() {
        // Writes data to table 2 using jdbcTemplate
        jdbcTemplate.update();
    }

}

此处数据已正确存储到表1中,但有时表2被跳过。

我不确定这是怎么回事,因为两个表都已写入同一事务中。

无论是部分提交数据还是部分回滚。

我怀疑在SomeDAO类中,我正在注入JdbcTemplate对象,该对象正在创建新的连接,而不是使用现有的事务连接。

任何人都可以在这里帮助我吗?

java transactions jdbctemplate spring-transactions
1个回答
0
投票

尝试在@Transactional内部绑定一个事务管理器bean:

    //Create a bean
    @Bean
    public PlatformTransactionManager txnManager() throws Exception {
        return new DataSourceTransactionManager(jdbcTemplate().getDataSource());
    }

然后在@Transactional(“ txnManager”)中使用此事务管理器

© www.soinside.com 2019 - 2024. All rights reserved.