`
齐晓威_518
  • 浏览: 618989 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Spring Quartz动态配置时间-重要的

 
阅读更多
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。

这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,
但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,
发现<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >

         <property name="jobDetail" ref="schedulerJobDetail"/>

         <property name="cronExpression">

             <value>0/10 * * * * ?</value>

         </property>

      中cronExpression是关键,如果可以动态设置cronExpression的值,
      也就说如果我们可以直接调用CronTriggerBean中设置cronExpression的方法,就可以顺利解决问题了。

熟悉1的朋友可以跳过不看,下面2、3是动态定时任务的具体实现。



1.  Quartz 在Spring中的简单配置

Spring 配置文件:

    <bean id="schedulerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

        <property name="targetObject" ref="scheduleInfoAction"/>

        <property name="targetMethod" value="simpleJobTest"/>

        <property name="concurrent" value="false"/>

    </bean>

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >

         <property name="jobDetail" ref="schedulerJobDetail"/>

         <property name="cronExpression">

             <value>0/10 * * * * ?</value>

         </property>

     </bean>

    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">

            <list>

                <ref local="cronTrigger"/>

            </list>

        </property>

</bean>



在上面的配置中设定了

① targetMethod: 指定需要定时执行scheduleInfoAction中的simpleJobTest()方法

② concurrent:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。
指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。

③ cronExpression:0/10 * * * * ?表示每10秒执行一次,具体可参考附表。

④ triggers:通过再添加其他的ref元素可在list中放置多个触发器。



scheduleInfoAction 中的simpleJobTest()方法

注意:此方法没有参数,如果scheduleInfoAction有两个方法simpleJobTest()和simpleJobTest(String argument),
则spring只会去执行无参的simpleJobTest().

public void simpleJobTest() {

        log.warn("uh oh, Job is scheduled !'" + "' Success...");

    }



2 .Quartz在Spring中动态设置cronTrigger方法一

Spring 配置文件:

<bean id="scheduleInfoAction" class="com.lively.happyoa.jobs.webapp.action.ScheduleInfoAction">

        <property name="scheduler" ref="schedulerFactory"/>

        <property name="scheduleInfoManager" ref="scheduleInfoManager"/>

    </bean>

    <bean id="schedulerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

        <property name="targetObject" ref="scheduleInfoAction"/>

        <property name="targetMethod" value="reScheduleJob"/>

        <property name="concurrent" value="false"/>

    </bean>

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >

         <property name="jobDetail" ref="schedulerJobDetail"/>

         <property name="cronExpression">

             <value>0/10 * * * * ?</value>

         </property>

     </bean>

    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">

            <list>

                <ref local="cronTrigger"/>

            </list>

        </property>

</bean>



scheduleInfoAction 中的reScheduleJob ()方法及相关方法

① reScheduleJob():读取数据库,获得自定义定时器调度时间

    private void reScheduleJob() throws SchedulerException, ParseException {

        // 运行时可通过动态注入的scheduler得到trigger

        CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(

                 "cronTrigger", Scheduler.DEFAULT_GROUP);

        String dbCronExpression = getCronExpressionFromDB();

        String originConExpression = trigger.getCronExpression();

    // 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等

    // 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob

        if(!originConExpression.equalsIgnoreCase(dbCronExpression)){

            trigger.setCronExpression(dbCronExpression);

            scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger);

        }

    // 下面是具体的job内容,可自行设置

    // executeJobDetail();

}



② getCronExpressionFromDB():从数据库中获得dbCronExpression的具体代码,由于使用了scheduleInfoManager,所以要在定义相应的setter方法

    private String getCronExpressionFromDB(){

        String sql="from ScheduleInfo scheduleInfo where 1=1 ";

        sql=sql+" and scheduleInfo.infoId = '"+"1" + "'";

        List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql);

        ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0);

        String dbCronExpression = scheduleInfo.getCronExpression();

        return dbCronExpression;

}



③ 在spring配置文件的scheduleInfoAction配置了相应的property(scheduler/scheduleInfoManager),要为其设置setter方法

    private Scheduler scheduler;

    // 设值注入,通过setter方法传入被调用者的实例scheduler

    public void setScheduler(Scheduler scheduler) {

        this.scheduler = scheduler;

     }

    private ScheduleInfoManager scheduleInfoManager;

    // 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager

    public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){

        this.scheduleInfoManager = scheduleInfoManager;

    }



3.  Quartz 在Spring中动态设置cronTrigger方法二

在上面的2中我们可以看到,尽管 已经可以动态进行 rescheduleJob 了,不过依然需要我们设置一个 cronExpression ,
如果尝试一下拿掉spring配置中的

        <property name="cronExpression">

             <value>0/10 * * * * ?</value>

         </property>

则容器(如tomcat)启动时会报错。

实际中我们希望tomcat启动时就可以直接去读数据库,拿到相应的 dbCronExpression ,然后定时执行一个job,
而不希望配置初始的 cronExpression ,观察下面的 CronTriggerBean ,考虑到cronExpression需要初始化,
如果设定一个类InitializingCronTrigger继承CronTriggerBean,然后在这个类中做一些读取DB的初始化工作
(设置cronExpression),问题就可以解决了。



Spring 配置文件:

<bean id="scheduleInfoAction" class="com.lively.happyoa.jobs.webapp.action.ScheduleInfoAction">

        <property name="scheduler" ref="schedulerFactory"/>

        <property name="scheduleInfoManager" ref="scheduleInfoManager"/>

    </bean>

    <bean id="schedulerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

        <property name="targetObject" ref="scheduleInfoAction"/>

        <property name="targetMethod" value="reScheduleJob"/>

        <property name="concurrent" value="false"/>

    </bean>

     <bean id="cronTrigger" class="com.lively.happyoa.jobs.webapp.action.ScheduleInfoAction.InitializingCronTrigger">

         <property name="jobDetail" ref="schedulerJobDetail"/>

         <!--<property name="cronExpression">

             <value>0/10 * * * * ?</value>

         </property>-->

         <property name="scheduleInfoManager" ref="scheduleInfoManager"/>

     </bean>

    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">

            <list>

                <ref local="cronTrigger"/>

            </list>

        </property>

</bean>



InitializingCronTrigger 中的相关方法

注意:在注入scheduleInfoManager属性的时候,我们可以去读取DB任务时间(之所以放在setter方法中,
是因为需要在设置scheduleInfoManager后进行getCronExpressionFromDB(),否则,也可以①②逻辑把放在类的构造函数中).

注意InitializingCronTrigger必须extendsCronTriggerBean.



public class InitializingCronTrigger extendsCronTriggerBean implements Serializable {

    private ScheduleInfoManager scheduleInfoManager;

    // 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager

    public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){

        this.scheduleInfoManager = scheduleInfoManager;

        // 因为在getCronExpressionFromDB使用到了scheduleInfoManager,所以

        // 必须上一行代码设置scheduleInfoManager后进行getCronExpressionFromDB

        String cronExpression = getCronExpressionFromDB ();   // ①

        // 因为extendsCronTriggerBean ,此处调用父类方法初始化cronExpression

        setCronExpression (cronExpression);                    // ②

}

    private String getCronExpressionFromDB(){

        String sql="from ScheduleInfo scheduleInfo where 1=1 ";

        sql=sql+" and scheduleInfo.infoId = '"+"1" + "'";

        List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql);

        ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0);

        String dbCronExpression = scheduleInfo.getCronExpression();

        return dbCronExpression;

}

……

}





下面再讲一例:



在页面上设置时间;
将时间转换为Unix Cron Expression;
将转换后的时间规则表达式记录到数据库中(也可以写入xml文件中,这里是项目需要记录入数据库中);
从数据库中得到相应的时间规则表达式;
更新您的任务触发器的时间设置;
RESCHEDULE THE JOB。; - )
4. 具体实现细节:


1) 在页面上设置时间
根据具体的业务需求,设置时间规则,下面以某一项目为例,需要 按每月、每周、自定义分为三种规则。

1  < tr >
2            < th > 执行这个任务 </ th >
3            < td  style ="font-weight:bold;" >
4             < html:radio  property ="everyWhat"  styleClass ="InputBorderNone"  value ="monthly"  onclick ="changeStatus(this.value)" > 每月 </ html:radio >
5             < html:radio  property ="everyWhat"  styleClass ="InputBorderNone"  value ="weekly"  onclick ="changeStatus(this.value)" > 每周 </ html:radio >
6             < html:radio  property ="everyWhat"  styleClass ="InputBorderNone"  value ="userDefined"  onclick ="changeStatus(this.value)" > 自定义 </ html:radio >
7             < html:hidden  property ="jobName"  value ="compare"   />
8            </ td >
9  </ tr >
10

每月则需要选择该月的第几个星期的星期几

1  < tr  style ="display:"  id ="whichWeek" >
2            < th > 选择第几个星期 </ th >
3            < td  style ="font-weight:bold;" >
4             < html:select  property ="week" >
5              < html:option  value ="1" > 一 </ html:option >
6              < html:option  value ="2" > 二 </ html:option >
7              < html:option  value ="3" > 三 </ html:option >
8              < html:option  value ="4" > 四 </ html:option >
9             </ html:select >
10             < html:select  property ="dayOfMonth" >
11              < html:option  value ="1" > 星期日 </ html:option >
12              < html:option  value ="2" > 星期一 </ html:option >
13              < html:option  value ="3" > 星期二 </ html:option >
14              < html:option  value ="4" > 星期三 </ html:option >
15              < html:option  value ="5" > 星期四 </ html:option >
16              < html:option  value ="6" > 星期五 </ html:option >
17              < html:option  value ="7" > 星期六 </ html:option >
18             </ html:select >
19           </ td > 
20   </ tr >
21

每周则需要选择星期几

1  < tr  style ="display:none"  id ="whichDay" >
2            < th > 选择星期 </ th >
3            < td  style ="font-weight:bold;" >
4             < html:select  property ="dayOfWeek" >
5              < html:option  value ="1" > 星期日 </ html:option >
6              < html:option  value ="2" > 星期一 </ html:option >
7              < html:option  value ="3" > 星期二 </ html:option >
8              < html:option  value ="4" > 星期三 </ html:option >
9              < html:option  value ="5" > 星期四 </ html:option >
10              < html:option  value ="6" > 星期五 </ html:option >
11              < html:option  value ="7" > 星期六 </ html:option >
12             </ html:select >
13          </ td > 
14    </ tr >
15

自定义则选择具体的日期,如 2007-1-10

三种规则都需要设定时间点

1  < tr >
2            < th > 起始时间 </ th >
3            < td  style ="font-weight:bold;" >
4             < html:select  property ="timeType"  styleId ="type"  onchange ="changeStatus2(this.value)" >
5              < html:option  value ="AM" > 上午 </ html:option >
6              < html:option  value ="PM" > 下午 </ html:option >
7             </ html:select >
8             < html:select  property ="hour"  styleId ="amHours" >
9              < html:option  value ="1" > 1 </ html:option >
10              < html:option  value ="2" > 2 </ html:option >
11              < html:option  value ="3" > 3 </ html:option >
12              < html:option  value ="4" > 4 </ html:option >
13              < html:option  value ="5" > 5 </ html:option >
14              < html:option  value ="6" > 6 </ html:option >
15              < html:option  value ="7" > 7 </ html:option >
16              < html:option  value ="8" > 8 </ html:option >
17              < html:option  value ="9" > 9 </ html:option >
18              < html:option  value ="10" > 10 </ html:option >
19              < html:option  value ="11" > 11 </ html:option >
20              < html:option  value ="12" > 12 </ html:option >
21             </ html:select >
22             < html:select  property ="hour"  styleId ="pmHours"  style ="display:none" >
23              < html:option  value ="13" > 13 </ html:option >
24              < html:option  value ="14" > 14 </ html:option >
25              < html:option  value ="15" > 15 </ html:option >
26              < html:option  value ="16" > 16 </ html:option >
27              < html:option  value ="17" > 17 </ html:option >
28              < html:option  value ="18" > 18 </ html:option >
29              < html:option  value ="19" > 19 </ html:option >
30              < html:option  value ="20" > 20 </ html:option >
31              < html:option  value ="21" > 21 </ html:option >
32              < html:option  value ="22" > 22 </ html:option >
33              < html:option  value ="23" > 23 </ html:option >
34              < html:option  value ="0" > 0 </ html:option >
35             </ html:select >  点
36              < html:text  property ="minute"  name ="minute"  style ="width:20px;"  value ="0"  onchange ="valTime(this.value)"   />  分
37              < html:text  property ="second"  name ="second"  style ="width:20px;"  value ="0"  onchange ="valTime(this.value)"   />  秒(0-59之间的整数)
38        </ td > 
39  </ tr >
40

OK. 这样我们的页面设置就完成了。: - )

我们的设置页面已经做好了,接下来就是将时间转换为Unix Cron Expression。

2) 将时间转换为Unix Cron Expression

需要ActionForm将页面表单数据映射到Action中,然后在Action中转换为cron expression:
1  SchedulerForm schedulerForm  =  (SchedulerForm) form;
2         String jobName  =  schedulerForm.getJobName();
3         String cronExpression  =   "" ;
4          String[] commonNeeds  =    {schedulerForm.getSecond(), schedulerForm.getMinute(), schedulerForm.getHour()} ;
5          String[] monthlyNeeds  =    {schedulerForm.getWeek(), schedulerForm.getDayOfMonth()} ;
6         String weeklyNeeds  =  schedulerForm.getDayOfWeek();
7         String userDefinedNeeds  =  schedulerForm.getDate();
8         String everyWhat  =  schedulerForm.getEveryWhat();
9          // 得到时间规则
10          cronExpression  =  CronExpConversion.getCronExpression(everyWhat, commonNeeds,
11                 monthlyNeeds, weeklyNeeds, userDefinedNeeds);
12 
我定义了一个 规则类来处理转换规则(写得不是很好 能用就行 嘿嘿)

2   /** */ /**
3  * 页面设置转为UNIX cron expressions 转换类
4  * CronExpConversion
5   */
6   public   class  CronExpConversion   {
7    
8       /** */ /**
9      * 页面设置转为UNIX cron expressions 转换算法
10      *  @param  everyWhat
11      *  @param  commonNeeds 包括 second minute hour
12      *  @param  monthlyNeeds 包括 第几个星期 星期几
13      *  @param  weeklyNeeds  包括 星期几
14      *  @param  userDefinedNeeds  包括具体时间点
15      *  @return  cron expression
16       */
17      public   static  String convertDateToCronExp(String everyWhat,
18             String[] commonNeeds, String[] monthlyNeeds, String weeklyNeeds,
19              String userDefinedNeeds)   {
20         String cronEx  =   "" ;
21         String commons  =  commonNeeds[ 0 ]  +   "   "   +  commonNeeds[ 1 ]  +   "   "
22                  +  commonNeeds[ 2 ]  +   "   " ;
23         String dayOfWeek  =   "" ;
24           if  ( " monthly " .equals(everyWhat))   {
25              //  eg.: 6#3 (day 6 = Friday and "#3" = the 3rd one in the
26              //  month)
27              dayOfWeek  =  monthlyNeeds[ 1 ]
28                      +  CronExRelated.specialCharacters
29                             .get(CronExRelated._THENTH)  +  monthlyNeeds[ 0 ];
30             cronEx  =  (commons
31                      +  CronExRelated.specialCharacters.get(CronExRelated._ANY)
32                      +   "   "
33                      +  CronExRelated.specialCharacters.get(CronExRelated._EVERY)
34                      +   "   "   +  dayOfWeek  +   "   " ).trim();
35          }   else   if  ( " weekly " .equals(everyWhat))   {
36             dayOfWeek  =  weeklyNeeds;  //  1
37              cronEx  =  (commons
38                      +  CronExRelated.specialCharacters.get(CronExRelated._ANY)
39                      +   "   "
40                      +  CronExRelated.specialCharacters.get(CronExRelated._EVERY)
41                      +   "   "   +  dayOfWeek  +   "   " ).trim();
42          }   else   if  ( " userDefined " .equals(everyWhat))   {
43             String dayOfMonth  =  userDefinedNeeds.split( " - " )[ 2 ];
44               if  (dayOfMonth.startsWith( " 0 " ))   {
45                 dayOfMonth  =  dayOfMonth.replaceFirst( " 0 " ,  "" );
46             }
47             String month  =  userDefinedNeeds.split( " - " )[ 1 ];
48               if  (month.startsWith( " 0 " ))   {
49                 month  =  month.replaceFirst( " 0 " ,  "" );
50             }
51             String year  =  userDefinedNeeds.split( " - " )[ 0 ];
52              // FIXME 暂时不加年份 Quartz报错
53                /**/ /* cronEx = (commons + dayOfMonth + " " + month + " "
54                     + CronExRelated.specialCharacters.get(CronExRelated._ANY)
55                     + " " + year).trim(); */
56             cronEx  =  (commons  +  dayOfMonth  +   "   "   +  month  +   "   "
57                      +  CronExRelated.specialCharacters.get(CronExRelated._ANY)
58                      +   "   " ).trim();
59         }
60          return  cronEx;
61     }    
62 }
63  这样就将页面的时间设置转为了Cron Expression。

3) 记录时间规则

      我将时间规则存入数据库中,目的是为了生成历史日志,也可以存入XML文件中。当然您也可以省略此步,直接将转换后的规则放入相应的Quartz trigger中。

4) 更新任务触发器的时间设置

到了关键的一步了,也是最简单的一步,一个方法就可以实现了。
首先,我们需要通过trigger的名称得到一个CronTriggerBean;
其次,通过trigger的setCronExpression(String cronExp)方法将新的表达式注入;
最后,RESCHEDULE THE JOB,OK!
1       /** */ /**
2      * 自定义定时器调度时间
3      *  @param  triggerName 触发器名称
4       *  @throws  Exception
5       */
6      public   void  updateNotificationInterval(String triggerName, String triggerId)
7               throws  SchedulerException, ParseException   {
8          // 得到trigger
9          CronTriggerBean trigger  =  (CronTriggerBean) scheduler.getTrigger(
10                 triggerName, Scheduler.DEFAULT_GROUP);
11          // 得到cron expression        
12          String cronExpression  =  schedulerDAO.getCronExpression(triggerId);
13          // 设置trigger的时间规则
14          trigger.setCronExpression(cronExpression);
15          // 重置job
16          scheduler.rescheduleJob(triggerName, Scheduler.DEFAULT_GROUP, trigger);
17     }
18 
至此,目的达到了,快乐的看着您的任务在您自定义的时间下快乐的执行,您是否也想像'Happy Feet'中那只快乐的企鹅一样,
Show段踢踏呢 ; - D




PS:忘了说我的Quartz任务是怎么配置的了,罪过,罪过。



< bean  id ="compareJob"
        class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
         < property  name ="targetObject"  ref ="compareService"   />
         < property  name ="targetMethod"  value ="compare"   />
         < property  name ="concurrent"  value ="false"   />
     </ bean >

     < bean  id ="compareTrigger"
        class ="org.springframework.scheduling.quartz.CronTriggerBean" >
         < property  name ="jobDetail"  ref ="compareJob"   />
         < property  name ="cronExpression" >             
             < value > 0 39 16 20 * ? </ value >
         </ property >
     </ bean >

< bean  id ="schedulerFactory"
        class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
         < property  name ="triggers" >
             < list >                    
                     < ref  local ="compareTrigger"   />
             </ list >
         </ property >
     </ bean >
分享到:
评论
2 楼 zhaolibin147 2013-05-22  
zhaolibin147 写道
[align=left][/align][/size][size=small][/color][color=brown]ghjgjgygy

引用

    [*]
[img][/img][url][/url][flash=200,200][/flash]
1 楼 zhaolibin147 2013-05-22  
[align=left][/align][/size][size=small][/color][color=brown]ghjgjgygy

相关推荐

    Spring Quartz如何动态配置时间

    Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,广泛应用于 Java 企业级应用程序中。其中一个重要的功能便是动态配置时间,触发相应的任务。在本文中,我们将讨论如何使用 Spring Quartz...

    spring-context-support-4.2.2和quartz-2.2.3所需Jar包

    标题中的"spring-context-support-4.2.2和quartz-2.2.3所需Jar包"涉及到两个关键的Java库:Spring Context Support 4.2.2版本和Quartz Scheduler 2.2.3版本。这两个库在企业级Java应用开发中扮演着重要角色,特别是...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    Spring与Quartz的集成是另一个重要的知识点。Spring框架提供了一种优雅的方式来管理和配置Quartz,使得我们可以利用Spring的依赖注入特性来创建和管理Job实例。通过Spring的`SchedulerFactoryBean`,可以轻松地在...

    quartz整合springbatch动态集群定时实现mysql参考

    1. **Quartz配置**:定义了调度器、作业和触发器的配置,可能使用了`org.springframework.scheduling.quartz.SchedulerFactoryBean`来初始化Quartz。 2. **Spring Batch配置**:包含了作业和步骤的定义,以及读取和...

    spring quartz 非配置动态定时

    本话题主要关注如何在Spring中结合Quartz实现非配置动态定时任务,这允许我们在运行时动态地添加、修改或删除定时任务,而无需修改配置文件。 首先,我们需要理解Spring对Quartz的支持。Spring通过`org.spring...

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    Quartz的集群配置是另一个重要的话题。在高可用性环境中,我们可能需要配置多个Quartz实例以实现任务的冗余和负载均衡。这涉及到`org.quartz.jobStore`属性的设置,例如选择支持集群的数据存储(如JDBCJobStore),...

    spring3.0+quartz-1.6.0定时

    Spring 3.0 是Spring框架的一个重要版本,引入了大量新特性,如Java配置、AOP改进、数据访问增强以及对JSR 303(Java Bean Validation)的支持。在定时任务方面,Spring 3.0 提供了`org.springframework.scheduling`...

    spring quartz集群配置

    在分布式系统中,定时任务的管理往往是一个重要的环节,Spring与Quartz的结合能够帮助我们实现复杂的工作调度。Quartz是一个开源的作业调度框架,它提供了高度可配置的定时任务执行能力。本文将深入探讨如何在Spring...

    Spring中Quartz的配置

    ### Spring中Quartz的配置详解 #### 一、前言 Spring框架因其强大的功能和灵活性在企业级应用开发中占据了一席之地。其中,对于定时任务的支持,Spring结合了Quartz这一优秀的开源任务调度框架,提供了更为灵活和...

    springQuartz.zip

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等众多功能,极大地简化了Java应用的开发。而Quartz则是一...

    Spring的定时调度--Quartz

    在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而Spring的定时调度功能则为企业级应用提供了强大的任务...了解并熟练掌握Spring的定时调度和Quartz的使用,对提升企业级应用的自动化水平具有重要意义。

    spring-quartz定时设置详细说明

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,而 Quartz 是一个强大的任务调度库。将它们结合使用,我们可以实现基于 Spring 的应用程序中的定时任务管理。以下是对 ...

    spring+quartz demo

    Spring 和 Quartz 是两个在 Java 开发领域中非常重要的框架。Spring 是一个全面的、开源的应用框架,提供依赖注入(DI)、面向切面编程(AOP)以及用于简化企业级应用开发的其他功能。而 Quartz 是一个开源的作业...

    spring quartz相关jar包(多版本)

    关于标签"springquartz jar包",这表明这些 jar 文件是专门为整合 Spring 和 Quartz 而准备的。Spring 提供了对 Quartz 的支持,使得开发者可以通过 Spring 的 XML 配置或者注解方式声明和管理 Quartz 调度器,简化...

    Quartz 在 Spring 中如何动态配置时间

    本篇文章将详细探讨如何在Spring中动态配置Quartz,以及相关的核心知识点。 首先,我们需要在项目中引入Quartz和Spring的依赖。在Maven的pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;org.quartz-scheduler ...

    动态加载属性文件与SpringQuartz的应用

    在IT行业中,动态加载属性文件和Spring Quartz的整合应用是一个重要的技术话题,特别是在构建大型、分布式和可扩展的系统时。下面将详细讲解这两个概念及其相互间的应用。 首先,我们来了解一下动态加载属性文件。...

    spring2.0 Quartz 执行每天定时任务 建议用quartz-all-1.8.4.jar更稳定,兼容性更好

    为了将Job与Trigger关联,你可以创建一个`org.springframework.scheduling.quartz.JobDetailFactoryBean`来定义Job详情,然后创建`org.springframework.scheduling.quartz.CronTriggerFactoryBean`来配置Trigger。...

    Spring Quartz定时任务 jar包

    Spring Quartz定时任务是Java开发中常见的一种任务调度框架,它结合了Spring的优秀...理解Spring Quartz的工作机制以及如何配置和使用Log4j,对于Java开发者来说是非常重要的技能,能够提升应用的自动化和监控能力。

    spring+quartz动态定时任务创建 +mybatis

    在IT行业中,Spring框架和MyBatis是两个非常重要的组件,它们被广泛应用于企业级Java应用开发中。Spring作为一个全面的轻量级容器,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,而MyBatis...

    spring+springMVC+mybatis+quartz动态定时任务创建

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+mybatis+quartz动态定时任务创建"就是一个常见的技术栈,用于实现这样的目标。这个组合充分利用了各组件的优势,提供了强大的后端服务支持...

Global site tag (gtag.js) - Google Analytics