Java 执行DML数据库操作并在单个事务中发送JMS消息
请看一看这个例子:Java 执行DML数据库操作并在单个事务中发送JMS消息,java,database,spring,transactions,jms,Java,Database,Spring,Transactions,Jms,请看一看这个例子: @Component public class TransactionTest { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private JmsTemplate jmsTemplate; @Transactional public void doTest() { jdbcTemplate.execute("INSERT INTO s
@Component
public class TransactionTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private JmsTemplate jmsTemplate;
@Transactional
public void doTest() {
jdbcTemplate.execute("INSERT INTO some_table VALUES ('some_value')");
jmsTemplate.convertAndSend("some_queue", "some_value");
...
throw new SomeException();
}
...
}
出于一致性目的,我希望以原子方式执行这两个操作(插入数据库行和发送JMS消息),因此当引发SomeException
时,这两个操作都将回滚(数据库中没有新行,队列中也没有新的JMS消息)。有什么机制来处理这个问题吗?目前我正在使用Spring框架、PostgreSQL和Apache ActiveMQ。您将需要使用XA事务。此处提供信息,此处提供实现:。Spring doc对此也有一些看法: