개발강의정리/Spring

[스프링 부트 개념과 활용] 4-3. 외부 설정 1부

nineDeveloper 2019. 10. 24.
728x90

스프링 부트 개념과 활용

4. 스프링 부트 활용

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/springboot-concept-uses/tree/chap04-03-01-configuration

 

freespringlecture/springboot-concept-uses

백기선님의 스프링 부트 개념과 활용 강의 내용 정리. Contribute to freespringlecture/springboot-concept-uses development by creating an account on GitHub.

github.com

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다. 중급 프레임워크 및 라이브러리 Spring Spring Boot 온라인 강의

www.inflearn.com

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

3. 외부 설정 1부

사용할 수 있는 외부 설정

  • properties
  • YAML
  • 환경변수
  • 커맨드 라인 아규먼트

프로퍼티 우선 순위

  1. 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties
  2. 테스트에 있는 @TestPropertySource
  3. @SpringBootTest 애노테이션의 properties 애트리뷰트
  4. 커맨드 라인 아규먼트
    java -jar springinit-0.0.1-SNAPSHOT.jar --freelife.name=mavel
  5. SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티
    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config
  6. ServletConfig 파라미터
  7. ServletContext 파라미터
  8. java:comp/env JNDI 애트리뷰트
  9. System.getProperties() 자바 시스템 프로퍼티
  10. OS 환경 변수
  11. RandomValuePropertySource
  12. JAR 밖에 있는 특정 프로파일용 application.properties
  13. JAR 안에 있는 특정 프로파일용 application.properties
  14. JAR 밖에 있는 application.properties
  15. JAR 안에 있는 application.properties
  16. @PropertySource
  17. 기본 프로퍼티 (SpringApplication.setDefaultProperties)

Bug 발생 포인트

test package에 main package에 작성된 property 변수가 없으면 Error가 발생함
이유는 main package를 먼저 빌드해서 classpath에 넣고 test package를 빌드 할 때
main package의 properties 파일을 오버라이딩 하는데
변수 설정이 다르면 기존 변수를 없애버리므로 오류가 발생함
해결법은 똑같이 properties 를 맞춰주거나 아래의 세가지 방법으로 해결함

4순위 방법 @SpringBootTest Annotation에 properties 직접 지정

@SpringBootTest(properties = "freelife.age=2")

3순위 방법으로 @TestPropertySource에 properties 직접 지정

@TestPropertySource(properties = {"freelife.name=superman", "freelife.age=23"})

2순위 방법 @TestPropertySource에 추가로 생성한 test.properties 파일 locations 지정

main package application.properties 파일이 classpath에 생성된 후 동일한 property 변수를 덮어씀

@TestPropertySource(locations = "classpath:/test.properties")

application.properties 우선 순위 (높은게 낮은걸 덮어 씁니다.)

아래의 네가지 위치에 application.properties가 위치할 수 있는데 위치에 따라 우선순위가 달라짐

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

application.properties 랜덤값 설정하기

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-random-values

 

Spring Boot Reference Documentation

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

random으로 값을 줄때 공백이 있으면 안됨 ${random.int(0,100)} 이렇게 줘야됨

  • ${random.*}

플레이스 홀더

위에서 사용한 변수는 재사용할 수 있음

  • name = freelife
  • fullName = ${name} baik

Command Line Application 끄는법

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-command-line-args

 

Spring Boot Reference Documentation

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

SpringApplication.setAddCommandLineProperties(false)
728x90

댓글

💲 추천 글