현재 배포환경이
local인지
개발서버인 dev인지
프로덕션서버인 prod인지 등
서버의 배포환경에 따른 설정값들이 다를것이다 (
Spring Profile 마다 application.* 매핑하기 (파일이름으로 매핑)
application.properties를 사용한다고 할때
application-local.properties
application-dev.properties
application-prod.properties
이런식으로 파일을 추가적으로 만든다고하면
Spring profile이 local일때는 application-local.properties를 가지고 서버 동작시키고
Spring profile이 dev일때는 application-dev.properties를 가지고 서버 동작시키고
Spring profile이 prod일때는 application-prod.properties를 가지고 서버 동작시킨다.
application.yml를 사용한다면
application-local.yml
application-dev.yml
application-prod.yml 처럼 만들면 해당 Profile에 대한 스프링환경설정파일로 인식하고
해당 파일을 가지고 서버를 동작시킨다.
주의할점!!:
application-프로필.yml들은 application.yml에 설정된 값들을 가지고있다.
application.yml에 기본적으로 설정된값들과 다른값을 가지고 싶다면
application-프로필.yml에서 한번더 설정해서 , 그 값을 덮어씌울 수 있다.
테스트해보기
application-prod.yml를 만들고
logging:
level:
hello:
springmvc: WARN
다음과 같이 hello.springmvc 패키지와 그 하위패키지의 로그레벨을 WARN으로 지정했다.
로그를 찍어볼 로그테스트컨트롤러 코드는 다음과 같다.
package hello.springmvc.basic;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogTestController {
@GetMapping("/log-test")
public String logTest() {
String name = "Spring";
String name2 = "Spring2";
log.trace("trace log={}, {}", name, name2);
log.debug("debug log={}, {}", name, name2);
log.info("info log={}", name);
log.warn("warn log={}, {}", name, name2);
log.error("error log={}, {}", name, name2);
return "OK";
}
}
Spring Profile을 prod로 설정하고 서버를 킨후 로그테스트를 진행하면
application-prod.yml에서 로그레벨을 WARN으로 설정했으니까.
WARN이상의 로그만 보여야 할것이다.
WARN이상의 로그만 보인다.
Spring Profile에 따라 다른 application.* 실행시키기 (application.yml 설정으로)
spring:
profiles:
active: local
group:
prod:
- db-prod
- aws-prod
include:
- mylocaldb
- mylocalaws
spring.profiles.active로 현재 서버를 어떤 profile로 동작시킬건지 설정가능하다.
spring.profiles.include로 어떤 Profile이든 "항상" 포함될 환경설정파일(yml)을 지정할 수 있다.
spring.profiles.group 으로 어떤 Profile일 경우 포함되어야할 환경설정파일(yml)을 지정할 수 있다.
위에 코드를 보면 어떤 profile이든 application-mylocaldb.yml 과 application-mylocalaws.yml는 같이 항상 실행될것이고
profile이 prod인 경우 application-db-prod.yml , application-aws-prod.yml도 같이 실행될것이다.
하나의 application.yml에서 profile마다 설정 다르게하기
기본으로 있는 application.yml에서 spring profile마다 설정을 다르게 진행할 수 있다.
#어떤 Profile이든 적용되는 공통설정
logging:
level:
hello:
springmvc: warn
server:
port: 8080
---
spring:
config:
activate:
on-profile: alpha
logging:
level:
hello:
springmvc: info
server:
port: 8081
---
spring:
config:
activate:
on-profile: beta
logging:
level:
hello:
springmvc: error
server:
port: 8082
윗부분에는 모든 프로필에 적용될 공통설정을 적고,
--- 와 spring.config.activate.on-profile을 이용하여 각 프로필별 설정을 다르게할 수있다.
테스트를 해본결과 alpha라는 profile로 실행시
spring:
config:
activate:
on-profile: alpha
logging:
level:
hello:
springmvc: info
server:
port: 8081
부분 설정이 적용되어 8081포트로 서버가 동작하였다.
---와 spring.config.activate.on-profile를 이용하여 프로필별 설정을 하나의 yml파일안에서 설정할 수 있다.
이런식으로 하나의 db profile의 yml를 생성해서 공통으로 쓰이는부분은 위쪽에 적어두고
각 profile마다 다른 설정을 적어두면 좋을거같다.
Profile에 따라 선별적으로 Bean 등록하기
@Profile 어노테이션을 이용하여 스프링컨테이너에 등록될 빈을 profile에 따라 다르게 등록 할 수 있다.
추가공부가 필요함.
Spring Profile 지정해서 서버 동작시키기
1. 인텔리제이 환경
2. application.yml에서 설정
spring:
profiles:
active: prod
다음과 같이 active할 profile의 이름을 적어주면 해당 profile로 서버가 동작한다.
3. Jar 실행할때
java -jar -Dspring.profiles.active=local 파일이름.jva
4. 운영체제에 환경변수로 등록해서 사용하기.
추가 공부가 필요함.
'Spring > Spring' 카테고리의 다른 글
Spring) 등록된 Bean 확인하기 (0) | 2023.01.31 |
---|---|
Spring] 예외처리 (@ExceptionHandler , @ControllerAdvice,@RestControllerAdvice), 에러코드,실제 적용 [미완] (0) | 2023.01.24 |
스프링환경설정파일(.properties,.yml),노출되면 안되는 정보 파일 관리, 빌드/배포 [미완] (0) | 2023.01.20 |
Spring Boot]로그,로깅,로그를 파일로 저장하기 (LogBack) [미완] (0) | 2023.01.19 |
[swagger] 스웨거 (0) | 2022.10.09 |
댓글