본문 바로가기

웹 개발/Spring Boot

Spring Boot) properties 파일로 변수 주입받아 사용하기 (profile 활용)

환경

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면 "" 인것