`

quartz 中 使用 applicationContext.xml中的bean 得到 hiberante的Session

阅读更多
applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jee="http://www.springframework.org/schema/jee" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
					http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
					http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
					http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-lazy-init="true">

	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    	<property name="location">
    		<value>classpath:jdbc.properties</value>
		</property>
	</bean>	
	<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">		
		<property name="driver" value="${db.driver}"/>
		<property name="driverUrl" value="${db.url}"/>
		<property name="user" value="${db.user}"/>
		<property name="password" value="${db.password}"/>
    	<property name="alias" value="${db.alias}"/>
    	<property name="houseKeepingTestSql" value="${db.houseKeepingTestSql}"/>
    	<property name="maximumConnectionCount" value="${db.maximumConnectionCount}"/>
    	<property name="minimumConnectionCount" value="${db.minimumConnectionCount}"/>
	</bean>

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">   
        <!-- 引用数据源 -->
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>                 
        <property name="annotatedClasses">   
            <list>   
            	<value>com.cal.entity.Bonetest</value>
            	<value>com.cal.entity.Calciumcal</value>
            	<value>com.cal.entity.Child</value>
                <value>com.cal.entity.City</value>
                <value>com.cal.entity.District</value>
                <value>com.cal.entity.Province</value>
                <value>com.cal.entity.Staturetest</value>
                <value>com.cal.entity.Userinfo</value>
                <value>com.cal.entity.Event21</value>
            </list>   
        </property> 
        <property name="hibernateProperties">   
            <props>   
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>   
                <prop key="connection.useUnicode">true</prop>
                <prop key="connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.show_sql">false</prop>   
                <prop key="hibernate.format_sql">false</prop>            
                <prop key="hibernate.jdbc.fetch_size">20</prop> 
                <prop key="hibernate.query.substitutions">true 1, false 0</prop> 
                <prop key="hibernate.jdbc.batch_size">20</prop>  
                <prop key="hibernate.cache.use_structured_entries">true</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop> 
                <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                <prop key="hibernate.cache.provider_configuration_file_resource_path"></prop>                                    
            </props>   
         </property>               
    </bean>   
	
	<!-- 事务配置 -->
	<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
	<context:annotation-config/> 
	<context:component-scan base-package="com.cal" />
	
	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="txManager" />
	
	<!-- 这里是spring 和  quartz 整合  start  -->
<bean id="quartzJob" class="com.cal.quartz.Edm" >
        <!-- 测试引用 -->
        <property name="aaa">
            <value>111</value>
        </property> 
    </bean> 
    
    <!-- 这里需要 spring-context-support.jar 不然抛找不到这个类异常 -->
    <bean id="jobtask"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="quartzJob" />
        </property>
        <property name="targetMethod">
            <value>edmSendEmail</value>
        </property>
    </bean>
    <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="jobtask" />
        </property>
        <property name="cronExpression">
            <value>00 53 11 * * ? *</value>
        </property>
    </bean>
<!-- lazy-init="false" 容器启动就绑定?是这说法? -->
    <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
        <property name="triggers"> 
            <list> 
                <ref bean="doTime"/> 
            </list> 
        </property> 
    </bean> 

<!-- 这里是spring 和  quartz 整合  end  -->
	</beans>




AppContext 类:
存放servletContext 和 applicationContext  的类,然后在servlet中把两个context传入它的静态属性中,注意: servlet 必须 容器启动时就启动

package com.cal.utils;

import javax.servlet.ServletContext;

import org.springframework.context.ApplicationContext;


public class AppContext {
	private final static AppContext instance = new AppContext();
	private ServletContext sc;
	private ApplicationContext ac;

	private AppContext() {
	}

	public static AppContext getInstance() {
		return instance;
	}


	public synchronized void setServletContext(ServletContext sc) {
		this.sc = sc;
	}

	public ServletContext getServletContext() {
		return sc;
	}
	
	public synchronized void setApplicationContext(ApplicationContext ac) {
		this.ac = ac;
	}

	public ApplicationContext getApplicationContext() {
		return ac;
	}
	
}



AppContextServlet 类:
把两个上下文都存入AppContext类中

package com.cal.servlet;


import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.cal.utils.AppContext;

public class AppContextServlet extends HttpServlet {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = -9105924604178324202L;

	/**
	 * Constructor of the object.
	 */
	public AppContextServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); 
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init(ServletConfig config) throws ServletException {
		ServletContext servletContext = config.getServletContext();
		AppContext.getInstance().setServletContext(servletContext);
		
		WebApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);  
		AppContext.getInstance().setApplicationContext(appContext); 
	}

}


在容器启动时,把webservice的soap存入 servletContext中

/**
 * WebContainerListener.java
 * 
 * Created Date:	2010-7-12		
 * Last Update:		2010-7-12	    
 * 
 * Copyright (c) Wunderman. All Rights Reserved.
 */
package com.cal.interceptor;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.cal.common.Constants;
import com.cal.webservice.SendEmail;
import com.cal.webservice.SendEmailSoap;

/**
 * @version 1.00
 * 
 * <b>修改历史:</b><br>
 * @history 		2010/07/12: 初版 		
 * @author			mahongmin      				
 * @peer review									
 * 
 *
 */
public class WebContainerListener implements ServletContextListener{

	/**
	 * 容器生命周期结束
	 */
	public void contextDestroyed(ServletContextEvent sce) {
		
	}

	/**
	 * 容器初始化
	 */
	public void contextInitialized(ServletContextEvent sce) {
		createLogFile(sce);
		createWSSendMail(sce);
	}
	
	private void createWSSendMail(ServletContextEvent sce){
		SendEmail service = new SendEmail();
		SendEmailSoap soap = service.getSendEmailSoap();
		sce.getServletContext().setAttribute(Constants.WSSOAP, soap);
	}
	
	/**
         *此方法用来在部署项目中创建日志文件
	 * 如果没有日志文件,则创建
	 * @param sce
	 */
	private void createLogFile(ServletContextEvent sce){
		String root = sce.getServletContext().getRealPath("");
		String separator = File.separator ;
		//全部日志
        String logName = "log.log" ;
        //仅错误日志
        String logEName = "error.log" ;
        String directoryLog  = root + separator + "logs";
        String directoryELog  = root + separator  + "logs";
        File fLog = new File(directoryLog , logName) ;
        File fELog = new File(directoryELog , logEName) ;
        if(!fLog.exists()) {
        	fLog.getParentFile().mkdirs() ;
            try {
				fLog.createNewFile() ;
			} catch (IOException e) {
				e.printStackTrace();
			}
        }
        if(!fELog.exists()) {
        	fELog.getParentFile().mkdirs() ;
            try {
            	fELog.createNewFile() ;
			} catch (IOException e) {
				e.printStackTrace();
			}
        }
        System.setProperty("WORKDIR", root);
	}
}


在web.xml中加入以下代码,使AppContextServlet在容器启动时就启动
 <servlet>
    <servlet-name>AppContextServlet</servlet-name>
    <servlet-class>com.cal.servlet.AppContextServlet</servlet-class>
    <init-param>    
         <param-name>shutdown-on-unload</param-name>    
         <param-value>true</param-value>    
    </init-param>    
    <load-on-startup>1</load-on-startup> 
  </servlet>


在普通类中使用 servletContext和 applicationContext
这样就可以使用hibernate 中的session了
ApplicationContext context = AppContext.getInstance().getApplicationContext();
			SessionFactory sessionFactory = (SessionFactory)context.getBean("sessionFactory");
			DataSource dataSource = (DataSource)context.getBean("dataSource");
			Connection con = dataSource.getConnection();
			Session session = sessionFactory.openSession(con);
			Query query = session.createQuery(" SELECT c FROM Event21 c WHERE c.flag = 1 ");
分享到:
评论

相关推荐

    spring3.0 + Quartz1.52 + applicationContext.xml

    3. **定义Job和Trigger**:接下来,定义你需要执行的Job类,并在XML中声明它们。Job是实际执行的任务,而Trigger定义了Job的执行时间。例如: ```xml &lt;bean id="myJob" class="com.example.MyJobClass" /&gt; &lt;bean ...

    applicationContext.zip

    总的来说,`applicationContext.zip`中的`applicationContext.xml`文件是实现Quartz与Spring集成的关键,通过配置这个文件,我们可以有效地管理和调度应用中的定时任务,从而提高应用的自动化水平和效率。

    spring3.0.5_quartz1.8.4_applicationContext

    spring定时任务quartz配置,applicationContext.xml

    关于spring中quartz的配置

    在Spring配置文件(如`applicationContext.xml`)中,定义`SchedulerFactoryBean`来实例化和配置Quartz Scheduler: ```xml &lt;bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz....

    quartz2.6.2+Common.Logging.Core+Common.Logging.rar

    总的来说,这个压缩包提供了在.NET 4.0环境中使用Quartz.NET进行任务调度所需的所有组件,同时利用Common.Logging实现灵活的日志记录。这使得开发者能够轻松地创建、管理和监控定时任务,同时也方便了问题排查和系统...

    Quartz的使用说明.doc

    在 Web 应用中使用 Quartz,通常需要在 `web.xml` 文件中配置 `QuartzInitializerServlet`,并提供配置文件(如 `quartz.properties` 或 `quartz-job.xml`)来定义 Triggers 和 JobDetails。 通过以上描述,我们...

    quartzJob和xml的配置情况

    总结来说,Quartz Job的配置涉及到创建Job类、编写XML配置文件以及在代码中启动Scheduler。通过这种方式,你可以灵活地管理你的定时任务,并根据业务需求调整执行时间。对于旧版本的Quartz(如1.8.0),虽然可能缺少...

    java中spring与Quartz 整合定时任务.pdf

    首先,从给出的`applicationContext.xml`配置文件片段来看,Spring使用了`ScheduledTimerTask`和`TimerFactoryBean`来实现定时任务。`ScheduledTimerTask`是一个可调度的任务,它定义了延迟启动时间和执行间隔。在这...

    Quartz.Net 3.X 版本DEMO

    网上找了很久都没有关系Quartz.Net 3.X版本的能过quartz_jobs.xml配置实现调度工作的案例. 把这个小demo分享给大家,.net core2.2环境下的Quartz.Net 3.0.7.0最新版本.

    Quartz Job Scheduling Framework.chm

    Quartz Job Scheduling Framework.chm

    对于Quartz.net 3.0.7.0(目前最高版本)的使用:能过配置文件实现工作调整

    在描述中提到的问题是关于如何在3.x版本中通过`quartz_jobs.xml`配置文件实现作业调度,这在许多教程中可能较少被提及,因为早期版本的Quartz.NET更倾向于使用XML配置,而新版本则倾向于使用代码配置或者混合方式。...

    Autofac.Extras.Quartz, Quartz.Net的Autofac集成.zip

    Autofac.Extras.Quartz, Quartz.Net的Autofac集成 Autofac.Extras.Quartz用于 Quartz.Net的Autofac集成包。Autofac.Extras.Quartz 为每个石英作业创建嵌套的litefime作用域。 完成作业执行后释放嵌套作用域。这允许...

    org.xml.sax.SAXException: Invalid element

    NULL 博文链接:https://wilian.iteye.com/blog/1992365

    quartz-scheduler分享.docx

    在使用Quartz-Scheduler时,首先需要在项目的`pom.xml`文件中添加对应的依赖。以下是一个示例的依赖配置: ```xml &lt;groupId&gt;org.quartz-scheduler &lt;artifactId&gt;quartz &lt;version&gt;2.2.1 ``` 这个依赖确保了...

    Quartz中文帮助文档.chm

    有了它,quartz不再抽象。 资源来自于互联网,Chuck Cavaness 著 Unmi(隔叶黄莺) 译 。 主要内容: 1.quartz起步和简单示例 2.Job部署、存储和持久化 3.Cron触发器及相关内容 ...7.工作流中使用Quartz 8.附录:配置参考

    quartz调度系统工具.zip

    - 库文件:包含Quartz库的jar文件,方便引入到项目中使用。 - 文档:关于Quartz的使用指南、API文档或最佳实践说明。 通过这些工具,开发者可以更轻松地利用Quartz实现定时任务,提高系统的自动化程度。同时,理解...

    quartz-2.1.5.tar.gz

    - **库文件**:如`quartz.jar`,这是Quartz的核心库,可以直接引入到项目中使用。 - **构建脚本**:如`build.xml`(Ant)或`pom.xml`(Maven),用于构建和打包Quartz项目。 - **测试用例**:在`test`目录下,可以...

    quartz定时执行任务,并配置web.xml的操作方法

    本文将介绍如何使用 Quartz 实现定时执行任务,并配置 web.xml 文件。 Quartz 定时执行任务 Quartz 定时执行任务可以通过使用 CronTrigger 实现,以便于在特定的时间点执行任务。CronTrigger 使用 Cron 表达式来...

    quartz实例 自动生成 表达式 动态更新 xml文件 tomcat自动加载

    这个实例主要探讨如何使用Quartz实现自动化的任务调度,包括自动生成表达式、动态更新XML配置文件以及在Tomcat服务器上实现自动加载。 首先,Quartz的核心在于Job和Trigger。Job是实际执行的任务,而Trigger则定义...

Global site tag (gtag.js) - Google Analytics