在一个spring servlet xml文件中,我正在使用org.springframework.scheduling.quartz.SchedulerFactoryBean
定期触发一组触发器。
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="AwesomeTrigger" />
<ref local="GreatTrigger" />
<ref local="FantasticTrigger"/>
</list>
</property>
</bean>
问题是在不同的环境中,我不希望某些触发器触发。有没有办法在我的build.properties中为环境或spring自定义上下文属性文件中定义某种配置或变量,以帮助bean xml确定哪些触发器应该包含在列表中?这样,例如,AwesomeTrigger
将在开发中调用,而不是qa。
答案 0 :(得分:4)
创建一个工厂bean,它根据属性
返回触发器列表<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<bean class="com.yourcompany.FactoryBeanThatReturnsAListOfTriggers">
<property name="triggerNames" value="${some.property}" />
</bean>
</property>
</bean>
<context:property-placeholder location="classpath:your.properties" />
<强>参考:强>
答案 1 :(得分:2)
我遇到了同样的问题。
我做了什么:
我覆盖Trigger bean以添加启用的属性。
在我覆盖SchedulerFactoryBean.setTriggers之后,我只设置了启用的触发器。
您只需要在xml文件中使用这些新bean,并在属性文件中使用这些新bean。
前:
public void setTriggers(Trigger[] triggers) {
ArrayList<Trigger> triggersToSchedule = new ArrayList<Trigger>();
for(Trigger trigger : triggers){
if(trigger instanceof SimpleTriggerBeanEnabler){
if(((SimpleTriggerBeanEnabler)(trigger)).isEnabled()){
triggersToSchedule.add(trigger);
}
}
else{
triggersToSchedule.add(trigger);
}
}
super.setTriggers(triggersToSchedule.toArray(new Trigger[triggersToSchedule.size()]));
}