我的定时时间是持久化到数据库里的,数据库里的时间一到quartz就是执行,但是spring.xml里面也需要设置一个默认的<value>定时时间,这样两个时间不就冲突了吗?我只想要数据库里的定时时间,spring.xml里的时间可以去掉不写吗?但是写成空 启动会报错,请教解决方案,谢谢!

解决方案 »

  1.   

    这问题有点麻烦,我给说下思路吧首先要写自己的CronTriggerBean 即继承org.springframework.scheduling.quartz.CronTriggerBean
    并实现
    org.springframework.beans.factory.config.BeanPostProcessore.g:    public class MyCronTriggerBean extends CronTriggerBean implements  
    BeanPostProcessor { /**
     * 
     */
    private static final long serialVersionUID = 4147468197070900090L; @Override
    public Object postProcessAfterInitialization(Object arg0, String arg1)
    throws BeansException {
    // TODO Auto-generated method stub
    return bean;
    } @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName)
    throws BeansException {
    // TODO Auto-generated method stub
                    beanbool flag = false;
                    Date date = null;
    if (bean instanceof 你的bean类型) {
                            flag = true;
    //数据库中查出时间
    date = ......
    )
                    或者
                      if(beanName.equalsIgnoreCase(你的bean的名称)){
                           flag = true;
                           //数据库中查询除时间 
                            date = ......                }
                    如果有多个定时器都要按照你的方法实现的话,你可定义一个属性如BeanNames
                      在xml中注入
                      
                       在这里判断就是:假如你是逗号隔开
                       for(String name :  BeanNames.split(",")){
                           if(beanName.equalsIgnoreCase(你的bean的名称)){
                               flag = true;
                               //数据库中查询除时间 
                                   date = ......
                                    break;
                              }
                     }
                                      if(flag){
        //将时间转化为CronExpression需要的表达式 例如0 0/5 * * * ? 
                        //具体表达式的写法google
        String cronExpression = changeDate(date);//自己实现          
                        setCronExpression(cronExpression);
        return bean;
                    }
    }}
    相应的xml变为:
             <bean id="myTrigger"
    class="MyCronTriggerBean">
    <property name="jobDetail">
    <!-- 配置要触发的bean -->
    <ref bean="......." />
    </property> <!-- 触发的时间间隔  这里随便写个 防止报错-->
    <property name="cronExpression" value="0 0/5 * * * ?" />
                     <!-- 如果定义的传入beanNames  --->
                     <property name="beanNames  " value="aaa,bbbb,cccc" /> </bean>
    以上只是思路,是否实现需你自己测试