动态指定定时时间

本文介绍如何在Spring框架中使用Quartz实现定时任务的动态配置。通过自定义类继承CronTriggerBean,并结合JobManager从数据库获取cron表达式,实现了触发器配置的灵活调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

思路:
传统的xml配置:

触发器配置部分:

  

< bean  id ="companyCronSJGSR3F2"  class ="org.springframework.scheduling.quartz.CronTriggerBean"   >
        
< property  name ="jobDetail" >
            
< ref  bean ="companyReportSJGSR3F2" />
        
</ property >
        
< property  name ="cronExpression" >
            
< value > 0 35 08 ? * * </ value >
        
</ property >
</ bean >

 


如果能动态的给 cronExpression 赋值,就能实现我们的要求。

自定义一个类,继承了 CronTriggerBean

MyCronTrigger.java

 

public   class  MyCronTrigger  extends  CronTriggerBean
{
    
public  JobManager jobManager;

    
public  JobManager getJobManager()
    {
        
return  jobManager;
    }

    
public   void  setJobManager(JobManager jobManager)
    {
        
this .jobManager  =  jobManager;
        String cronExpression 
=  getCroExpression();
        
try
        {
            setCronExpression(cronExpression);  
// 关键,获得cronExpression,然后set回去
        }
        
catch  (ParseException e)
        {
            e.printStackTrace();
        }
    }

    
private  String getCroExpression()
    {
        
return  jobManager.getExpression();
    }
}

 

JobManager.java

 

public   class  JobManager
{
    
// 关键点,此类可以通过获得数据库连接,
    
// 可以从数据库中取指定的expression
     public  String getExpression()
    {    
        String s
= " 0 52 19 ? * * " ;
        
return  s;
    }
}

 

croExpression.xml

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "/web_data/dtd/spring-beans-2.0.dtd" >
< beans >
    
< bean  id ="jobManager"  class ="com.dbjob.cro.JobManager" ></ bean >
    
    
< bean  id ="JobTask"  class ="com.dbjob.cro.JobTask" ></ bean >
    
    
<!-- 也可以用 继承了QuartzJobBean 的任务  -->
    
< bean  id ="schedulerJobDetail"
        class
="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
        
< property  name ="targetObject"  ref ="JobTask"   />
        
< property  name ="targetMethod"  value ="dojob"   />
        
< property  name ="concurrent"  value ="false"   />
    
</ bean >

    
< bean  id ="cronTrigger"  class ="com.dbjob.cro.MyCronTrigger" >
        
< property  name ="jobDetail"  ref ="schedulerJobDetail"   />
        
< property  name ="jobManager"  ref ="jobManager"   />
    
</ bean >

    
< bean  id ="schedulerFactory"
        class
="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
        
< property  name ="triggers" >
            
< list >
                
< ref  local ="cronTrigger"   />
            
</ list >
        
</ property >
    
</ bean >
</ beans >

 

运行:主函数加载 spring 配置文件即可:

public   static   void  main(String[] args)
{
    ApplicationContext cxt
= new  FileSystemXmlApplicationContext( " config/croExpression.xml " );
}

 

在web中应用 只要在web.xml中加载配置文件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值