Spring-Boot에서 실제 가동 중에 application.properties를 덮어쓰는 방법
스프링 부츠랑application.properties
개발 중에 데이터베이스를 선택하다@Configuration @Profile("dev")
.
spring.profiles.active=dev
spring.config.location=file:d:/application.properties
프로덕션 중에 로드해야 하는 응용 프로그램 컨텍스트 외부에 파일을 만든 후 d:/application.properties를 사용하여 다른 구성 프로파일을 활성화해야 합니다.
spring.profiles.active=production
결과: 앱을 시작할 때 구성이 그대로 유지됨dev
따라서 프로덕션 속성 파일의 추가 위치는 고려되지 않습니다.내가 뭘 놓친거야?
스프링 부트 1.1.0빌드 스냅샷
주의: 이 질문은 Tomcat에 관한 것이 아닙니다.
어떻게 하는지 물어보셨겠지만, 대답은 이러면 안 된다는 거예요.
그 대신,application.properties
,application-default.properties
application-dev.properties
arg를 통해 JVM으로 프로파일을 전환합니다.-Dspring.profiles.active=dev
또한 테스트 시 다음을 사용하여 몇 가지 사항을 재정의할 수 있습니다.@TestPropertySource
이상적으로는 모든 것이 전원 관리 상태에 있어야 합니다.서버 위치에 어떤 속성이 있고 어떤 속성이 누락되었는지 어떻게 알 수 있습니까?개발자가 새로운 것을 도입하면 어떻게 됩니까?
Spring Boot은 이미 이 기능을 제대로 수행하기 위한 충분한 방법을 제공하고 있습니다.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
를 사용할 수도 있습니다.@PropertySources
@PropertySources({
@PropertySource(value = "classpath:application.properties"),
@PropertySource(value = "file:/user/home/external.properties", ignoreResourceNotFound = true)
})
public class Application {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}
}
프로파일을 동적으로 변경할 수 있을지 모르겠습니다.
spring.config.location 속성이 원하는 외부 위치로 설정된 내부 속성 파일과 spring.profiles.active 속성이 설정된 위치(항아리 외부)의 속성 파일만 있으면 됩니다.
또한 개발 프로파일(spring.dev.active=dev)에 고유한 내부 속성 파일을 가지고 그대로 두는 것이 좋습니다. 프로덕션 환경에 배포하려면 속성 파일의 새 위치(spring.dev.active=dev:
java -jar myjar.jar --spring.config.location=D:\wherever\application.properties
스프링 부츠 2부터는
--spring.config.additional-location=production.properties
Spring Boot 2.2.2로 업데이트합니다.풀어주다.
완전한 예: https://www.surasint.com/spring-boot-override-property-example/
jar 파일에는 다음 두 줄의 application.properties가 있다고 가정합니다.
server.servlet.context-path=/test
server.port=8081
그런 다음 프로덕션에서 server.port=8888을 재정의하지만 다른 속성은 재정의하지 않습니다.
먼저 다른 파일(ex override.properties)을 생성하여 다음 행을 온라인으로 만듭니다.
server.port=8888
그러면 이렇게 항아리를 시작할 수 있어요.
java -jar spring-boot-1.0-SNAPSHOT.jar --spring.config.location=classpath:application.properties,/opt/somewhere/override.properties
업데이트: 봄철 버그입니다.여기를 참조해 주십시오.
항아리 밖의 응용 프로그램 속성은 다음 중 하나에 있어야 합니다. 그러면 모든 것이 작동하게 됩니다.
21.2 Application property files
SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment:
A /config subdir of the current directory.
The current directory
A classpath /config package
The classpath root
예를 들어 cmd line args를 지정하지 않고 base app.location에서 spring.config.location을 사용하지 않을 경우 이 방법이 작동합니다.
d:\yourExecutable.jar
d:\application.properties
or
d:\yourExecutable.jar
d:\config\application.properties
업데이트: \@Configuration을 \@PropertySource와 함께 사용할 수 있습니다.이 문서에 따르면 리소스를 어디에서나 지정할 수 있습니다.어떤 구성이 로딩되어 있는지 주의하여 운영 환경에서 확실하게 승리할 수 있도록 해야 합니다.
다음과 같은 것이 나에게 효과가 있음을 알게 되었습니다.
java -jar my-awesome-java-prog.jar --spring.config.location=file:/path-to-config-dir/
추가했습니다.
레이트 에디트
물론 이 명령줄은 실제 가동 상태에서는 실행되지 않습니다.
오히려 나는
- 겹] [여러 겹]
shell
는, 「JAR」, 「JAR」의 「...」를 참조해 주세요. ansible
를shell
스크립트와 플레이스 홀더를 실제 값으로 바꿉니다.
스프링 설정의 우선 순위는 다음과 같습니다.
- ServletConfig init 파라미터
- Servlet Context init 파라미터
- JNDI 속성
- System.getProperties()
따라서 설정을 변경하려면 명령줄에서 설정을 덮어씁니다.그러나 여러 프로파일을 사용할 수 있지만 재정의는 피하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/23563363/how-to-override-application-properties-during-production-in-spring-boot
'programing' 카테고리의 다른 글
angular.copy()와 할당(=)의 차이점은 무엇입니까? (0) | 2023.03.12 |
---|---|
NSURLRequest를 사용하여 Http 요청에서 json 데이터를 전송하는 방법 (0) | 2023.03.07 |
내보내기, react.module의 여러 모듈 (0) | 2023.03.07 |
Android 컴파일 시 리액트 네이티브 카메라 오류 발생 (0) | 2023.03.07 |
JSON 데이터를 사용하여 선택 상자의 옵션을 채우려면 어떻게 해야 합니까? (0) | 2023.03.07 |