Spring-quartz定时任务--事物问题

笔者在开发javaweb项目中遇到了需要使用定时任务的需求,自然而然想到了要用spring的quartz组件。

配置文件如下


定时任务配置文件

当我们去指定的service层去实现具体业务逻辑的时候,遇到了一个事物的问题

我们的项目持久层框架用的是hibernate。在调用hibernate底层方法时,遇到了一个bug,获取不到hibernate的session。项目整体封装了底层的增删改查的工具方法,获取session的方法是sessionFactory.getCurrentSession();百度里面说是,要获取session的前提是保证开启事物。我代码里的事物实现是在service类上加上@Transactional注解。spring的注解是用spring的aop实现的,实现aop的前提是需要有类的切换才能实现动态代理,实现切面。(一般来说我们都是用控制层去调用业务层代码,在业务层添加事物注解)。

好了,找到报错的原因,就可以针对性的解决了。

我是手动开启一个事物,代码结束后在手动提交事物。代码如下:

DefaultTransactionDefinition def = new DefaultTransactionDefinition();

   def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

PlatformTransactionManager txManager = ContextLoader.getCurrentWebApplicationContext().getBean(PlatformTransactionManager.class);

//spring无法处理thread的事务,声明式事务无效

//记录一个事物状态

TransactionStatus tstatus = txManager.getTransaction(def);

//提交这个事物

txManager.commit(tstatus);

------------------------------------------------------结束---------------------------------------------

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容