问题描述
我的定时时间是持久化到数据库里的,数据库里的时间一到quartz就是执行,但是spring.xml里面也需要设置一个默认的<value>定时时间,这样两个时间不就冲突了吗?我只想要数据库里的定时时间,spring.xml里的时间可以去掉不写吗?但是写成空启动会报错,请教解决方案,谢谢!
解决方案
解决方案二:
为什么不用数据库的定时器解决这个问题?
解决方案三:
这问题有点麻烦,我给说下思路吧首先要写自己的CronTriggerBean即继承org.springframework.scheduling.quartz.CronTriggerBean并实现org.springframework.beans.factory.config.BeanPostProcessore.g:publicclassMyCronTriggerBeanextendsCronTriggerBeanimplementsBeanPostProcessor{/****/privatestaticfinallongserialVersionUID=4147468197070900090L;@OverridepublicObjectpostProcessAfterInitialization(Objectarg0,Stringarg1)throwsBeansException{//TODOAuto-generatedmethodstubreturnbean;}@OverridepublicObjectpostProcessBeforeInitialization(Objectbean,StringbeanName)throwsBeansException{//TODOAuto-generatedmethodstubbeanboolflag=false;Datedate=null;if(beaninstanceof你的bean类型){flag=true;//数据库中查出时间date=......)或者if(beanName.equalsIgnoreCase(你的bean的名称)){flag=true;//数据库中查询除时间date=......}如果有多个定时器都要按照你的方法实现的话,你可定义一个属性如BeanNames在xml中注入在这里判断就是:假如你是逗号隔开for(Stringname:BeanNames.split(",")){if(beanName.equalsIgnoreCase(你的bean的名称)){flag=true;//数据库中查询除时间date=......break;}}if(flag){//将时间转化为CronExpression需要的表达式例如00/5***?//具体表达式的写法googleStringcronExpression=changeDate(date);//自己实现setCronExpression(cronExpression);returnbean;}}}相应的xml变为:<beanid="myTrigger"class="MyCronTriggerBean"><propertyname="jobDetail"><!--配置要触发的bean--><refbean="......."/></property><!--触发的时间间隔这里随便写个防止报错--><propertyname="cronExpression"value="00/5***?"/><!--如果定义的传入beanNames---><propertyname="beanNames"value="aaa,bbbb,cccc"/></bean>以上只是思路,是否实现需你自己测试