我在代码中配置的交易中遇到了一些问题。下面是带有将数据写入数据库的事务的代码。
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
对象,该对象正在创建新的连接,而不是使用现有的事务连接。
任何人都可以在这里帮助我吗?
尝试在@Transactional内部绑定一个事务管理器bean:
//Create a bean
@Bean
public PlatformTransactionManager txnManager() throws Exception {
return new DataSourceTransactionManager(jdbcTemplate().getDataSource());
}
然后在@Transactional(“ txnManager”)中使用此事务管理器