복붙노트

[SPRING] Spring FileSystemResource에 환경 변수 기반 위치를 사용할 수 있습니까?

SPRING

Spring FileSystemResource에 환경 변수 기반 위치를 사용할 수 있습니까?

모든 등록 정보 파일을 디렉토리에 저장해야한다는 요구 사항이 있습니다. 이 디렉토리의 위치는 시스템 환경 변수에 저장해야합니다. 내 응용 프로그램 컨텍스트에서이 환경 변수에 액세스하여 FileSystemResource Bean을 작성해야합니다. 다음은 내가 일반적으로 가지고있는 예입니다.

<bean id="properties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <bean class="org.springframework.core.io.FileSystemResource">
            <constructor-arg>
                <value>myprops.properties</value>
            </constructor-arg>
        </bean>
    </property>
</bean>

대신 나는 그것과 같은 것을 가질 필요가있을 것이다.

<value>${prop_file_location}/myprops.properties</value>

여기서 소트 파일 위치는 환경 변수입니다. 누구든지이 일을하는 쉬운 방법을 알고 있습니까?

나는 봄 2.5.6과 자바 1.6을 사용하고있다.

해결법

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

    1.나중에 Spring 3.0.X로 업그레이드하여 스프링 표현 언어를 활용할 수있었습니다. 우리의 접근법은 세 가지 빈에서 다음 스 니펫으로 간소화되었습니다.

    나중에 Spring 3.0.X로 업그레이드하여 스프링 표현 언어를 활용할 수있었습니다. 우리의 접근법은 세 가지 빈에서 다음 스 니펫으로 간소화되었습니다.

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
        <list>
            <value>classpath:defaults.properties</value>
            <value>file:/a/defined/location/project.properties</value>
            <value>file:${AN_ENV_CONFIGURED_DIR}/project.properties</value>
        </list>
      </property>
    
      <property name="ignoreResourceNotFound" value="true" />
      <property name="searchSystemEnvironment" value="true" />
      <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    </bean>
    

    이로써 우리는 정적으로 잘 알려진 위치의 개발 (첫 번째 기본값) 또는 env 변수를 통해 구성된 배치 된 위치를 가질 수있었습니다. 구성자는이를 순서대로 처리합니다 (예 : 배포가 기본값보다 우선 함).

    프로그래밍 방식이 아닌 방식으로 끝을 맺었습니다. MethodInvoker를 사용하여 환경 값을 검색했습니다. 그런 다음이를 FileSystemResource에 전달할 수있었습니다.

    <bean id="configPath" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" >
        <property name="targetClass" value="java.lang.String" />
        <property name="staticMethod" value="java.lang.System.getenv" />
        <property name="arguments">
            <list>
                <value>NAME_OF_VARIABLE</value>
            </list>
        </property>
    </bean>
    
  2. ==============================

    2.2.5.x가 필요하다는 점에 주목하면서 Spring 3의 EL 지원 (2009 년 11 월부터 사용 가능)은 이런 종류의 일에 대한 짧은 작업을했을 것이라는 점을 지적 할 필요가 있습니다

    2.5.x가 필요하다는 점에 주목하면서 Spring 3의 EL 지원 (2009 년 11 월부터 사용 가능)은 이런 종류의 일에 대한 짧은 작업을했을 것이라는 점을 지적 할 필요가 있습니다

    @Value("#{ systemProperties['user.home'] }") 
    private String userHome ;
    

    또는

    <property name = "userHome" value ="#{ systemProperties['user.home'] }"/>
    
  3. ==============================

    3.속성 파일 위치 시스템 속성을 파일 경로 앞에 추가하여 초기화 할 수있는 FileSystemResource (즉, PropertiesFileResource)를 항상 확장 할 수 있습니다.

    속성 파일 위치 시스템 속성을 파일 경로 앞에 추가하여 초기화 할 수있는 FileSystemResource (즉, PropertiesFileResource)를 항상 확장 할 수 있습니다.

  4. ==============================

    4.Spring.Net에는 환경 변수에서 값을 검색 할 수있는 IVariableSource 인터페이스와 PropertyPlaceholderConfigurer가 있습니다. 어쩌면 자바 용 스프링 프레임 워크와 비슷한 것이 있을까요?

    Spring.Net에는 환경 변수에서 값을 검색 할 수있는 IVariableSource 인터페이스와 PropertyPlaceholderConfigurer가 있습니다. 어쩌면 자바 용 스프링 프레임 워크와 비슷한 것이 있을까요?

    편집 : 나는 java 문서뿐만 아니라 PropertyPlaceholderConfigurer라는 해당 자바 빈을 찾은 것 같아요.

  5. ==============================

    5.예:

    예:

    -DDA_HOME = c : \ temp로 시작합니다.

    c : \ temp에는 "config"라는 디렉토리가 있어야합니다.

    c : \ temp \ config에는 app.properties 파일이 있습니다 (예 :).

    스프링 로더 확장 :

    public class Loader extends org.springframework.beans.factory.config.PropertyPlaceholderConfigurer{
    
        private String appHome;
    
        public void setAppHome(String appHome) {
            this.appHome = appHome;
        }
    
        @Override
        public void setLocation(Resource location) {
            if(appHome==null){
                throw new RuntimeException("You must specify VM property DA_HOME, this directory must contain " +
                        "another directory, called config, inside the config directory app.properties " +
                        "file must be found with the configuration properties");
            }
            String configurationDirectory = appHome + System.getProperty("file.separator") + "config";
            String fileName = location.getFilename();
            Resource file = new FileSystemResource( configurationDirectory + System.getProperty("file.separator")+ fileName);
            super.setLocation(file);
        }
    }
    

    새 로더와 해당 구성베이스를 지정하십시오.

        <bean id="placeholderConfig"    class="your.Loader">
            <property name="appHome" value="#{systemProperties['DA_HOME']}"/>
            <property name="location" value="app.properties" />
        </bean>
    
  6. from https://stackoverflow.com/questions/1841857/can-i-use-an-environment-variable-based-location-for-spring-filesystemresource by cc-by-sa and MIT license