当前位置: 首页 > 知识库问答 >
问题:

在Spring 4.2.5中,Bean在ContextRefShedEvent上没有事务代理

谭嘉歆
2023-03-14

我有一个bean(SettingService),它用@Transactional注释修饰,并注入到另一个bean中,在上下文刷新事件中调用这个bean。

public class DefaultConfigManager
    implements ApplicationListener<ContextRefreshedEvent>, ConfigManager {

    @Autowired
    private SettingService service;

    @Override
    public void onApplicationEvent( ContextRefreshedEvent event ) {
        System.out.println( "Proxy: " + AopUtils.isJdkDynamicProxy( service ) );
        String key = service.getSystemSetting( "KEY" );
    }

事务通常工作得很好,上面的方法在Spring 4.1.9中可以正常工作,其中println表示SettingService bean是一个动态JDK代理(用于事务处理)。

在org.springframework.orm.hibernate4.springsessioncontext。currentSession(SpringSessionContext.java:134)

在org.hibernate.internal.sessionFactoryImpl。getCurrentSession(SessionFactoryImpl.java:993)

并且println指示SettingService不再是代理/已经修饰,这意味着不会启动任何事务

共有1个答案

郗唯
2023-03-14

我和你有同样问题。我的解决办法是,将@Transactional注释放在类级别而不是方法级别。

 类似资料:
  • 问题内容: 我们有: MyInterface有一个方法:。 当go()执行时,我们开始一个新的事务,该事务在方法完成时进行提交/回滚-很好。 现在,在go()中,我们在MyClass中调用了具有的私有方法。看来Spring会“忽略” REQUIRES_NEW批注,并且不会启动新的事务。我相信这是因为Spring AOP在接口级别(MyInterface)上运行,并且不会拦截对MyClass方法的任

  • 我正在Spring3和Hibernate3中进行产品构建,我已经更新了这个Hibernate5和Spring5。现在我可以部署应用程序了,但是当我尝试与数据库连接时,会得到“javax.persistence.TransactionRequiredException:no transaction is in progress”

  • GuiceModule类: 控制器类: 和StackTrace: 我做错了什么? 谢谢

  • 如果我有一个在类级别上标记为的基本Dao类,这将导致Dao的每个调用都在它自己的事务中运行。 如果我在某个地方创建了一个方法,它使用多个对不同道方法的调用,会怎么样?这些调用中的每一个都将在自己的事务中运行,还是事务将被包装? 如果它被包装,你会认为这是一个很好的做法,在一个通用的DAO类中有<代码> @事务性< /代码>注释,以便DAO可以直接用作<代码> @ AutoWordBaseDaO。

  • 根据这里的baeldung 如果我们使用的是Spring Boot项目,并且在类路径上有spring-data-*或spring-tx>依赖项,那么事务管理将通过>default启用。“ serviceConfig.java 哪里出了问题?,我在SpringBoot配置中遗漏了什么? 提前感谢你的帮助