본문으로 바로가기

Spring application.yml Profile.active 사용해보기

category JAVA 2022. 10. 4. 19:16
반응형

application.yml, application.properties 이란?

  • 스프링 부트가 자동으로 로딩하게 되는 설정 파일.
  • key - value 형식으로 구성
  • 설정하는 방법은 여러 가지라 우선순위에 따라 오버라이딩될 수 있음.

설정 파일 값 참조

application.properties

ping.message=pong

1. Environment

@SpringBootApplication
@RestController
public class TestPrjApplication {

    @Autowired
    private Environment environment;

    public static void main(String[] args) {
        SpringApplication.run(TestPrjApplication.class, args);
    }

    @GetMapping("/ping")
    public String ping() {
        return environment.getProperty("ping.message");
    }
}

2. @Value

@SpringBootApplication
@RestController
public class TestPrjApplication {

    @Value("${ping.message}")
    private String check;

    public static void main(String[] args) {
        SpringApplication.run(TestPrjApplication.class, args);
    }

    @GetMapping("/ping")
    public String ping() {
        return check;
    }
}

 

Profile active

Spring Boot에서 profile은 각각의 환경 정보를 의미함.

개발 환경, 테스트 환경, 운영 환경 등 각각의 환경에 맞는 설정을 할 때 사용.

 

resource 하위 각각의 환경에 맞게 파일 생성

profile 설정 없이 실행하면 default로 사용

# application-default.properties

spring.config.activate.on-profile=default
#spring.profiles.active=default
#active.message=default active
ping.message=default pong
spring.config.use-legacy-processing=true
# application-dev.properties

spring.config.activate.on-profile=dev
#spring.profiles.active=dev
#active.message=dev active
ping.message=dev pong
spring.config.use-legacy-processing=true
# application-prod.properties

spring.config.activate.on-profile=prod
#spring.profiles.active=prod
#active.message=prod active
ping.message=prod pong
spring.config.use-legacy-processing=true

 

실행

1. IDE 실행 (Intellij 실행)

Edit Configuration... > Environment > VM options
-Dspring.profiles.active=prod


# java -jar Dspring.profiles.active=prod prj.jar

2. Dockerfile 환경 변수 설정

environment:
  - 'spring_profiles_active=prod'

 

확인

[main] com.example.testprj.TestPrjApplication : The following 1 profile is active: "prod"

http://localhost:8080/ping
# prod pong

http://localhost:8080/active
# prod active
@SpringBootApplication
@RestController
public class TestPrjApplication {

    @Autowired
    private Environment environment;

    @Value("${ping.message}")
    private String check;

    public static void main(String[] args) {
        SpringApplication.run(TestPrjApplication.class, args);
    }

    @GetMapping("/active")
    public String active() {
        return environment.getProperty("active.message");
    }

    @GetMapping("/ping")
    public String ping() {
        return check;
    }
}

 

에러

 

19:10:45.380 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-prod.properties]' is invalid in a profile specific resource [origin: class path resource [application-prod.properties] - 2:24]
at org.springframework.boot.context.config.InvalidConfigDataPropertyException.lambda$throwOrWarn$1(InvalidConfigDataPropertyException.java:125)

 

해결 방법

 

1. 레거시 구동방식 유지

spring.config.use-legacy-processing=true

 

2. spring.profile 변경

spring.config.activate.on-profile=prod
#spring.profiles.active=prod

 

 

참고

반응형