복붙노트

[SPRING] 파일 시스템에서 파일에 대한 property-placeholder 사용법

SPRING

파일 시스템에서 파일에 대한 property-placeholder 사용법

우리는 클래스 패스의 파일에서 속성을로드하는 방법을 사용했습니다.

<context:property-placeholder location="classpath:myConfigFile.properties" />

그것은 훌륭하게 작동했습니다. 그러나 이제 우리는 classpath에없는 특정 파일에서 속성을로드하려고합니다. 우리는 파일을 동적으로로드 할 수 있기를 원했기 때문에 Java 환경 변수를 사용하여 파일을 채 웁니다. 아래에 간단한 예를 들어 보겠습니다.

Java의 경우 :

  System.setProperty("my.prop.file", "/path/to/myConfigFile.properties");

스프링 XML :

<context:property-placeholder location="${my.prop.file}" />

나는 루치아노 (Luciano)의 아이디어 덕분에 이런 식으로 시도했다.

<context:property-placeholder properties-ref="prop" />

<util:properties id="prop" location="reso"/>

<bean id="reso" class="org.springframework.core.io.FileSystemResource">
    <constructor-arg index="0" value="${my.prop.file}" />
</bean>

내가 시도한 모든 것은 실패했다. 무슨 일이 있어도 my.prop.file을 설정할 수 있습니다. 가장 큰 히트 곡은 다음과 같습니다.

<context:property-placeholder location="/path/to/myConfigFile.properties" />
(ClassNotFoundException: .path.to.myConfigFile.properties)

<context:property-placeholder location="file:/path/to/myConfigFile.properties" />
(ClassNotFoundException: file:.path.to.myConfigFile.properties)

<context:property-placeholder location="file:///path/to/myConfigFile.properties" />
(ClassNotFoundException: file:...path.to.myConfigFile.properties)

클래스 패스가 아닌 파일 시스템에있는 위치로 속성 자리 표시자를 어떻게 사용합니까? 우리는 Spring 3.0.5를 사용하고있다.

스프링 파일을로드하는 Java 프로그램을 실행하는 스크립트에 문제가있는 것으로 나타났습니다. 도와 주셔서 감사합니다. 나는 원래의 코드가 결국 작동하므로이 질문을 삭제하도록 요청할 것입니다. 도와 줘서 고마워.

해결법

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

    1.이 방법은 어떨까요?

    이 방법은 어떨까요?

    <context:property-placeholder properties-ref="prop" />
    
    <util:properties id="prop" location="reso"/>
    
    <bean id="reso" class="org.springframework.core.io.FileSystemResource">
        <constructor-arg index="0" value="/yourpathandfile" />
    </bean>
    
  2. ==============================

    2.이것은 나를 위해 일했다 :

    이것은 나를 위해 일했다 :

    <context:property-placeholder location="file:/path/to/myConfigFile.properties" />
    

    그러나 이것은 (흥미롭게도)하지 않았다.

    <context:property-placeholder location="#{ systemProperties['foo'] }" />
    

    알았어.

    java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }]
    

    속성 자리 표시 자 $ {..}를 PropertyPlaceholderConfigurer의 정의와 함께 사용할 수 없게됩니다. 계란 앞에서 치킨이야.

    PropertyPlaceholderConfigurer를 하위 클래스로 만들거나 @PostConstruct 메서드에서 setLocations ()를 호출하는 등 원하는대로 할 수 있습니다. 를 사용하는 대신 다음을 사용하십시오.

    <bean class="com.foo.MyPropertyPlaceholderConfigurer"/>
    
  3. from https://stackoverflow.com/questions/10540986/how-to-use-property-placeholder-for-file-on-filesystem by cc-by-sa and MIT license