2016-12-18 3 views
0

XML 기반의 Spring 설정에서 "속성-자리"와 함께 :봄 부팅 - 초보 - 부모 나는 봄 부팅의 "봄 부팅 스타터 부모"에서 상속 내 POM에서

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.2.RELEASE</version> 
</parent> 

에 따르면 다음으로 Spring Boot documentation Spring Boot Parent는 Spring 스타일의 플레이스 홀더와의 충돌을 막기 위해 maven-resources-plugin의 기본 필터 토큰을 $ {maven.token}에서 @ maven.token @으로 변경합니다. 배경 : Spring의 구분자는 Maven 구분자와 동일합니다.

제 생각에 : 변경 사항은 Maven 속성에 영향을 주며 Spring 속성 확장에는 영향을 미치지 않습니다. 하지만 어쩌면 내가 틀렸어 그 반대 일까? 를 통해 수입 내 XML 기반의 Spring 애플리케이션 컨텍스트 구성 파일 : "속성-자리 컨텍스트"다음을 사용하는 경우

지금,

@Configuration 
@ImportResource("spring/applicationContext-core.xml") 
@EnableJpaRepositories 
@EnableAutoConfiguration 
public class StudyDayApplication { 

    /** 
    * This main is for using Spring Boot in case of a JAR file packaging. 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SpringApplication.run(StudyDayApplication.class, args); 
    } 
} 

봄 특정 키의 속성 확장은 더 이상 작동하지 않습니다. 내 "application-core.xml"에서는 외부 고유의 구성 속성을 사용하기 위해 Spring 고유의 "속성 자리 표시 자"를 사용합니다. 하지만 여전히 Spring 고유의 속성 구분 기호 (예 : 내 "dataSource"bean의 "jpa.driver.classname"을 확장)를 사용하려고합니다.

... 
<context:property-placeholder 
     ignore-resource-not-found="false" 
     location="classpath*:*.properties"/> 
... 
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> 
    <property name="driverClassName" value="${jpa.driver.classname}"/> 
... 

그러나 다음과 같은 XML을 추가 할 때 following remark에 따르면

"@ @ jpa.driver.classname"에 의해 "$ {jpa.driver.classname을}"교체 할 때 스프링의 교체에만 작동 속성 :

order="1" 
ignore-unresolvable="true" 

을 "속성-자리"에 내가 말해 봄 부팅 시작시 예외를 얻을하지 않습니다

는 "문자열 값의 자리 표시 자 'jpa.driver.classname'을 확인할 수 없습니다 "$ {jpa.driver.classname} "

하지만이 건물의 확장이 제대로 작동하지 않도록 해요" property-placeholder "는 분석 할 수없는 항목을 무시합니다. bean이 확장되지 않은 속성 키를 사용하여 인스턴스화되는 경우 나중에 예외가 발생합니다. "order = 1"속성 만 설정해도 도움이되지 않습니다.

아마도 "property-placeholder"를 명시 적으로 Spring Boot searches for "application.properties" automatically within the application으로 사용하기 위해 Spring Boot가 필요하지 않을 수도 있습니다. 그러나 나는이 접근법으로 바꾸고 싶지 않다.

"spring-boot-startter-parent"를 사용하고 일반적인 Spring 속성 확장을 활성화하는 방법이 있습니까?

답변

0

내 문제를 발견 :-) 그것은 이상한 효과지만 내 구성을 자극하지 않는 봄 아니에요.

문제는 다음과 같습니다. 속성 파일이 클래스 경로의 루트 폴더에 있지만 아래에 있지 않습니다. 그리고 속성 파일이로드되지 않는 한 속성 확장을 실행할 수 없습니다.

*를 모두 찾으십시오.등록 정보 파일 - 개미 스타일의 표기법에도 하위 디렉토리에서 사용할 수 :

<context:property-placeholder 
     ignore-resource-not-found="false" 
     location="classpath*:**/*.properties"/> 

주의 수 : 모든 "* .properties의"파일을 JAR 파일에있는 발견되어이 정의와 하위 폴더의로 classpath 루트. 마지막으로 단일 특성 파일에 병합됩니다. 따라서 메모리 소비가 증가 할 수 있습니다!

자세한 내용은 Spring documentationfollowing comment @stackoverflow.com을 참조하십시오.