• spring quartz 任务注入spring service


    SchedulerFactoryBean+AdaptableJobFactory+QuartzJobBean

    package schedule.quartz5;
    
    import org.quartz.Scheduler;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.quartz.SchedulerFactoryBean;
    
    //Spring与Quartz集成使用的是SchedulerFactoryBean这个类
    
    @Configuration
    public class QuartzConfig {
    //	@Autowired
    //	private TaskSchedulerFactory taskSchedulerFactory;
    
    //	@Bean
    //	public SchedulerFactoryBean schedulerFactoryBean() {
    //		SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    //		schedulerFactoryBean.setJobFactory(taskSchedulerFactory);
    //		return schedulerFactoryBean;
    //	}
    
    	// 注入scheduler到spring,在quartzManege会用到
    	@Bean(name = "scheduler")
    	public Scheduler scheduler(TaskSchedulerFactory quartzJobFactory) throws Exception {
    
    		SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
    		factoryBean.setJobFactory(quartzJobFactory);
    		factoryBean.afterPropertiesSet();
    		Scheduler scheduler = factoryBean.getScheduler();
    		scheduler.start();
    		return scheduler;
    	}
    }
    package schedule.quartz5;
    
    import org.quartz.spi.TriggerFiredBundle;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
    import org.springframework.scheduling.quartz.AdaptableJobFactory;
    import org.springframework.stereotype.Component;
    
    @Component("taskSchedulerFactory")
    public class TaskSchedulerFactory extends AdaptableJobFactory {
    
        @Autowired
        private AutowireCapableBeanFactory capableBeanFactory;
     
        protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception
        {
            // 首先,调用父类的方法创建好Quartz所需的Job实例
            Object jobInstance = super.createJobInstance(bundle);
            // 然后,使用BeanFactory为创建好的Job实例进行属性自动装配并将其纳入到Spring容器的管理之中,属于Spring的技术范畴.
            capableBeanFactory.autowireBean(jobInstance);
            return jobInstance;
        }
    }
    
    package schedule.quartz5;
    
    import javax.annotation.Resource;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.impl.triggers.CronTriggerImpl;
    import org.quartz.impl.triggers.SimpleTriggerImpl;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ProcessJob extends QuartzJobBean {
    	@Resource
    	private SayService sayService;
    
    	private Logger logger = LoggerFactory.getLogger(ProcessJob.class);
    
    	@Override
    	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
    		try {
    			sayService.sayHello();
    			
    			if(context.getTrigger() instanceof CronTriggerImpl){
    				CronTriggerImpl xxx = ((CronTriggerImpl)context.getTrigger());
    				
    				logger.info("动态定时调度测试 job group:"+xxx.getJobGroup()+", job name:"+xxx.getJobName() +", trigger group:"+xxx.getGroup()+", trigger name:"+xxx.getName()+",  cronExpression "+xxx.getCronExpression());
    			}else if(context.getTrigger() instanceof SimpleTriggerImpl){
    				SimpleTriggerImpl xxx = ((SimpleTriggerImpl)context.getTrigger());
    				
    				logger.info("动态定时调度测试 job group:"+xxx.getJobGroup()+", job name:"+xxx.getJobName() +", trigger group:"+xxx.getGroup()+", trigger name:"+xxx.getName()+",  cronExpression "+xxx);
    			}
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

     

    
     

    java.lang.NoSuchMethodError

    org.springframework.util.ReflectionUtils.accessibleConstructor(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/reflect/Constructor;

    一般是引入了两个重复的spring Jar包,如既引入了spring.framework 又引入了spring.core,去掉一个就好

    用tree方式查看

  • 相关阅读:
    面试(5)
    面试(五)
    面试(4)
    面试(四)
    面试(三)
    面试(2,3)
    利用session控制 长时间未操作自动退出登录
    一次性清除所有session
    动态引进js文件
    Vue--findIndex方法的使用原理
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710120.html
Copyright © 2020-2023  润新知