`
nggno1
  • 浏览: 5758 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

关于在Spring托管Hibernate中使用定期任务产生No Hibernate Session bound to thread错误的解决

 
阅读更多

    最近的新项目想要做一件这样的事情:一个定期任务做一些业务逻辑与数据库操作。这个任务需要定时启动完成。

    我不想将定期任务新建一个后台java然后用bat进行处理,想直接将任务与web环境整合在一起。开始的时候自己编写了一个listener,在contextInitialized的地方 实例化一个timetask来做相应的事情。结果在task中想要进行hibernate调用的时候报错了,开始时候代码是这样的

web.xml中加入监听器

 

 

	<listener>
		<listener-class>
			com.taikang.imc.web.SmsTaskLoaderListener
		</listener-class>
	</listener>

 SmsTaskLoaderListener为监听器类

 

 

 

               //在contextInitialized中加入
                springContext = WebApplicationContextUtils
		.getWebApplicationContext(arg0.getServletContext());
		if(log.isDebugEnabled()){
			if(springContext!=null)
				log.debug("Spring ApplicationContext 初始化成功!");
			else
				log.debug("Spring ApplicationContext 初始化失败!");
		}
		ReceiveSmsTask rst =  new ReceiveSmsTask();
		rst.init(springContext);
		receiveScanner.scheduleAtFixedRate(rst, 2000, 6 * 1000);

 

 ReceiveSmsTask为任务类。

 后来运行中报错:No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here 大意是监听器中不存在Session,并且事务有配置问题。

查证了自己配置文件的事务部分,并无问题,整个WEB环境也能够正常运行,真是百思不得其解。

后来网上搜索,仔细查证,发现我的hibernate使用时候的文件中有这样的代码

 

 

public Session getSession() {
		return sessionFactory.getCurrentSession();
		// return sessionFactory.openSession();
	}
 

 

然后有人说:把其中的getCurrentSession改成openSession就可以使用,当没有事物启动的时候getCurrentSession是无法创建Session的。

 

参考:http://www.iteye.com/topic/87035

opensession是从sessionfactory得到一个新的session,所以可以使用,而getCurrentSession是从当前线程 中得到事务开始时创建transaction的那个session,而你的事务没有能正确的启动,所以并没有一个session绑定到当前线程,所以你也 得不到。

我的最终的解决办法是通过注解给我的service加上事务即可:@Transactional

于是给自己的

ReceiveSmsTask加上@Transactional 一路畅通

 

 

 

分享到:
评论
2 楼 nggno1 2012-08-17  
肖大富 写道

我的是ssh2里边加一个Spring定时任务。  结果定时的那个方法报这个错。。。完全不知道怎么弄啊 。。。

你需要将任务类加上@Transactional吧
1 楼 肖大富 2012-08-17  

我的是ssh2里边加一个Spring定时任务。  结果定时的那个方法报这个错。。。完全不知道怎么弄啊 。。。

相关推荐

    org.hibernate.HibernateException: No Hibernate Session bound to thread

    然而,在使用 Hibernate 进行数据库操作时,经常会遇到 "No Hibernate Session bound to thread" 的错误信息。本文将详细介绍该错误的解决方案。 错误原因 "No Hibernate Session bound to thread" 错误信息通常是...

    Hibernate-nosession

    本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么是Hibernate Session。Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作...

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    Spring+hibernate+quartz 定时操作数据库

    在spring+hibernate的框架中定时操作数据库,主要是拿到sessionFactory,不会出现no session 和transaction no-bound等问题,由sessionFactory完成对数据的操作,有些包是没有用的,有兴趣的可以自己删除掉

    使用Hibernate一些常见错误解决办法

    当遇到`no current session bound to current context`错误时,通常是因为事务管理方式不正确。Hibernate提供了多种会话上下文配置,如`thread`、`jta`等。在这种情况下,推荐使用`thread`配置,确保每个线程都有...

    spring分别与jdbc和hibernate结合的事务控制--案例

    在Spring中,我们可以使用HibernateTemplate或SessionFactoryBean来配置和管理Hibernate。同样,Spring的声明式事务管理也可以应用到Hibernate上,只需将@Transactional注解添加到使用Hibernate的方法上,Spring就会...

    JAVA错误文档.pdf

    4. Hibernate框架错误:文档还包含了“org.hibernate.HibernateException: No Hibernate Session bound to thread”等错误信息,这是Hibernate框架常见的异常,表明在当前线程上没有绑定Hibernate Session。...

    OA系统整体设计及约定、搭建环境.rar_OA系统及配置_OA系统整体设计及约定、搭建环境_creation

    hibernate就会抛出: No Hibernate Session bound to thread, and configuration does not allow creation of one here}异常。 在实际的SSH web应用开发中,我们通常用spring来进行事务的管理。我们一般不会在dao层...

    hibernate_reference使用指南全

    为了集成 Hibernate,需要在 Ant 构建脚本中添加必要的任务来处理 Hibernate 相关的构建工作。 - **1.2.5 启动与辅助工具** 在启动应用之前,需要确保所有的配置正确无误。此外,还可以使用 Hibernate 提供的一些...

    SPring+structs2+hibernate框架搭建

    1. **Spring配置文件问题**:如果在配置Spring的`applicationContext.xml`文件时遇到错误“The prefix "context" for element "context:component-scan" is not bound”,需要在配置文件头部添加对应的命名空间声明...

    Hibernate 3.x 参考手册

    通过以上详细分析,可以清晰地了解到 Hibernate 3.x 版本中关于快速启动、基础介绍、架构设计、配置管理、持久化类定义以及基本 ORM 映射的核心知识点。这些内容对于初学者理解和掌握 Hibernate 的基本用法至关重要...

    引入mybatis-plus报 Invalid bound statement错误问题的解决方法

    "引入mybatis-plus报Invalid bound statement错误问题的解决方法" Mybatis-Plus是一个基于Mybatis的增强工具,旨在...如果您在使用Mybatis-Plus时遇到Invalid bound statement错误,可以按照本文的方法来解决问题。

    数据池连接Name jdbc is not bound in this Context解决方案

    总之,解决“Name jdbc is not bound in this Context”错误的关键在于正确配置数据源,并在Java代码中使用JNDI查找数据源以获取数据库连接。理解并熟练掌握这些步骤对于开发基于Java Web的应用程序来说至关重要。

    Hibernate Reference Documentation3.1

    1. Introduction to Hibernate 1.1. Preface 1.2. Part 1 - The first Hibernate Application 1.2.1. The first class 1.2.2. The mapping file 1.2.3. Hibernate configuration 1.2.4. Building with Ant 1.2.5. ...

    swoole#swoole-wiki#3.13.4 - 错误信息: XXXX client has already been b

    错误信息: XXXX client has already been bound to another coroutine使用协程客户端时出现以下错误信息:re

    hibernate

    - **上下文会话**:探讨如何在不同的上下文中管理和使用 Hibernate 会话。 #### 四、配置 - **编程式配置**:通过 Java 代码来进行 Hibernate 的配置。 - **SessionFactory 获取**:指导如何获取和使用 ...

    关于springboot我出过的那些错误.docx

    Spring Boot 中的常见错误和解决方法 ...这些错误都是在使用 Spring Boot 框架进行开发时常见的错误,通过了解这些错误的原因和解决方法,我们可以更好地避免和解决这些错误,从而提高开发效率和质量。

    mybatisplus报Invalid bound statement (not found)错误的解决方法

    在使用MyBatisPlus进行开发时,可能会遇到一个常见的错误——`Invalid bound statement (not found)`。这个错误通常表示MyBatisPlus无法找到你尝试调用的Mapper接口的方法。本文将详细解析这个问题的原因以及提供...

    PDO版本问题 Invalid parameter number: no parameters were bound

    然而,当遇到"Invalid parameter number: no parameters were bound"错误时,这意味着尝试执行的SQL语句中的占位符参数没有正确地与实际值绑定。 这个问题在某些旧版本的PHP和PDO中被报告为一个bug,特别是...

    JavaBean - Bound属性

    在给定的压缩包文件中,`bound.jar`可能是包含了实现Bound属性的JavaBean的类库,而`META-INF`目录则可能包含关于该jar文件的元数据,比如`MANIFEST.MF`文件,用于描述jar文件的版本、作者等信息。`com`和`src`目录...

Global site tag (gtag.js) - Google Analytics