`

在spring框架中添加HibernateInterceptor使得quartz可以调用

阅读更多

翻译的这篇文章包含了好几个知识点,虽然短了点儿,但是非常有用。

1.spring

2.hibernate

3.quartz--定时调度工具,spring已经做了封装,也可以单独使用。

4.OpenSessionInViewFilter--web框架下的一个filter,能够让web request使用单一的hibernate session。

有的j2ee项目在web.xml文件中添加了OpenSessionInViewFilter,其目的是给web request提供单一的hibernate session,但是它也只能给web request提供hibernate session。也就是说,如果有某一个hibernate请求不是经由web request发起的,而是由quartz这样的定时任务发起的,那么quartz怎么样才能得到hibernate session呢?

解决办法就是使用HibernateInterceptor。当quartz发起hibernate session请求时,HibernateInterceptor会提供一个hibernate session给它。

配置文件如下:

 

xml 代码

 

  1. <!-- Declaration of HibernateInterceptor -->  
  2.     <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">  
  3.          <property name="sessionFactory">  
  4.            <ref bean="sessionFactory"/>  
  5.          </property>  
  6.     </bean>       
  7.     <!-- Manager template  -->  
  8.     <bean id="txProxyTemplate" abstract="true"  
  9.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  10.         <property name="transactionManager" ref="transactionManager"/>  
  11.         <property name="transactionAttributes">  
  12.             <props>  
  13.                 <prop key="save*">PROPAGATION_REQUIRED</prop>  
  14.                 <prop key="remove*">PROPAGATION_REQUIRED</prop>  
  15.                 <prop key="update*">PROPAGATION_REQUIRED</prop>                   
  16.                 <prop key="create*">PROPAGATION_REQUIRED</prop>      
  17.                 <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>  
  18.             </props>  
  19.         </property>  
  20.         <property name="preInterceptors">  
  21.             <list>  
  22.              <ref bean="hibernateInterceptor"/>  
  23.             </list>  
  24.         </property>                           
  25.     </bean>  
  26.     <!-- Sample Manager that encapsulates business logic -->  
  27.     <bean id="userManager" parent="txProxyTemplate">  
  28.         <property name="target">  
  29.             <bean class="com.acme.service.impl.UserManagerImpl" autowire="byName"/>  
  30.         </property>  
  31.     </bean>  


其中,<!-- Declaration of HibernateInterceptor -->部分定义了HibernateInterceptor

 <!-- Manager template  -->部分定义了模板,并且加入了HibernateInterceptor

<!-- Sample Manager that encapsulates business logic -->部分定义业务逻辑中的bean,记住,一定让他使用模板。

译者言:

1.这样做使得非web request可以使用j2ee资源。

2.我的做法和上面有些差别,但是也成功了。 我的做法是:

我没有定义<!-- Declaration of HibernateInterceptor -->这一部分,只定义了模板,在添加bean的时候使用模板。

 

原文如下:
Using HibernateInterceptor to bind Hibernate Sessions for Quartz jobs in Spring
I use the OpenSessionInViewFilter to provide a single Hibernate Session for each request to my Spring webapplications. It works transparently and well, but only for web requests. So how do you provide a Hibernate Session to your background jobs (like Quartz scheduled jobs)?

I wire a HibernateInterceptor into my proxy template for all the managers in my application. With this configuration, when Quartz fires up a job and makes a call to the manager/service layer the HibernateInterceptor binds a Hibernate Session to the background thread. Beautiful.

It looks something like this:(代码同上)

分享到:
评论

相关推荐

    spring quartz 时间调用框架

    1. **JobDetail**: Spring中的`JobDetailBean`用于定义一个Job,它可以绑定到Spring的bean,使得Job可以利用Spring的依赖注入来获取服务。 2. **Trigger**: 使用`CronTriggerBean`或`SimpleTriggerBean`来定义触发...

    spring4+hibernate5+quartz2+hdfs整合

    Quartz 2 提供了更稳定、更健壮的调度功能,支持集群环境,可以在分布式系统中协调任务执行。它可以用来安排任务的触发,如定时发送邮件、执行数据清理等。Quartz 2 的API允许开发者方便地创建、修改和删除作业及...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    我们可以在 Spring 的配置文件中定义 Quartz 的 bean,以便实现任务的定时执行。 QuartzJob.java 在这个示例中,我们定义了一个 QuartzJob 类,该类实现了任务的执行。在这个类中,我们定义了一个 work 方法,该...

    quartz整合springbatch动态集群定时实现mysql参考

    在这个项目中,结合Quartz和Spring Batch,开发者可能已经创建了一个系统,可以在集群环境中自动调度和执行Spring Batch作业。MySQL被用作Quartz的JobStore和Spring Batch的持久化存储,存储作业状态、调度信息以及...

    最新版本的Struts2+Spring4+Hibernate4三大框架整合(改进:增加整合Quartz和Gson)

    1、 同时使用了Struts2、Spring4、Hibernate4、Quartz、JUnit4、Log4j、SLF4J、Ehcache、Gson等库或框架,搭建一个最基本的项目原型。 2、 Spring配置提供了多种可选整合方案:详见applicationContext.xml的配置 (1...

    定时框架spring+quartz

    在ssh2_quartz这个文件中,可能包含了一个示例项目,演示了如何在SSH(Struts2、Spring、Hibernate)架构下整合Quartz进行定时任务的实现。开发者可以通过分析这个项目,学习如何配置和使用Spring+Quartz,掌握在...

    Spring整合任务调度框架Quartz

    Quartz 包括了所有被支持的数据库平台的 SQL 脚本,这些脚本可以在 `&lt;quartz_home&gt;/docs/dbTables` 目录下找到。 其次,需要配置 JobStoreTX,告诉 Quartz 运行环境使用一个别的 JobStore 而不是默认的 RAMJobStore...

    spring+springMVC+mybatis+quartz动态定时任务创建

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+mybatis+quartz动态定时任务创建"就是一个常见的技术栈,用于实现这样的目标。这个组合充分利用了各组件的优势,提供了强大的后端服务支持...

    spring+quartz demo

    Spring 提供了与 Quartz 集成的模块,使得在 Spring 应用程序中使用 Quartz 更加便捷,包括 Job 实例的管理、触发器的配置以及对 Quartz Scheduler 的控制。 在这个 "spring+quartz demo" 中,我们可以学习到如何将...

    Spring 框架自带定时任务和Quartz定时任务

    在这两种方式中,Spring框架提供了自己的定时任务工具Spring Task,以及与专业定时任务框架Quartz集成的能力。 首先,对于Java自带的定时任务实现,我们可以使用java.util.Timer和java.util.TimerTask类。Timer类...

    SpringQuartz的使用文档

    SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

    spring和quartz的定时器的启动和停止例子

    本篇将深入探讨如何在Spring中启动和停止Quartz定时器。 首先,我们需要理解Spring和Quartz的基本概念。Spring是一个强大的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。而...

    利用spring的ApplicationContext在程序中唤醒quartz的job

    在Spring中,我们通常会通过`@Service`注解标记此类,并使用`@Autowired`注解注入所需的其他服务或DAO。服务类可能会有一个方法来启动或唤醒Quartz Job,这个方法可能会调用Quartz的`Scheduler`接口的相关方法。 接...

    关于spring中quartz的配置

    在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中...通过以上步骤,你就可以在Spring中成功配置并使用Quartz进行任务调度了。注意,实际应用中还需要根据具体需求调整配置和Job的实现。

    Spring框架 jar包

    下载并引入这些jar包,开发者可以快速地在项目中引入Spring框架,从而享受到它带来的便利和高效。在使用过程中,可以根据实际需求选择引入的组件,避免不必要的依赖,保持项目的简洁性。同时,Spring框架的文档和...

    spring quartz 表达式在线生成器

    Spring框架通过Spring JobSupport类集成了Quartz,使得在Spring应用中配置和管理定时任务变得更加便捷。 Spring Quartz的表达式通常基于Cron表达式,这是一种特殊的时间格式,用于定义任务的执行周期。例如,“0 0 ...

    spring java 定时器 执行两次 quartz

    在Spring应用中添加Quartz支持,你需要在`pom.xml`或`build.gradle`文件中引入Quartz的依赖,比如`quartz-all.jar`。接着,在Spring的配置文件(如`applicationContext.xml`)中,定义一个`SchedulerFactoryBean`来...

    spring的quartz使用实例

    Quartz可以在Java应用中作为独立的服务运行,也可以与Spring框架无缝集成。 2. **Spring整合Quartz的优势** - 简化配置:Spring通过`org.springframework.scheduling.quartz`包提供了对Quartz的封装,使得配置和...

    spring整合quartz定时任务调度

    在Spring中,Quartz可以通过以下步骤进行集成: 1. **引入依赖**:在项目的构建文件(如Maven或Gradle)中添加Quartz和Spring相关的依赖。对于Maven,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;org....

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

Global site tag (gtag.js) - Google Analytics