如何使用@TransactionalEventListener实现工作单元

时间:2019-01-06 14:28:12

标签: spring spring-boot

我想使用@TransactionalEventListener完成一个工作单元。换句话说,我要注册一个事务回调,该回调在提交事务之前触发。我想到的是一个Repository类,该类跟踪对聚合根和所有相关实体所做的更改。事务即将提交时,它将整个更改集写入数据库,如下所示。

@Component
@Transactional
class FlightRepository implements Repository{

    Flight findById(int id){
        // return Flight and start tracking changes
    }

    void add(Flight f){
        // add to list of flights to be created before transaction commit
    }

    void remove(Flight f){
        // add to list of flights to be deleted before transaction commit
    }        

    @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
    public void saveChanges(){
       // write all changes to db (adds/removes/updates)
    }
}

我需要确认的是,仍然可以在TransactionPhase.BEFORE_COMMIT回调中执行CRUD操作吗?

编辑:如注释中所述,将saveChanges()访问修饰符从private更改为public

1 个答案:

答案 0 :(得分:1)

是的。没关系。您在BEFORE_COMMIT回调中所做的工作将与工作单元的事务相同。

顺便说一句,为了使@TransactionalEventListener工作,您应该将其方法访问修饰符更改为非私有。