Spring 中定时任务的配置

摘要

在使用Spring框架的时候,想在程序的后台自动开启一个线程去操作数据库,最开始使用了监听器,在程序一启动的时候就去开启一个线程,在线程中去操作数据库,最后发现,操作数据库的类似通过Spring注解进

   在在使用Spring框架的时候,想在程序的后台自动开启一个线程去操作数据库,最开始使用了监听器,在程序一启动的时候就去开启一个线程,在线程中去操作数据库,最后发现,操作数据库的类似通过Spring注解进去的,该类的对象始终是NULL,分析发现该线程没有通过Spring就启动了,对应的类没有实例化。由于时间紧,最终放弃了多线程,而采用了Spring和quartz去实现定时任务。具体的配置入下。

   找到Spring的配置文件applicationContext.xml,在该文件中加入下面的代码:

<bean id="executor"
        class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="10" />
        <property name="maxPoolSize" value="100" />
        <property name="queueCapacity" value="500" />
</bean>
<bean id="bizObject" class="cn.ccb.yn.acms.common.util.ShortMsgUtil" />
<bean id="jobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="bizObject" />
        <property name="targetMethod" value="getSms" />
 </bean>
 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetail" />
        <property name="cronExpression" value="10 0/1 * * * ?" />
 </bean>
 <bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="jobDetail" />
        <property name="startDelay" value="10000" />
        <property name="repeatInterval" value="30000" />
 </bean>
    <!-- 设置调度 -->
 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
            </list>
        </property>
        <property name="taskExecutor" ref="executor" />
 </bean>


对上面文件中的几个bean给出说明:

executor是Spring线程池对象,其中可以配置线程池的大小等参数

bizObject是后台处理逻辑的java类

jobDetail是配置java类和对应方法的的bean

taskTrigger配置定时任务执行的时间

需要使用到下面的jar包:

quartz-1.8.5.jar;slf4j-api-1.7.5.jar;slf4j-log4j12-1.7.5-sources.jar;

后2个包去slf4j官网上下载slf4j-1.7.5.zip包,解压后,就会有上面的后2个包,这2个包的版本必须一致,否则tomcat无法启动。

IT家园
IT家园

网友最新评论 (0)