错误日记 quartz No Session found for current thread

SpringMVC+Spring3+Hibernate Quartz定时任务调用service查询获取不到CurrentSession 需求:         起一个定时任务,定时检索数据库中记录最后更新时间戳,超时报警,Job中关于service代码如下: WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();           UserService service=wac.getBean(UserService .c 阅读详情

错误原因:事务控制没有做好

原因详细:在spring的事务传播中,错误的将事务的传播特性配置成了

<span style="font-family:Microsoft YaHei;font-size:14px;"><tx:method name="*" propagation="SUPPORTS" /></span>

而Quartz的定时调度是需要启动子线程的。

SessionFactory的getCurrentSession并不能保证在没有当前Session的情况下会自动创建一个新的,这取决于CurrentSessionContext的实现,SessionFactory将调用CurrentSessionContext的currentSession()方法来获得Session。在Spring中,如果我们在没有配置TransactionManager/transactionAdvice并且没有事先调用SessionFactory.openSession()的情况直接调用getCurrentSession(),那么程序将抛出“No Session found for current thread”异常。如果配置了TranactionManager/transactionAdvice并且通过@Transactional或者声明的方式配置的事务边界,那么Spring会在开始事务之前通过AOP的方式为当前线程创建Session,此时调用getCurrentSession()将得到正确结果。

事务的传播特性定义如下

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 
表1事务传播行为类型 
事务传播行为类型说明 
1.PROPAGATION_REQUIRED 
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 
2.PROPAGATION_SUPPORTS 
支持当前事务,如果当前没有事务,就以非事务方式执行。 
3.PROPAGATION_MANDATORY 
使用当前的事务,如果当前没有事务,就抛出异常。 
4.PROPAGATION_REQUIRES_NEW 
新建事务,如果当前存在事务,把当前事务挂起。 
5.PROPAGATION_NOT_SUPPORTED 
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
6.PROPAGATION_NEVER 
以非事务方式执行,如果当前存在事务,则抛出异常。 
7.PROPAGATION_NESTED 
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 
当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。 


利用图层自动识别算法实现CAD到Revit BIM模型的高效转换 - VS2022与AutoCAD2024开发环境配置指南 本文详细介绍了如何配置VS2022与AutoCAD2024开发环境,并利用图层自动识别算法实现CAD图纸到Revit BIM模型的高效自动化转换。通过解析CAD图层的规律性,该算法能智能识别并分类墙、门、窗等构件,提取几何信息并驱动Revit自动创建三维模型,从而将传统繁琐的人工“翻模”工作转化为高效、准确的自动化流程,大幅提升BIM模型创建效率。 阅读详情

相关推荐

【NAS系统】DSM7.2部署SVN服务

早期的群晖版本可以在套件中心找到SVN Server直接安装,然后配置仓库和用户。但‌2提到DSM7.0之后套件中心没有SVN了,得用Docker。

qq_38350004的博客 4848

解决Quartz定时器中查询懒加载数据no session的问题

相信大家在web开发过程中一定遇到过一种情况,Class班级类一对多关联一个Student学生类,所以为了性能考虑,配置一个lazy-init=true,然后在前台页面需要访问懒加载数据时需要额外配置一个OpenSessionInViewFilter,但是可能并不知道这个过滤器到底做了什么,遇到Quartz定时中访问懒加载问题配置这个filter可没有用了,下面来讨论下,怎么解决这个问题。实验之前先

徐靖峰的专栏 6093

Python爬取拼多多商品数据保姆级教程(附源码及效果图)

本文介绍了使用Python爬取拼多多商品数据的完整教程。通过DrissionPage库模拟浏览器操作,利用正则表达式提取嵌入在HTML中的商品数据(关键步骤是从window.rawData变量获取),解析后转换为结构化数据并导出Excel。教程包含八大步骤:环境配置、浏览器初始化、网络监听、搜索模拟、数据提取(核心是正则匹配JSON)、数据验证、字段解析和Excel导出,最后提供了封装好的函数可直接调用。该方法特别适合课程作业或毕业设计获取电商数据,能爬取商品名称、价格、销量等关键信息,处理了价格单位转换等

weixin_46449236的博客 2077

终于解决了:No Session found for current thread

使用Spring+Hibernate,获取数据库Session时,总是抛出异常:No Session found for current thread。 在网卡找了好几天,终于解决 http://blog.youkuaiyun.com/greensurfer/article/details/8982876 现将我自己的配置贴出来 Spring配置文件spring.xml内容如下: <

lijing_lj928的专栏 1万+

最佳解决Maven同一依赖多版本共存问题,重复依赖(同一个jar包,多个版本)-maven-shade-plugin

公司的历史项目在导出功能上引用的是poi-3.12版本,后续再做word模板导出功能时用到了poi-3.15版本,升级完后发现项目的很多导出功能都瘫痪了。用旧版本,新功能无法使用;用新版本,旧功能瘫痪,且整改的工作量比较大。使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可。

S_White_Island的博客 1万+

保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)

本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。

weixin_29090917的博客 470

spring+hibernate下使用quartz出现no session的解决方法

在google上找了很久没有合适的解决办法,通常的建议是把hibernate的lazy改成false或者直接写sql。为了调度而启用lazy显然是不划算的。自己写sql,那就弃用了hibernate,两种方式都让人难以接收。最后看到一提示,spring可以使用OpenSessionInViewFilter和hibernateInterceptor来扩展hibernate的session,避...

南音 746

OpenCL编译环境配置

在 Linux 系统上配置 OpenCL 开发环境需要安装适当的驱动、运行时和开发工具。

深之JohnChen的专栏 2003

遇到当前线程无session的问题No Session found for current thread

今天在开发程序时,发生了一个错误,系统报No Session found for current thread 异常。根据网上搜索的结果,把问题解决了,这里总结一下。 Hibernate中SessionFactory的getCurrentSession并不能保证在没有当前Session的情况下会自动创建一个新的,是否自动创建新的取决于CurrentSessionContext的实现,SessionFactory将调用CurrentSessionContext的currentSess...

zibingdechengbao的博客 3002

ROS2进程内通信:零拷贝Intra-Process原理与实战

Intra-Process通信是ROS2实现低延迟节点间数据交换的核心机制,其本质是通过C++17智能指针与零拷贝共享内存,在同一进程内绕过序列化、系统调用和上下文切换。相比传统DDS跨进程通信,它将`geometry_msgs::Twist`类消息延迟从42μs降至0.8μs,显著提升机器人实时控制性能。该技术并非自动启用,需满足同执行器、QoS严格匹配、内存所有权明确三大约束,适用于机械臂控制、视觉SLAM、图像处理流水线等对端到端延迟敏感的场景。本文聚焦ROS2原生Intra-Process通讯的原理

weixin_30619101的博客 362

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 123

Spring+Quartz+Hibernate做定时任务时不能获得Session的解决方法

今天在做项目是遇到,Spring+Quartz+Hibernate做定时任务时不能获得Session;记录下来方便以后查看 方案如下: http://forum.spring.io/forum/spring-projects/container/102822-how-to-get-a-quartz-job-to-use-a-hibernate-transaction-session...

Yuit 5586

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

解决quartz在spring中,无法获得session的问题

框架:spring+Struts2 尝试1: protected Map getSession() throws Exception { return ActionContext.getContext().getSession(); } 结果:ActionContext空指针异常; 尝试2: public static HttpServletRequest getRequest(){ HttpServletRequest req = ((Serv

qq_41283321的博客 775

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

spring quartz hibernate no session 的问题

在ssh中整合quartz 定时任务过程中 使用hibernate操作数据库时会出现 no session 的情况. 产生原因 我们使用spring为解决hibernate在web请求中开启关闭问题使用了OpenSessionInViewFilter做延迟加载, 看OpenSessionInViewFilter的源码 可知, 这个东东需要httprequest 和 httpRespons

mingjie1212的博客 1631

spring 任务调度中出现懒加载 no session 问题

相信大家在web开发过程中一定遇到过一种情况,Class班级类一对多关联一个Student学生类,所以为了性能考虑,配置一个lazy-init=true,然后在前台页面需要访问懒加载数据时需要额外配置一个OpenSessionInViewFilter,但是可能并不知道这个过滤器到底做了什么,遇到Quartz定时中访问懒加载问题配置这个filter可没有用了,下面来讨论下,怎么解决这个问题。@Enti

talk is cheap 2831

SpringMVC quartz 无法注入service和no session问题

在给项目添加定时任务的时候,想要注入service时失败 查询资料得出 spring配置文件里面要有context:component-scan 扫描到你的定时任务类 而且在类上加@Component就行了。 而没有no session问题是因为事务原因,所以需要在方法上面添加@Transactional 就可以了

TOP_Y的专栏 810

解决no session问题的三种方式

  1.get() 采用立即加载方式,而 load() 采用延迟加载; 2.get() 方法执行的时候,会立即向数据库发出查询语句,而 load() 方法返回的是一个代理(此代理中只有一个 OID 属性),只有等真正使用该对象属性的时候,才会发出 sql 语句并执行   3.如果数据库中没有对应的记录 , get() 方法返回的是 null . 而 load() 方法出现异常 Objec...

Mountain_YS的博客 9415

Spring Boot 集成 Actuator 监控工具

Spring Boot Actuator 提供了对 SpringBoot 应用程序(可以是生产环境)监视和管理的能力, 可以选择通过使用 **HTTP Endpoint** 或使用 **JMX** 来管理和监控 SpringBoot 应用程序。

欲变世界,先变其身 982

SpringBoot整合任务调度框架Quartz及持久化配置

文章目录本篇要点SpringBoot与Quartz单机版快速整合引入依赖创建Job调度器Scheduler绑定自动配置,这里演示SimpleScheduleBuilder手动配置,这里演示CronScheduleBuilderyml配置主启动类测试Quartz持久化配置创建数据库表引入mysql相关依赖配置yml配置数据源创建任务启动测试源码下载参考阅读 本文侧重SpringBoot与Quartz的整合,Quartz的基本入门概念不清楚的小伙伴可以看看这篇文章:任务调度框架Quartz快速入门! 本篇要

天乔巴夏丶 1310

Spring Boot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除

Quartz

Angus博客 6218

Springboot + Quartz 实现分布式定时任务集群

一、什么是 Quartz? 如果仅仅只是使用定时任务,可以使用 spring 的schedule 实现,方便、代码量少、易于实现。但是当使用分布式进行部署的时候,就会出现所有的服务器都在跑同一个定时任务,出现一个定时任务被执行多次的情况。那么最好的方式是使用 quartz 进行定时任务的调度。即:quartz 是一个为了解决分布式定时任务的导致任务重复调度的框架。效果就是,起多个工程,同一个定时任务只会在一个工程上跑。

陌守 1万+
上一篇: 修改tomcat命令窗口名称
下一篇: VIA驱动不自动切换
MTU_X79
博客等级 码龄15年 4粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值