• Spring整合quart初识


    Spring集成quart有两种方式,一种是实现Job接口,一种是继承QuartzJobBean

    刚开始报错:持久化时未序列化异常

        <bean id="simpleJobDetail"  
            class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
            <property name="targetObject">  
                <ref bean="aaa" />  
            </property>  
            <property name="targetMethod">  
                <value>doSth</value>  
            </property>  
        </bean> 

    java.io.NotSerializableException: Unable to serialize JobDataMap for insertion into database because the value of property 'methodInvoker' is not serializable: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

    原因请看org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

    NOTE: JobDetails created via this FactoryBean are not serializable and thus not suitable for persistent job stores. You need to implement your own Quartz Job as a thin wrapper for each case where you want a persistent job to delegate to a specific service method.
    
    Compatible with Quartz 1.5+ as well as Quartz 2.0-2.2, as of Spring 3.2.

    废话不多说直接上主要代码

    application.xml

      <bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
            <property name="jobClass" value="com.cntaiping.tpp.tppeservice.job.PrintCurrentTimeJobs" />
            <property name="name" value="executeInternal" />
            <property name="durability" value="true"></property>
        </bean>
        <bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" >
                <ref bean="simpleJobDetail"></ref>
            </property>
            <property name="cronExpression" >
                <value>0 */1 * * * ?</value>
            </property>
        </bean>
        <!-- 启动触发器的配置开始 -->
         <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
             <property name="configLocation" value="classpath:quartz.properties"/>
             <property name="dataSource" ref="dataSource"/>
             <property name="transactionManager" ref="transactionManager"/>
             <property name="schedulerName" value="baseScheduler"/>
             <!-- 每台集群机器部署应用的时候会更新触发器-->
             <property name="overwriteExistingJobs" value="false"/>
             <property name="applicationContextSchedulerContextKey" value="appli"/>
             <property name="jobFactory">
                 <bean class="com.cntaiping.tpp.tppeservice.auth.AutowiringSpringBeanJobFactory"/>
             </property>
             <property name="triggers">
                 <list>
                     <ref bean="jobTrigger"/>
                 </list>
             </property>
             <property name="autoStartup" value="true"/>
    
          </bean>
    PrintCurrentTimeJobs.java(继承QuartzJobBean)
    public class PrintCurrentTimeJobs extends QuartzJobBean{
        Logger log = Logger.getLogger(JobService.class);
        @Autowired
        private UserJob userJob;
    
         @Override
        protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException
        {
            log.info("测试定时任务开始"+new Date());
            System.err.println(new Date());
            userJob.createTmsUser();
            log.info("测试定时任务结束"+new Date());
        }
    }

    QuartJobFactory.java(实现Job接口)

    public class QuartJobFactory implements Job {
        private Logger log = Logger.getLogger(QuartJobFactory.class);
        ScheduleJob scheduleJob ;
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
              scheduleJob = (ScheduleJob) context.getMergedJobDataMap().get("scheduleJob");
              StringBuffer sbf = new StringBuffer();
              System.err.print(new Date());
        }
    
    }

    quartz.properties

    #============================================================================
    # Configure Main Scheduler Properties  
    #============================================================================
    org.quartz.scheduler.instanceId: AUTO
    org.quartz.scheduler.skipUpdateCheck: true
    
    #============================================================================
    # Configure ThreadPool  
    #============================================================================
    
    org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount: 10
    org.quartz.threadPool.threadPriority: 5
    org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
    
    #============================================================================
    # Configure JobStore  
    #============================================================================
    org.quartz.jobStore.misfireThreshold: 1000
    org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreCMT
    org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
    org.quartz.jobStore.useProperties: false
    org.quartz.jobStore.tablePrefix: QRTZ_
    
    org.quartz.jobStore.isClustered=true
    org.quartz.jobStore.clusterCheckinInterval=60000
    #============================================================================
    # Configure Plugins 
    #============================================================================
    org.quartz.plugin.shutdownHook.class: org.quartz.plugins.management.ShutdownHookPlugin
    org.quartz.plugin.shutdownHook.cleanShutdown: true
    
    org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin

      

  • 相关阅读:
    NAS与SAN RAID
    使用slice和concat对数组的深拷贝和浅拷贝
    使用JSON.parse(),JSON.stringify()实现对对象的深拷贝
    ng2父子模块通信@ViewChild和@Inject
    js避免命名冲突
    JSON.parse()和JSON.stringify()
    object类型转换为Array类型
    Angular 2 ViewChild & ViewChildren
    ElementRef, @ViewChild & Renderer
    ng2父子模块数据交互
  • 原文地址:https://www.cnblogs.com/duanxianyouyang/p/7366511.html
Copyright © 2020-2023  润新知