gpt4 book ai didi

java - Spring - 切换要使用的SchedulerFactoryBean

转载 作者:行者123 更新时间:2023-12-04 20:43:42 25 4
gpt4 key购买 nike

我正在使用 Spring 的 SchedulerFactoryBean 在基于 Spring 的 Java 应用程序中运行一些 Quartz 作业。目前,这是一个正在开发中的单实例应用程序,但是一旦我们开始水平扩展它,我们将希望为 Quartz 使用基于 jdbc 的 JobStore,因此不会有多个应用程序运行给定的作业。

现在,SchedulerFactoryBean 配置如下:

 <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >       
<property name="taskExecutor" ref="taskExecutor"/>
<property name="triggers">
<list>
<!-- a bunch of triggers here -->
</list>
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
</bean>

使用基于 jdbc 的 JobStore,它看起来像这样

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="dataSource" ref="mysqlJobDataSource"/>
<property name="taskExecutor" ref="taskExecutor"/>
<property name="triggers">
<list>
<!-- a bunch of triggers here -->
</list>
</property>
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<!-- and a bunch of other quartz props -->
</props>
</property>
</bean>

理想情况下,我想继续为开发人员使用默认的 RAMJobStore 版本(第一个),但为已部署的环境使用 jdbc 版本。但是,似乎没有一种很好的方法可以通过属性之类的东西在两者之间切换,因为 jdbc 存储涉及更多配置,而 SchedulerFactoryBean 上仅存在 dataSource 属性就意味着它会尝试基于 JDBC 的作业店铺。

此外,由于 SchedulerFactoryBean 是一个初始化 bean,其中初始化基本上开始运行所有作业,所以我不能将配置文件中定义的这两个 bean 都加载到 spring 上下文中,这意味着我将拥有并行作业正在运行。

我还通读了this answer ,但这种情况的不同之处在于,我正在处理两个绝不能同时处于同一上下文中的 InitializingBean。

在这两种 SchedulerFactoryBean 配置之间进行切换的最简单方法是什么?

最佳答案

从 Spring 3.1 开始,您可以使用 Spring 配置文件:

<bean name="schedulerFactoryBean" profile="dev" ...

<bean name="schedulerFactoryBean" profile="prd" ...

然后您可以指示 Spring 容器使用哪个配置文件,请参阅 How to set active spring 3.1 environment profile via a properites file and not via an env variable or system propertySpring autowire a stubbed service - duplicate bean .

如果您不能使用 3.1 或配置文件,解决此类问题的老方法是使用两个上下文文件:schedulerContext-dev.xml 和 schedulerContext-prd.xml`。然后您可以有选择地导入它们:

<import resource="schedulerContext-${some.property}"/>

关于java - Spring - 切换要使用的SchedulerFactoryBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9951036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com