【发布时间】:2014-11-01 06:02:36
【问题描述】:
当数据更新时,我需要通过 JMS 向外部系统发布通知事件。我希望在将对象提交到数据库时在同一事务中完成此操作以确保完整性。
spring-data-rest 发出的 ApplicationLifecycle 事件似乎是实现此逻辑的合乎逻辑的地方。
@org.springframework.transaction.annotation.Transactional
public class TestEventListener extends AbstractRepositoryEventListener<Object> {
private static final Logger LOG = LoggerFactory.getLogger(TestEventListener.class);
@Override
protected void onBeforeCreate(Object entity) {
LOG.info("XXX before create");
}
@Override
protected void onBeforeSave(Object entity) {
LOG.info("XXX before save");
}
@Override
protected void onAfterCreate(Object entity) {
LOG.info("XXX after create");
}
@Override
protected void onAfterSave(Object entity) {
LOG.info("XXX after save");
}
}
但是,这些事件发生在 tx 开始和提交之前和之后。
08 15:32:37.119 [http-nio-9000-exec-1] INFO n.c.v.vcidb.TestEventListener - XXX before create
08 15:32:37.135 [http-nio-9000-exec-1] TRACE o.s.t.i.TransactionInterceptor - Getting transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]
08 15:32:37.432 [http-nio-9000-exec-1] TRACE o.s.t.i.TransactionInterceptor - Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]
08 15:32:37.479 [http-nio-9000-exec-1] INFO n.c.v.vcidb.TestEventListener - XXX after create
spring-data-rest 有什么扩展点来添加将在 spring 托管事务中执行的行为?
【问题讨论】:
-
你明白了吗?现在面临同样的问题。
-
恐怕目前还没有解决方案。
-
我在这里遇到了同样的问题。如果你们有任何有用的东西,请发帖@Daniel
标签: spring-data-jpa spring-transactions spring-data-rest