properties, yml(yaml) 프로파일 설정
설정을 상황에 맞게 다르게 해야 할 필요가 있다. 예를 들면, 개발환경과 운영환경의 설정 정보가 다를 경우이다.
profile을 적용하여 상황에 맞게 설정을 변화시킬 수 있다.
1. properties
application.properties
을 가장 먼저 로드하고 profile이 있다면 겹치는 부분은 덮어 씌여진다-
파일명 :
application-{profile명}.properties
-
application.properties
spring.profiles.active=dev # dev로 설정
→ 이와 같이 설정하면
application-dev
properties가 실행된다 -
application-dev.properties
server.port=8080
-
application-prod.properties
server.port=9090
2. yml(yaml)
-
properties
처럼 파일을 분리하는 것이 가능하다.-
application.yml
,application-dev.yml
,application-prod.yml
-
- 또한, 하나의 설정파일에서
---
구분자를 사용하여 하나의 파일에 여러 설정을 입력할 수 있다 - 파일명 :
application.yml
1. Spring Boot 2.4 이전 : spring.profiles
# 공통설정
spring:
profiles:
active: dev # dev로 설정
devtools:
livereload:
enabled: true
---
spring:
profiles: dev
server:
port: 8080
---
spring:
profiles: prod
server:
port: 9090
2. Spring Boot 2.4 부터 : spring.config.activate.on-profile
spring:
profiles:
active: dev # dev로 설정
devtools:
livereload:
enabled: true
---
spring:
config:
activate:
on-profile: dev
server:
port: 8080
---
spring:
config:
activate:
on-profile: prod
server:
port: 9090
-
spring.profiles.active
부분을 jar 실행시 커맨트로 설정/변경 할 수도 있다$ java -jar debrainsApi-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
그룹핑
-
spring.profiles.group
을 통해 여러 Profile을 그룹으로 묶는다. -
spring.profiles.active
로 그룹을 선택해 실행
spring:
profiles:
active: dev # dev 그룹으로 설정
group:
"dev": "common, dev"
"prod": "common, prod"
---
spring:
config:
activate:
on-profile: common
devtools:
livereload:
enabled: true
---
spring:
config:
activate:
on-profile: dev
server:
port: 8080
---
spring:
config:
activate:
on-profile: prod
server:
port: 9090
gradle 빌드시 Profile 선택
- gradle로 빌드할 때 원하는 profile을 선택해서 실핼시킬 수 있다.
- 예를 들면, build시 테스트가 진행되는데 이때 테스트 DB를 사용하도록 설정할 수 있다.
-application.yml
# 공통설정
spring:
profiles:
active: dev
devtools:
livereload:
enabled: true
restart:
enabled: true
thymeleaf:
cache: false
jpa:
open-in-view: false
---
spring:
config:
activate:
on-profile: dev
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:tcp://localhost/~/myapp
username: sa
password:
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true
h2:
console:
enabled: true
---
spring:
config:
activate:
on-profile: test
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://211.245.165.55:3306/myapp_test
username: myapp_test
password: 1234
jpa:
database-platform: org.hibernate.dialect.MariaDB103Dialect
hibernate:
ddl-auto: update
---
spring:
config:
activate:
on-profile: prod
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://211.245.165.55:3306/myapp
username: myapp
password: 1234
jpa:
database-platform: org.hibernate.dialect.MariaDB103Dialect
hibernate:
ddl-auto: validate
-build.gradle
plugins {
id 'org.springframework.boot' version '2.5.8'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
...
}
// Test시 Profile 변수설정
ext.profile = (!project.hasProperty('profile') || !profile) ? 'dev' : profile
test {
...
systemProperty 'spring.profiles.active', "${profile}" // profile 변수사용
}
- 빌드
$ ./gradlew clean build -Pprofile=test
→ 커맨드의 프로퍼티 옵션으로 들어온 profile
의 값인 test를 profile
이라는 변수에 담는다.
→ 옵션으로 들어온 값을 profile
변수에 설정, 아무것도 입력 되지 않으면 디폴트값으로 dev
를 설정
→ spring.profiles.active
에 profile 변수 사용해서 profile을 설정