具有多个bean配置文件的Spring Batch CommandLineRunner

时间:2012-10-23 08:34:10

标签: spring batch-processing spring-batch

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

  • batch / 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配置文件,但这不是我希望的方式。

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

1 个答案:

答案 0 :(得分: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 ...

另见here