속성과 함께 시작된 Spring-boot(프로파일별) 응용 프로그램에서 응용 프로그램 속성 재정의 문제런처
클래스 경로의 프로필별 응용 프로그램 속성 파일에 선언된 속성을 파일 시스템의 재정의 파일에 선언된 다른 값으로 재정의하는 데 어려움이 있습니다.
으로 구성된 응용 프로그램 Spring-boot 사용)이 .@EnableAutoconfiguration
) 여러 개의 프로필을 가지고 있으며, 이 프로필을 사용하여 시작합니다.PropertiesLauncher
JarLauncher
(배포 제약과 관련된 이유 - 아카이브가 아닌 분해된 디렉토리를 읽기 전용 파일 시스템에 배포해야 합니다.)
애플리케이션 루트 내에는 다음과 같은 프로파일별 애플리케이션 속성이 있습니다.
application-dev.properties
application-qa.properties
application-prd.properties
그리고 논쟁을 위해 말하자면,application-dev.properties
포함:
foo.bar=baz
foo.baz=other
모든 환경에서 기존 속성을 재정의하고 없는 속성(예: 프로덕션 암호)을 제공해야 할 수 있습니다. 문제는 이미 선언된 속성을 재정의하는 것입니다.application-${profile}.properties
클래스 경로에 있는 파일입니다. (클래스 경로 파일에 없는 속성을 제공해도 문제가 되지 않습니다.)
다음과 같은 파일 시스템 위치에 재정의 속성 파일이 있다고 가정합니다.
/local/appname/dev/overrides/application.properties
속성인 재을무하싶습니다고효를 .foo.bar
재산을 뿐만 아니라, 새재을신뿐만아니라할고산▁a,,라,foo.password
.
따라서 재정의 파일 내용은 다음과 같습니다.
foo.bar=overridden-value
foo.password=something
응용 프로그램을 시작할 때 다음과 같은 명령줄을 사용합니다.
java -Dspring.config.location=file:/local/appname/dev/overrides/
-Dspring.profiles.active=dev
org.springframework.boot.loader.PropertiesLauncher
--debug &
제가 보고 있는 문제는 비록foo.password
에 신고되지 않은 재산.application-dev.properties
파일이 픽업됨, 재정의foo.bar
- 무당함시 - 여히값보입다니이전,,여보입다▁value▁the▁is,baz
application-dev.properties
가보다는치,overridden-value
/local/appname/dev/overrides/application.properties
.
과 --debug
옵션이 활성화되면, 나는 볼 수 있습니다.ConfigFileApplicationListener
오버라이드 파일(파일 시스템에서)과 프로파일별 파일(클래스 경로에서)을 순서대로 로드했는지 기록합니다.
오버라이드 파일이 먼저 나열되기 때문에 먼저 로드되고 나중에 나열되는 클래스 경로의 '기본' 프로필 관련 파일에 의해 재정의된다는 순진한 결론에 매료됩니다.하지만 로그에 나열된 순서가 반드시 행동과 관련이 있는 것은 아닙니다.그리고 저는 도로에 명시된 경로의 순서를 바꾸려고 노력했습니다.spring.config.location
재산서, 래그서.classpath:
앞에나됨 앞에 .file:...
에서 "Spring-boot"에 검색된다는 때문에이 되지 도 않습니다. 사용자가 값을 제공하더라도spring.config.location
.
Spring-boot 설명서는 Spring-boot 실행 파일 JAR에 대해 속성이 확인되는 순서에 대해 다음과 같이 매우 구체적입니다.
- 명령줄 인수입니다.
- 시스템 Java 시스속성템((
System.getProperties()
). - OS 환경 변수.
- JNDI 특성의 :
java:comp/env
- A
RandomValuePropertySource
에만 .random.*
. - 포장된 병 외부의 응용 프로그램 속성(
application.properties
YAML 및 프로필 변형 포함). - 병 내부에 패키지된 응용 프로그램 속성(
application.properties
YAML 및 프로필 변형 포함). @PropertySource
에 있는@Configuration
반.- " " " (" " " " 를 하여 지정됨)
SpringApplication.setDefaultProperties
).
6행과 7행 - 병 내부 속성 위에 있는 외부 속성을 기록합니다.
제가 보기에는 설명되지 않았고, 제 혼란/문제의 원인일 수도 있는 것은 JAR을 사용하지 않고 분해된 디렉토리(따라서)를 사용할 때 발생하는 일입니다.PropertiesLauncher
.)
것과 한다면, 저는 분된디에의동면것일다대명시, 다선속값있수다기니습성할을대에 할 수 ./local/appname/dev/overrides/application.properties
에 선언된 합니다.classpath:application-dev.properties
하지만 이것은 사실이 아닌 것 같습니다.
Spring-boot Spring-boot C.4)에도 있습니다.PropertiesLauncher
는 에 입니다.loader.home
'...'라고 표현되는 재산[the] 추가 속성 파일의 위치(예: /opt/app
((으)로 ${user.dir}
)'.
그래서 사용해봤습니다.loader.home
에 spring.config.location
하지만 소용이 없습니다.
(업데이트:저는 또한 사용해봤습니다.loader.config.location
그리고 저는 두 가지 메모가 있습니다. 디렉토리보다는 파일을 원하는 것 같습니다. (그래서 그 행동은 와 유사하지 않습니다.)spring.config.location
), 그리고 상위 디렉터리가 아닌 파일 경로를 제공했지만 여전히 도움이 되지 않았습니다.)
제가 무엇을 잘못하고 있는지, 또는 제가 어떤 잘못된 가정을 하고 있는지 알아챌 수 있는 사람이 있습니까?
고마워요, 데이브, 당신의 제안은 100% 옳았어요.
파이변경우는경하에서 속성 을 바꾸면,/local/appname/dev/overrides
application-dev.properties
그러면 해당 파일의 속성 값이 의 속성 값보다 우선합니다.classpath:application-dev.properties
.
어제 이 조합을 사용해 본 적이 있다고 확신했지만, 작동을 멈춘 것은 제가 이 조합을 지정하면서 놀고 있을 때라고 생각합니다.spring.config.location
그리고 그것을 잘못 이해했기 때문에 그것은 올바른 위치에서 재정의 파일을 찾지 않았습니다.
언급URL : https://stackoverflow.com/questions/26662381/issue-overriding-application-properties-in-spring-boot-profile-specific-applic
'programing' 카테고리의 다른 글
Android의 Shared Preferences에서 객체를 어떻게 저장/저장합니까? (0) | 2023.08.10 |
---|---|
테이블스페이스 색인 (0) | 2023.08.10 |
C/C++로의 R 컴파일러가 있습니까? (0) | 2023.08.10 |
UITableView에서 마지막 셀의 마지막 테두리를 제거하는 방법은 무엇입니까? (0) | 2023.08.10 |
목록 보기에서 여러 보기를 위한 사용자 지정 Android 어댑터가 포함된 ArrayIndexOfBoundsException (0) | 2023.08.10 |