有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在配置时更改Springbean属性

在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>

问题是,在不同的环境中,我不希望某些触发器触发。有没有办法在我的构建中包含某种类型的配置或定义的变量。环境属性或spring自定义上下文属性文件中的属性,该文件帮助bean xml确定哪些触发器应包含在列表中?例如,通过这种方式,在开发中调用AwesomeTrigger,而不是在qa中调用


共 (2) 个答案

  1. # 1 楼答案

    我也有同样的问题

    我所做的:

    我重写了触发器bean以添加一个已启用的属性

    在我推翻SchedulerFactoryBean之后。设置触发器,我只设置启用的触发器

    您只需要在xml文件中使用这些新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()]));
        }
    
  2. # 2 楼答案

    创建一个基于属性返回触发器列表的工厂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" />
    

    参考: