반응형

application.properties

SpringBoot를 구동시 동작할 포트 정보, DB정보 등 여러가지 세팅 관련된 데이터나 별도의 경로 옵션등의 값을 프로퍼티에 넣어두고 사용됩니다.

기본 프로퍼티 위치는 /src/main/resources 아래에 존재하며 구동시 자동으로 감지되므로 별도로 프로퍼티의 위치를 명시적으로 등록하거나 경로를 입력할 필요가 없습니다.

 

 

프로퍼티를 외부에서 주입하려는 이유

부트 프로젝트를 빌드하여 배포하게 되면 추후 변경사항이 발생하여 변경하고자 할때 war안에 존재하다보니 명령어를 통해 교체해주거나 새로 빌드하여 배포해야 하는 번거로움이 존재합니다. 이러한 점을 보안하고자 애초에 배포시 프로퍼티 위치 자체를 war 밖으로 빼내면 설정파일을 열어서 간단하게 값을 변경 후 저장하고 부트 프로젝트만 구동시키면 되기에 외부에 존재하는 프로퍼티를 적용하는 방법을 찾아보았습니다.

 

 

프로퍼티 구동 순서

아래는 부트 구동시 프로퍼티를 찾는 순서입니다.

  1. 명령 줄 인수.
  2. Java System 속성 ( System.getProperties()).
  3. OS 환경 변수.
  4. @PropertySource@Configuration수업 에 대한 주석 .
  5. 패키지 된 jar 외부의 애플리케이션 속성 ( application.properties YAML 및 프로필 변형 포함).
  6. jar 내부에 패키지 된 애플리케이션 속성 ( application.properties YAML 및 프로필 변형 포함).
  7. 기본 속성 (을 사용하여 지정됨 SpringApplication.setDefaultProperties).

일반적으로 부트 구동시 사용되는 방법은 6번 내부에 패키지된 프로퍼티를 가져오는것입니다.

6번 구동방식

 

여기서 우리는 외부에 존재하는 프로퍼티 파일을 읽도록 처리해보겠습니다.

 

 

외부 프로퍼티 적용하기

먼저 테스트 환경 방식입니다.

- Spring Boot war 배포파일로 작성(내부 톰캣)

디렉토리 구성 및 파일 구성

 

정상적으로 property디렉토리 프로퍼티 파일을 읽으면 포트가 8100으로 구동됩니다.

 

1. 구동시 명령 옵션으로 처리하기

  java -jar app.war  

일반적인 부트 구동 명령어인데 여기서 옵션을 추가하여 property 디렉토리 내부의 application.properties를 로드하여 구동하겠습니다.

--spring.config.loaction 옵션을 통해 classpath에 존재하는 프로퍼티 또는 file을 통해 존재하는 파일을 명시해줄 수 있습니다.

--spring.config.name 옵션도 존재하는데, 해당 옵션을 통해 application.properties가 아닌 다른 프로퍼티를 읽도록 처리도 가능합니다.

 

적용하기 예제

절대경로를 통하여 file 위치를 명시하였습니다.

  java -jar app.war --spring.config.location=file:C:/test/property/application.properties  

정상적으로 8100으로 구동된 모습

 

2. jar 외부에 존재하는 프로퍼티를 읽기

사실 1번보다 간단한 방법인데 배포하는 디렉토리에 프로퍼티를 같이 위치하도록 하면 됩니다.

그럼 부트 구동 동작원리상 내부보다 외부를 먼저 보기때문에 자동으로 등록됩니다.

 

이번엔 명령줄에 별다른 옵션없이 구동하였지만 정상적으로 8100포트로 동작하는 모습을 볼 수 있습니다.

 

 

 

이 외에도 다른 설정 방법이 있지만 여기까지만 알아보도록 하겠습니다.

반응형