복붙노트

[SPRING] 봄에 속성 파일로드

SPRING

봄에 속성 파일로드

우리 팀 중 하나는이 방식으로 로딩 속성을 구현했으며 (아래 의사 코드 참조)이 방법을 사용하는 클라이언트 응용 프로그램은 모든 파일의 속성을 자유롭게 유지할 수 있으므로이 방법이 옳다고 조언합니다. 널리 사용되는 propertyplaceholderconfigurer와는 반대입니다.

<bean class="com.mypackage.Myclass">
<property name="xml" value="classpath:"{com.myapp.myproperty1}"> </property> 
</bean>

config.properties

com.myapp.myproperty1=data.xml

편집 : data.properties 및 data.xml 않습니다 추가해야합니다. 우리는 속성 파일을로드하려고합니다 (이 속성 파일은 config.properties에 "속성"으로 제공됩니다). com.myapp.myproperty1 = data.properties

import org.springframework.core.io.Resource;
public class Myclass {

private Resource xmlField;

// setter & getter methods..

}

spring core.io.Resource를 사용하는 것이 옳은가요?

또 다른 이유는 클라이언트 응용 프로그램이 환경 특정 구성을로드하려고하기 때문입니다. 나는 propertyconfigurer를 사용하고 Maven 프로파일을 사용하여 환경 특정 빌드를 생성 할 것을 제안했다.

어떤 경우에 맞는 지 조언 해 주실 수 있습니까? 시나리오가 다르면 그 점을 알려주십시오.

감사

해결법

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

    1.속성을 모든 파일에 저장하고 PropertyPlaceholderConfigurer를 계속 사용할 수 있습니다. 다음은 직장 동료의 관심사와 환경 관련 내용에 대한 욕구를 충족시키는 예입니다.

    속성을 모든 파일에 저장하고 PropertyPlaceholderConfigurer를 계속 사용할 수 있습니다. 다음은 직장 동료의 관심사와 환경 관련 내용에 대한 욕구를 충족시키는 예입니다.

    <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <!-- default settings -->
                <value>classpath:MyCompany.properties</value>
                <!-- environment-specific settings -->
                <value>classpath:MyCompany.${mycompany.env:dev}.properties</value>
                <!-- keep your coworker happy -->
                <value>classpath:${mycoworker}</value>
                <!-- allows emergency reconfiguration via the local file system -->
                <value>file:///${user.home}/MyCompany.properties</value>
            </list>
        </property>
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
        <property name="ignoreResourceNotFound" value="true" />
        <!-- should be validated separately, in case users of the library load additional properties -->
        <property name="ignoreUnresolvablePlaceholders" value="false"/> 
    </bean>
    

    -D 인수를 전달하지 않으면 나중에 다음 파일의 특성이 이전에 판별 한 값을 겹쳐 쓰는 특성 파일을 선택하게됩니다.

    # 2의 프로덕션 구성을 바꾸려면 -Dmycompany.env = prod를 java에 전달하십시오. 비슷하게 동료는 자신이 원하면 --Dmycoworker = / some / path / config.properties를 전달할 수 있습니다.

  2. ==============================

    2.PropertyPlaceholderConfigurator가 올바른 선택이 아닌 이유가 확실하지 않습니다.

    PropertyPlaceholderConfigurator가 올바른 선택이 아닌 이유가 확실하지 않습니다.

    필자는 (a) 시작할 때 -D 매개 변수를 가져올 수 있고 / 또는 (b) 컴퓨터 이름을 사용하여로드 할 속성 파일을 결정할 수있는 사용자 지정 PPC를 통해 환경 관련 구성을 거의 항상 처리했습니다.

    필자는 어떤 머신에서든지 (-D 속성을 사용하여) 임의의 설정을보다 쉽게 ​​테스트 할 수 있기 때문에, Maven을 통해 정보를 묶는 것보다 더 편리하다.

  3. ==============================

    3.+1 데이브의 제안. \ Reading 속성을로드하려면 PropertyPlaceholderConfigurer를 사용해야합니다. 여기 당신이 이것을 사용하는 방법을 궁금해하는 경우 나는 이전 프로젝트에서 빠져 나온 예제입니다. 이 예제는 여러 속성 파일을로드하는 데 사용되지만 개념은 동일합니다. 행운을 빕니다.

    +1 데이브의 제안. \ Reading 속성을로드하려면 PropertyPlaceholderConfigurer를 사용해야합니다. 여기 당신이 이것을 사용하는 방법을 궁금해하는 경우 나는 이전 프로젝트에서 빠져 나온 예제입니다. 이 예제는 여러 속성 파일을로드하는 데 사용되지만 개념은 동일합니다. 행운을 빕니다.

    <bean id="projectProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:config.properties</value>
            </list>
        </property>
    </bean>
    
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="properties" ref="projectProperties" />
    </bean>
    
    <bean id="uniqueAssetIdRetriever" class="com.mypackage.Myclass">
        <property name="xml" value="${com.myapp.myproperty1}" />
    </bean>
    
  4. from https://stackoverflow.com/questions/8097952/loading-properties-file-in-spring by cc-by-sa and MIT license