将spring-batch-admin集成到现有的spring boot后,无法导入属性

时间:2015-03-22 15:10:40

标签: spring spring-batch spring-batch-admin

我使用spring-batch和spring-boot工作过一个项目。

我按照确切的规则如何通过以下方式整合它: 1.删​​除所有@EnableBatchProcessing 2.添加ServletConfiguration和WebappConfiguration(并使用

导入它们
@Import({ ServletConfiguration.class, WebappConfiguration.class })
  1. 添加道具:

    batch-mysql.properties

    业务架构的MySQL

  2. 并修改了application.properties:

    server.servletPath=/*
    spring.freemarker.checkTemplateLocation=false
    ENVIRONMENT=mysql
    

    现在这是副作用。我的应用程序除了它的java配置之外还使用了applicationContext .xml。

    applicationContext有一些占位符:

      <context:property-placeholder
                location="file:///etc/location/services/myapp.properties"/>
    
    
        <bean name="configuration" class="com.mycompany.commons.configuration.factory.BeanAwareConfigurationFactory">
    
            <property name="serviceId" value="${serviceId}"/>
           ...
        </bean>
    

    我整合spring-batch-admin时就收到了这个错误:

    Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'serviceId' in string value "${serviceId}"
        at 
    ...
    

    我尝试使用@PropertySource导入它,但它没有工作:

      @PropertySource("file:///etc/location/services/myapp.properties")
        public class Application extends SpringBootServletInitializer {
    
            public static void main(String[] args) {
                SpringApplication.run(Application.class, args);
                System.out.printf("Started processor service app");
            }
    

    我从spring-batch-admin项目中移除spring-boot后,我就设法附加这些道具。

    知道如何克服这个问题吗?

2 个答案:

答案 0 :(得分:3)

您可以覆盖spring-batch-admin默认上下文加载配置。在src/main/resources/META-INF/spring/batch/override/manager/中,您可以放置​​env-context.xml文件,其中包含需要加载的资源配置。

这是spring batch admin一个可以作为起点的,所以你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--  Use this to set additional properties on beans at run time -->
    <bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/org/springframework/batch/admin/bootstrap/batch.properties</value>
                <value>classpath:batch-default.properties</value>
                <value>classpath:batch-${ENVIRONMENT:hsql}.properties</value>
                <!-- this line you can add-->
                <value>file:///etc/location/services/myapp.properties</value>  
            </list>
        </property>
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="ignoreResourceNotFound" value="true" />
        <property name="ignoreUnresolvablePlaceholders" value="false" />
        <property name="order" value="1" />
    </bean>

</beans>

答案 1 :(得分:2)

我分叉了github项目,并添加了修复程序以防止占位符错误。您可以在此处获取新代码:https://github.com/vesperaba/spring-batch-admin-spring-boot

问题是SpringBatch拥有它自己的PropertyPlaceholder,你必须覆盖它,但为了做到这一点,你必须手动导入一些文件,以避免定义它。

在这里您可以找到新的conf:https://github.com/vesperaba/spring-batch-admin-spring-boot/blob/master/src/main/java/de/codecentric/batch/config/MainV2Configuration.java