it-source

환경 변수에 따라 Spring Boot application.properties를 설정합니다.

criticalcode 2023. 9. 28. 08:27
반응형

환경 변수에 따라 Spring Boot application.properties를 설정합니다.

저는 다양한 환경에서 실행되는 Spring Boot 애플리케이션이 있으며, 애플리케이션이 실행되는 환경에 따라 다른 데이터베이스에 연결됩니다.몇개 있어요application.properties파일, 환경별로 하나씩 다음과 같은 형태로 구성됩니다.

application-local.properties:

spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=dbuser
spring.datasource.password=123456789

application-someserver.properties:

spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://someserver:5432/myproddb
spring.datasource.username=produser
spring.datasource.password=productionpass

등.

각 환경에는 다음과 같은 환경 변수가 있습니다.MYENV예를 들어 환경의 유형으로 설정됩니다.local아니면someserver(이름)application-{env}.properties파일이 환경 이름과 완벽하게 일치합니다.

이 환경 변수를 읽고 자동으로 올바른 스프링 부트를 선택하려면 어떻게 해야 합니까?.properties파일이요? 저는 그 모든 것을 할 필요가 없습니다.-Dspring.profiles.active=someserver이 패키지의 배포 방식 때문에(병으로 실행되지 않음).

이 환경 변수를 읽고 자동으로 올바른 .properties 파일을 선택하도록 스프링 부팅을 하려면 어떻게 해야 합니까?

Spring Boot에게 활성 프로파일을 선택하라고 합니다.MYENV속성 또는 환경 변수.이렇게 하는 한 가지 방법은 다음을 당신의 것에 추가하는 것입니다.application.properties:

spring.profiles.active=${MYENV}

이렇게 하면 스프링 부츠가 세팅됩니다.spring.profiles.active의 가치까지MYENV환경 변수.

이 패키지가 배포되는 방식 때문에 전체 -Dspring.profile.active= some 서버를 수행할 필요가 없습니다(항아리로 실행되지 않음).

이에 해당하는 환경 변수를 사용할 수 있습니다.spring.profiles.active, 시스템 속성을 전달하고 싶지 않다면-D논쟁들.해당 환경 변수는SPRING_PROFILES_ACTIVE. 예를 들어 다음과 같이 설정할 경우SPRING_PROFILES_ACTIVE로.local,그local프로파일이 활성화됩니다.당신이 만약 당신이 사용할 것을 주장한다면MYENV환경변수, 첫번째 해결책은 가야할 길입니다.

해당 응용 프로그램을 일부 컨테이너(tomcat, weblogic, ...)에 배포하는 경우 환경 변수를 지정할 수 있습니다.예를 들어 환경 변수를 지정합니다.application1.spring.profiles.active=someserverapplication.properties set property에 저장합니다.spring.profiles.active=${application1.spring.profiles.active}

Spring context 5.0을 사용하여 다음 주석을 통해 시스템 환경을 기반으로 올바른 속성 파일을 로드하는 데 성공했습니다.

@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("classpath:application-${MYENV:test}.properties")})

여기서 MYENV 값은 시스템 환경에서 읽혀지고 시스템 환경이 존재하지 않으면 기본 테스트 환경 속성 파일이 로드되고, MYENV 값을 잘못 지정하면 응용 프로그램을 시작하지 못합니다.

참고: 각 프로파일에 대해 애플리케이션-[프로파일]을 작성해야 하는 상태를 유지해야 합니다.속성 파일 및 Spring context 5.0을 사용했지만 Spring boot는 사용하지 않았습니다 - 이것은 Spring 4.1에서도 작동할 것으로 생각합니다.

이 솔루션은 최소한의 의존성으로 AWS Lambda에 대해 제가 생각하는 최고의 솔루션입니다.

언급URL : https://stackoverflow.com/questions/38336753/set-spring-boot-application-properties-based-on-environment-variable

반응형