Spring+Quartz 实现任务动态管理监控

Spring+Quartz实现任务动态管理监控


环境:Quartz2.2.3+Spring4.0

  • 配置文件很简单,只需要一个配置就可以了,注入一个FactoryBean.
    <!-- 任务工厂,注入需注入scheduler -->    
    <bean id="schedulerFactoryBean"class="org.springframework.scheduling.quartz.SchedulerFactoryBean" />
     <!-- 注册SpringContextUtil用于获取ApplicationContext -->
    <bean id="springContextUtil" class="com.hmj.service.quartz.SpringContextUtil"></bean>
  • Job的实体类(省略GETTER)
private Integer id;
    /**
     * 任务名称
     */
    private String job_name;
    /**
     * 任务内容
     */
    private String job_content;
    /**
     *  表达式
     */
    private String cron_expression;
    /**
     *  是否并发
     */
    private String concurrent;
    /**
     * 任务分组
     */
    private String job_group;
    /**
     * 调用类
     */
    private String target_object;
    /**
     * 调用类的方法
     */
    private String target_method;
    /**
     * 子任务
     */
    private String childJobs;
    /**
     *  任务状态
     */
    private Byte job_status;
    /**
     * 任务运行状态
     */
    private Byte running_status;
    /**
     * 任务开始时间
     */
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date start_time;
    /**
     * 任务结束时间
     */
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date end_time;
  • 无实现Job的加上这个注解即可,可以动态添加Job,不用写死!
@DisallowConcurrentExecution//无实现
  • 重点的Quartz管理的Service,作为Spring的Service,这里也可以设置并发,默认是不并发,如果需要并发,就加一个字段,然后添加的时候设置并发为true就行了。
@Service
public class QuartzServiceImpl implements QuartzService {
    //这里注入Scheduler,不能注入schedulerFactoryBean
    @Resource  
    private Scheduler scheduler ;  

    @Override
    public Scheduler getScheduler() {  
        return scheduler;  
    }

    @Resource
    private WyFeeJobDao wyFeeJobDao;

    /**
     * 开启所有任务
     */
    @Override
    public void startJobs() {
        try {
            scheduler.start();
        } catch (SchedulerException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public boolean addJob(WyFeeJobPO job) throws Exception {
        boolean flag = false;
        CronTrigger cronTrigger = checkTrigger(job);
        // 不存在该任务的触发器
        if (cronTrigger == null) {
            // 新建一个基于Spring的管理JobMethodInvokingJobDetailFactoryBean methodInvJobDetailFB = new MethodInvokingJobDetailFactoryBean();
            methodInvJobDetailFB.setName(job.getJob_name());
            methodInvJobDetailFB.setGroup(job.getJob_group());
            //设置任务类(这里的任务类是交给Spring管理的Bean,如果不是Spring的Bean,需要类的全路径)
            methodInvJobDetailFB.setTargetObject( SpringContextUtil.getApplicationContext().getBean(job.getTarget_object()));
            //设置任务方法
            methodInvJobDetailFB.setTargetMethod(job.getTarget_method());
            // 将管理Job类提交到计划管理类
            methodInvJobDetailFB.afterPropertiesSet();

            JobDetail jobDetail = methodInvJobDetailFB.getObject();
            jobDetail.getJobDataMap().put(job.getJob_name(), job);

            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值