0

我正在编写一个 Spring Batch 应用程序并将 Spring Beans 配置拆分为多个文件;

  • 批处理/launchContext.xml(JobLauncher/JobRepository 等)
  • batch/common.xml(所有作业中使用的通用 bean)
  • dataSource.xml(数据源)
  • batch/jobs/myJob.xml(作业的单个文件)

这样做的原因是因为我希望在开发/测试/生产设置之间更改数据源,并且还可以节省一遍又一遍地重写相同的 bean 定义。

问题出在我希望启动 Spring Batch 应用程序时。阅读此处的说明http://static.springsource.org/spring-batch/reference/html/configureJob.html#runningJobsFromCommandLine时,它​​假定每个作业都有一个 Spring 配置文件,但这不是我希望这样做的方式。

如何从命令行运行使用多个 bean 配置文件的 Spring Batch 作业?

4

1 回答 1

1

你总是可以只导入上下文:

所以在batch/jobs/myJob.xml

<import resource="batch/launchContext.xml" />
<import resource="batch/common.xml" />
<import resource="dataSource.xml" />

另请参阅Spring Docs

编辑:

您可以使用属性占位符来外部化您的数据源属性定义:

在你的dataSource.xml

<bean id="dataSource" destroy-method="close"
    class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
</bean>

<context:property-placeholder 
   location="classpath:com/foo/jdbc.properties" 
   systemPropertiesMode="2" />  <!-- 2 means override -->

jdbc.properties将包含默认值:

jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root

但是因为使用“覆盖”系统属性模式,这些可以在运行时指定:

java -Djdbc.url=jdbc:hsqldb:hsql://dev:9002 ...

另请参阅此处

于 2012-10-23T08:40:09.093 回答