환경
SpringBoot + Gradle
개발 서버에서 사용해야할 변수와 운영, 테스트, 배포에 사용해야할 변수가 다를 경우, jar 파일을 생성할 때마다 특정 변수들을 집적 수정해야 하는 번거로움을 덜기 위해 profile을 등록하여 각 경우마다 주입받는 properties 파일을 다르게 설정하였다.
스프링부트 프로젝트를 시작하면
/home/tp/tp-platform/src/main/resources 이 경로에 application.properties 가 생성되어 있다.
이 파일에서 포트 넘버, db 관련 설정을 할 수 있고, 사용자 지정 변수도 만들 수 있다.
application.proeperties example
spring.profiles.active=dev
server.port=8080
spring.datasource.hikari.driver-class-name=org.h2.Driver
spring.datasource.hikari.jdbc-url=jdbc:h2:tp://tp-web/tp
spring.datasource.hikari.username=tp
spring.datasource.hikari.password=1234
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=true
spring.datasource.initialization-mode=always
spring.sql.init.enabled=true
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.use_sql=true
spring.jpa.properties.hibernate.format_sql=true
여기서 눈 여겨 볼 것은 spring.profiles.active=dev 라는 것!
스프링부트는 처음 시작할때 application.properties는 디폴드로 변수를 주입하는 파일로, 모든 개발 환경에서 공통적으로 사용되는 변수들을 이 곳에 작성한다.
그리고 application-dev.properties, application-test.properties 등과 같이 개발 환경에 따라 프로필을 나눌 수 있다. 위 공통 프로퍼티 파일에서는 active 된 프로필이 dev이므로 application-dev.properties에 지정한 변수들을 주입하게 된다.
applicaton-{profile}.properties 형식으로 개발환경마다 다른 프로퍼티 파일을 만들 수 있고, 프로필 이름으로 액티브를 해두면 되는데 이때 프로필 명은 개발자 맘이다. 근데 통용되는 것들이 있긴 하니까 한번 찾아보는 것도 좋겠다.
example
application-test.properties : 테스트용
# onlyoffice editor script url
onlyoffice.documentserver.url=http://tp-office.koreacentral.cloudapp.azure.com/web-apps/apps/api/documents/api.js
# created file path
created.file.path=
application-dev.properties : 개발용
# onlyoffice editor script url
onlyoffice.documentserver.url=http://tp-office-dev.koreacentral.cloudapp.azure.com/web-apps/apps/api/documents/api.js
# created file path
created.file.path=/home/tp/tp-platform/
이렇게 변수를 설정해두면, 해당 스프링부트 프로젝트의 자바 파일에서 다음과 같이 변수들을 사용할 수 있다.
...
import org.springframework.beans.factory.annotation.Value;
...
@Value("${created.file.path}"
private String createdFilePath;
public Boolean deleteCurrentDocument(String randomKey, String fileName){
File currentDocument = new File(createdFilePath + fileName);
if(currentDocument.exists()){
if(currentDocument.delete()){
System.out.println(fileName+"을 제거했습니다.");
return true;
} else{
System.out.println(fileName+"을 제거하지 못했습니다.");
return false;
}
}
else{
System.out.println(fileName+"이 존재하지 않습니다.");
return false;
}
}
import org.springframework.beans.factory.annotation.Value;
이걸로 프로퍼티 파일에 선언한 변수를 가져와 자바파일에서 사용할 수 있다.
spring.profiles.active=dev 면 "/home/tp/tp-platform" 으로 되고, test면 "" 인것