복붙노트

[SPRING] spring-batch-admin을 기존의 스프링 부트에 통합 한 후에 속성을 가져올 수 없음

SPRING

spring-batch-admin을 기존의 스프링 부트에 통합 한 후에 속성을 가져올 수 없음

저는 스프링 배치와 스프링 부트를 사용하는 프로젝트에 참여했습니다.

정확한 규칙에 따라 다음과 같이 통합하는 법을 따랐습니다. 1. 모든 @EnableBatchProcessing 제거 2. ServletConfiguration과 WebappConfiguration을 추가합니다. (또한

@Import({ ServletConfiguration.class, WebappConfiguration.class })

수정 된 application.properties는 다음을 사용합니다.

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

이제 여기에 부작용이 있습니다. 내 응용 프로그램은 java config 이외에 applicationContext .xml을 사용하고 있습니다.

그 applicationContext에는 place holder가 있습니다.

  <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 프로젝트에서 spring-batch-admin을 삭제하자마자 그 소품을 첨부 할 수 있습니다.

어떤 생각을 어떻게 극복 할 수 있을까요?

해결법

  1. ==============================

    1.spring-batch-admindefault 컨텍스트로드 구성을 무시할 수 있습니다. src / main / resources / META-INF / spring / batch / override / manager /에서로드해야하는 리소스 구성을 사용하여 env-context.xml 파일을 배치 할 수 있습니다.

    spring-batch-admindefault 컨텍스트로드 구성을 무시할 수 있습니다. src / main / resources / META-INF / spring / batch / override / manager /에서로드해야하는 리소스 구성을 사용하여 env-context.xml 파일을 배치 할 수 있습니다.

    다음과 같이 할 수있는 출발점으로 사용할 수있는 스프링 배치 관리자입니다 :

    <?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>
    
  2. ==============================

    2.github 프로젝트를 포크 한 다음 자리 표시 자 오류를 방지하기위한 수정을 추가했습니다. https://github.com/vesperaba/spring-batch-admin-spring-boot에서 새 코드를 얻을 수 있습니다.

    github 프로젝트를 포크 한 다음 자리 표시 자 오류를 방지하기위한 수정을 추가했습니다. https://github.com/vesperaba/spring-batch-admin-spring-boot에서 새 코드를 얻을 수 있습니다.

    문제는 스프링 배치 (Spring Batch)가 자체의 속성 자리 표시자를 가졌으므로 덮어 써야하지만이를 수행하려면 일부 파일을 수동으로 가져와야 정의를 피할 수 있습니다.

    여기에서 새로운 conf 파일을 찾을 수 있습니다 : https://github.com/vesperaba/spring-batch-admin-spring-boot/blob/master/src/main/java/de/codecentric/batch/config/MainV2Configuration.java

  3. from https://stackoverflow.com/questions/29195981/cant-import-properties-after-integrating-spring-batch-admin-into-existed-spring by cc-by-sa and MIT license