java–Spring Scheduler– 当存在循环依赖时,调度方法不会在事务中启动

java–Spring Scheduler– 当存在循环依赖时,调度方法不会在事务中启动,第1张

概述我正在使用一个使用Spring 3,Hibernate和JPA的应用程序.我有两个课程如下:@Component class Manager { @Autowired Util util; } 和@Component class Util { @Autowired Manager manager; @Schedule

我正在使用一个使用Spring 3,Hibernate和JPA的应用程序.我有两个课程如下:

@Componentclass Manager {    @autowired    Util util;}

@Componentclass Util {    @autowired    Manager manager;    @Scheduled(fixedDelay = 1 * 60 * 1000)    @Transactional(propagation = Propagation.required)    public voID scheduledMethod(){        // Need to update the database in a transaction    }}

申请背景的相关部分如下:

    

使用此配置,我得到以下异常

javax.persistence.TransactionrequiredException: no transaction is in progress        at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:978)        at sun.reflect.GeneratedMethodAccessor88.invoke(UnkNown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:601)        at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)        at com.sun.proxy.$Proxy43.flush(UnkNown Source)        at sun.reflect.GeneratedMethodAccessor88.invoke(UnkNown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:601)        at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)        at com.sun.proxy.$Proxy43.flush(UnkNown Source)

如果我从Util类中删除Manager类的自动装配,它可以正常工作.此外,在调试时,我发现即使应用程序上下文文件中存在某些错误,预定方法也会开始执行.

由于某些遗留原因,我无法避免循环依赖.
有人可以帮助解决为什么在循环依赖的情况下发生此异常?最佳答案您可以使用@postconstruct实现此目的

@Componentclass Manager {    Util util;    public voID setUtil(Util util) {        this.util =  util;    }}@Componentclass Util {    @autowired    Manager manager;    @postconstruct    public voID init(){        manager.setUtil(this);    }    @Scheduled(fixedDelay = 1 * 60 * 1000)    @Transactional(propagation = Propagation.required)    public voID scheduledMethod(){        // Need to update the database in a transaction    }}
总结

以上是内存溢出为你收集整理的java – Spring Scheduler – 当存在循环依赖时,调度方法不会在事务中启动全部内容,希望文章能够帮你解决java – Spring Scheduler – 当存在循环依赖时,调度方法不会在事务中启动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)