[SPRING] Spring FileSystemResource에 환경 변수 기반 위치를 사용할 수 있습니까?
SPRINGSpring 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.나중에 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.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.속성 파일 위치 시스템 속성을 파일 경로 앞에 추가하여 초기화 할 수있는 FileSystemResource (즉, PropertiesFileResource)를 항상 확장 할 수 있습니다.
속성 파일 위치 시스템 속성을 파일 경로 앞에 추가하여 초기화 할 수있는 FileSystemResource (즉, PropertiesFileResource)를 항상 확장 할 수 있습니다.
-
==============================
4.Spring.Net에는 환경 변수에서 값을 검색 할 수있는 IVariableSource 인터페이스와 PropertyPlaceholderConfigurer가 있습니다. 어쩌면 자바 용 스프링 프레임 워크와 비슷한 것이 있을까요?
Spring.Net에는 환경 변수에서 값을 검색 할 수있는 IVariableSource 인터페이스와 PropertyPlaceholderConfigurer가 있습니다. 어쩌면 자바 용 스프링 프레임 워크와 비슷한 것이 있을까요?
편집 : 나는 java 문서뿐만 아니라 PropertyPlaceholderConfigurer라는 해당 자바 빈을 찾은 것 같아요.
-
==============================
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>
from https://stackoverflow.com/questions/1841857/can-i-use-an-environment-variable-based-location-for-spring-filesystemresource by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 다른 속성의 속성 - 자리 표시 자 위치 (0) | 2018.12.18 |
---|---|
[SPRING] Spring의 Websocket 인증 및 권한 부여 (0) | 2018.12.18 |
[SPRING] java.lang.IllegalArgumentException : 디폴트 서블릿 처리를 설정하려면 ServletContext가 필요합니다. (0) | 2018.12.18 |
[SPRING] 봄, 잭슨 및 맞춤 설정 (예 : 맞춤 디시리얼라이저) (0) | 2018.12.18 |
[SPRING] Jackson 메시지 변환기를 사용하여 JSON 응답을 만드는 Spring 3.0 (0) | 2018.12.18 |