programing

스프링 부트 외부 구성

javamemo 2023. 8. 8. 19:56
반응형

스프링 부트 외부 구성

스프링 부트 앱에 외부 속성 파일을 로드하려고 합니다.처음에는 구성 클래스에서 @PropertySource를 사용했습니다.그러나 이제 이 주석을 제거하여 클래스가 위치에 종속되지 않도록 합니다.그래서 저는 다음을 사용하려고 했습니다.

java -jar my-boot-ws.war --SPRING_CONFIG_NAME=file:///Users/TMP/resources/

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 문서를 기반으로 하지만 다음 오류가 발생합니다.

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder

주석을 사용하는 것은 잘 작동하지만 저는 정말로 그것에서 벗어나고 싶습니다.이것에 대한 어떤 도움도 좋을 것입니다.

감사해요.

수정 *********

죄송합니다. 복사 붙여넣기 오류입니다. 위 명령은 다음과 같습니다.

java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/

구성 파일의 이름을 변경하려는 것이 아니라 위치를 추가하는 것입니다.여기에 설명된 바와 같이:

spring.config.location에 (파일이 아닌) 디렉토리가 포함된 경우 디렉토리는 /로 끝나야 합니다(로드되기 전에 spring.config.name 에서 생성된 이름으로 추가됩니다).

명령줄에서 전달된 --spring.config.location에서 ${spring.application.name }.properties 파일이 로드된다는 의미로 해석했습니다.

좀 더 구글링한 후에 이 Spring Boot와 여러 개의 외부 구성 파일을 발견했는데, 이 파일은 다음과 같은 올바른 사용법을 나타냅니다.

java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/myFile.properties

저는 --spring.config.location이 지정된 디렉토리에 다른 속성 파일을 로드할 것이라는 느낌을 받았습니다.내가 언급한 링크의 게시물에 따르면, 이것은 사실이 아니다. 만약 디렉토리가 지정되어 있다면 그것은 application.properties가 검색되는 곳이다. 그러나 여기에 있는 문서 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 은 스프링 부트 앱이 먼저 클래스 경로를 살펴보고 가능하다면 앱 이름을 가져와 해당 이름을 기반으로 추가 속성 파일을 얻을 것이라고 암시하는 것 같다.

하지만 일단 파일 이름을 지정하면 모든 것이 정상적으로 작동했기 때문에 제가 착각한 것 같습니다.

명령줄에서 다음 속성을 사용하여 추가 부팅 구성 파일을 언급해야 합니다.

--spring.config.location="file:/path/to/application.properties"

대안은 다음과 같습니다.

-Dspring.config.location="file:/path/to/application.properties"

문자는 소문자이고 단어 구분 기호는 마침표입니다.

그렇지 않으면 이미 사용한 키로 환경 변수를 사용할 수 있습니다.

  • *nix 시스템의 경우:

    export SPRING_CONFIG_NAME=file:/path/to/application.properties
    
  • Windows OS의 경우:

    set SPRING_CONFIG_NAME=file:/path/to/application.properties
    

일반적인 문제가 아닐 수도 있지만, 저는 직면했습니다.또한 당신은 반드시 가지고 있어야 합니다.application.properties당신이 그것을 대체할 때 조차 당신의 클래스 경로 안에.--spring.config.name(저는 민감한 정보로 인해 무시당했습니다.)

실행 방법 내부에 Args가 통과하는지 확인합니다.

public class GemFireTestLoaderApplication {

public static void main(String[] args) {

        SpringApplication.run(GemFireTestLoaderApplication.class, args);
        }
}

xml 주석으로 구성하거나 먼저 제거한 경우

<!-- <context:property-placeholder location="classpath:config.properties" />  -->

<!--   <context:property-placeholder location="file:/data/xxx/vaquarkhan/dataLoader/config.properties" /> -->

속성 이름을 전달하는 데 사용할 수 있는 다음 명령

3.1)

java -jar GemfireTest-0.0.1-SNAPSHOT.jar --spring.config.location=file:///C:/data/xxx/vaquarkhan/dataLoader/test/config.properties

3.2)

java -jar GemfireTest-0.0.1-SNAPSHOT.jar --spring.config.location=file:///C:/data/xxx/vaquarkhan/dataLoader/test/config.properties

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

spring.config.name=spring  
spring.config.location=classpath:/config/

서버를 실행하는 동안 구성 폴더 spring.properties 파일을 사용할 수 있습니다. 이 속성 파일은 로드되지 않습니다.

언급URL : https://stackoverflow.com/questions/26870785/spring-boot-external-config

반응형