[SPRING] Spring 용 Tomcat 웹 서버에서 application.properties를 외부화하는 방법은 무엇입니까?
SPRINGSpring 용 Tomcat 웹 서버에서 application.properties를 외부화하는 방법은 무엇입니까?
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files
질문 : Tomcat 서버에서 war 파일을 실행할 때 : d : \ application.properties와 같은 classpath 또는 tomcat 컨테이너 외부의 application.properties에 대한 추가 위치를 추가하려면 어떻게해야합니까?
맞춤 위치는 위의 위치와 관련하여 가장 높은 우선 순위를 가져야합니다.
문제는 : 물론 explruct war / tomcat webapps 폴더 안에 / config 폴더를 추가 할 수 있지만 webapps 폴더가 정리되고 전쟁이 재배포되면 사용자 지정 구성이 손실됩니다.
따라서 외부에 추가 위치를 추가하고 싶습니다.
해결법
-
==============================
1.application.properties 파일이 들어있는 폴더를 가리키는 spring_config_location 환경 변수를 설정할 수 있습니다.
application.properties 파일이 들어있는 폴더를 가리키는 spring_config_location 환경 변수를 설정할 수 있습니다.
Tomcat의 경우
/bin/setenv.sh 파일에 다음 행을 추가하여이 작업을 수행 할 수 있습니다 (누락 된 경우 파일 작성). export spring_config_location=/usr/local/tomcat/conf/
해당 폴더에 특성 파일을 놓으십시오. 여러 개의 앱이있는 경우 각 앱의 속성 파일 이름을 고유하게 설정할 수 있습니다. 스프링 부트 App을 위해 나는 이렇게했습니다 :
@SpringBootApplication public class MyApplication { public static void main(String[] args) { System.setProperty("spring.config.name", "my-app"); SpringApplication.run(MyApplication.class, args); } }
BOOT로 실행할 때 새 이름이 선택됩니다. Tomcat에도 배포 할 때 이름을 설정하려면 SpringBootServletInitializer의 configure를 다음과 같이 덮어 씁니다.
public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyApplication.class).properties("spring.config.name: my-app"); } }
그런 다음 my-app.properties와 같은 등록 정보 파일의 이름을 지정하십시오. 디폴트 이름 대신에 Spring은 그것을 찾을 것입니다. 샘플의 모든 폴더 / usr / local / tomcat / conf /에 모든 응용 프로그램 속성 파일을 저장할 수 있습니다. 외부 속성이 우선 적용됩니다. 우선 순위는 다음을 참조하십시오. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
최신 정보
Spring Boot 2 이후 spring_config_location의 동작이 변경되었습니다 (마이그레이션 가이드 참조).
따라서 유스 케이스를 기반으로 환경 변수로 설정할 속성을 고려해야합니다. 새 파일은 setenv.sh에서 spring_config_additional-location과 비슷해야합니다. 파일을 찾는 위치는 참조 문서에도 설명되어 있습니다.
-
==============================
2.저에게 가장 쉬운 방법은 컨텍스트 파일을 Tomcat의 config 폴더에 넣는 것입니다. 예를 들어 응용 프로그램이 루트 경로 (예 : http://your_domain.com/)에서 실행중인 경우 [path_to_your_tomcat] /conf/Catalina/localhost/ROOT.xml 파일을 만들어야합니다. 응용 프로그램이 다른 경로 (예 : http://your_domain.com/example_path)에서 실행되는 경우 파일의 이름은 [path_to_your_tomcat] /conf/Catalina/localhost/example_path.xml과 같아야합니다. 이 파일 안에는 하드 드라이브의 어느 곳에 나 배치 할 수있는 외부 application.properties 파일에 대한 경로를 지정할 수 있습니다.
저에게 가장 쉬운 방법은 컨텍스트 파일을 Tomcat의 config 폴더에 넣는 것입니다. 예를 들어 응용 프로그램이 루트 경로 (예 : http://your_domain.com/)에서 실행중인 경우 [path_to_your_tomcat] /conf/Catalina/localhost/ROOT.xml 파일을 만들어야합니다. 응용 프로그램이 다른 경로 (예 : http://your_domain.com/example_path)에서 실행되는 경우 파일의 이름은 [path_to_your_tomcat] /conf/Catalina/localhost/example_path.xml과 같아야합니다. 이 파일 안에는 하드 드라이브의 어느 곳에 나 배치 할 수있는 외부 application.properties 파일에 대한 경로를 지정할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?> <Context> <Environment name="spring.config.location" value="file:/path/to/your/application/properties/file/" type="java.lang.String"/> </Context>
-
==============================
3.몇 번이나해야만했고, 컨테이너에서 클래스 경로 리소스로 외부 디렉토리를 구성하는 것이 가장 좋은 방법이었습니다.
몇 번이나해야만했고, 컨테이너에서 클래스 경로 리소스로 외부 디렉토리를 구성하는 것이 가장 좋은 방법이었습니다.
그런 다음 디렉토리에 외부화하려는 자원을 배치하면 모든 것이 올바르게 실행됩니다. 봄에 리소스를로드하려면 다음과 같이하면됩니다.
<beans:bean id="externalProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <beans:property name="location" value="classpath:[my-application-name]/applicationProperties.properties" /> <beans:property name="placeholderPrefix" value="!applicationProperties{" /> <beans:property name="placeholderSuffix" value="}" /> </beans:bean>
각 바람둥이에 여러 응용 프로그램을 배포하려는 경우, 클래스 패스에 설정 한 폴더에 디렉토리 구조를 만들고 각 war 응용 프로그램마다 다른 application.properties를 유지할 수 있음을 알 수 있습니다
스프링 설정에서 응용 프로그램 이름 섹션을 dinamically 유지하려는 경우, 패키지 단계 (maven) 또는 응용 프로그램 컨텍스트 경로를 사용하는 등 여러 가지 방법으로이를 수행 할 수 있습니다
-
==============================
4.마지막으로 보안 속성을 외부화하기 위해 다음 속성을 추가했습니다.
마지막으로 보안 속성을 외부화하기 위해 다음 속성을 추가했습니다.
spring.config.additional-location = / etc / tomcat /
/application-production.properties
from https://stackoverflow.com/questions/41461786/how-to-externalize-application-properties-in-tomcat-webserver-for-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] XML 스키마 네임 스페이스 용 Spring NamespaceHandler를 찾을 수 없음 [http://cxf.apache.org/jaxrs] (0) | 2019.04.04 |
---|---|
[SPRING] 스프링의 자동 구성 재 초기화 (0) | 2019.04.04 |
[SPRING] 스프링 어노테이션으로 ehcache 3 사용 (스프링 부트 사용 안함) (0) | 2019.04.04 |
[SPRING] Spring은 다른 프로젝트에서 응용 프로그램 컨텍스트 가져 오기 (0) | 2019.04.04 |
[SPRING] org.hibernate.MappingException : 알 수없는 엔티티 : (0) | 2019.04.04 |