首页 文章

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

提问于
浏览
0

我正在编写一个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 回答

  • 1

    你总是可以导入上下文:

    所以 batch/jobs/myJob.xml

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

    另见Spring Docs

    编辑:

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

    在你的_1859776中:

    <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

相关问题