Spring 잡담 의 SpringBoot 설정 파일 상세 설명

           SpringBoot         ,    slf4j                
      ,          SpringBoot      

SpringBoot 프로필
SpringBoot 에서 흔히 볼 수 있 는 매개 변수의 설정 은 기본적으로 자동 으로 설정 되 며, 기본 전역 프로필 을 제공 합 니 다. 파일 이름 은 다음 과 같 습 니 다.
•application.properties •application.yml
흔히 볼 수 있 는 properties 프로필 을 제외 하고 SpringBoot 에 yml 파일 을 프로필 로 도 입 했 습 니 다. 효 과 는 properties 와 같 습 니 다. 또한 공식 적 으로 yml 을 사용 하여 properties 파일 을 대체 하 는 것 을 추천 합 니 다. 그 원인 은 properties 파일 의 유연성 과 인 코딩 문제 등 과 관련 이 있 고 yml 프로필 자체 의 유연성 과 관련 이 있 습 니 다.다음은 yml 파일 의 흔 한 기본 문법 을 배 워 보 겠 습 니 다.
YAML 프로필 문법
왜 Yaml 가 프로필 에 더 적합 합 니까?
이전 Spring 시대 에 대부분의 설정 파일 은 xxx. xml 등 을 사 용 했 기 때문에 엄격 한 문법 과 라벨 의 의미 화 에 따라 설정 을 해 야 했 고 설정 이 복잡 하고 다양 했다. 한편, YAML (YAML Ain 't Markup Language) 은 데 이 터 를 중심 으로 json, xml 등 보다 설정 항목 과 데이터 에 관심 이 많 았 고 자신의 문법 이 느슨 하고 유연 하 며 문법 에 엄격하게 국한 되 지 않 았 다.그래서 프로필 을 만 드 는 데 더 적합 합 니 다. 예 를 들 어:
server:
  port: 8081

이 간단 한 설정 은 xml 에서 다음 과 같은 설정 이 필요 합 니 다.

    8081    


YAML 기본 문법
YAML 의 기본 문법 은 K: (빈 칸) v: 한 무더기 의 키 값 이 맞 음 을 나타 낸다.위 층 에 오른쪽 빈 칸 두 자 리 를 설정 해 야 합 니 다. 예 를 들 어 다음 과 같 습 니 다.
server:
    port: 8081
    path: /demo

주의해 야 할 것 은 YAML 에서 도 대소 문자 가 민감 하 니 절대 틀 리 지 마 세 요.
일반 값, 대상, 맵 과 배열
YAML 에서 더 많은 유형의 데 이 터 를 지원 하 는데 주로 일반 수치 (숫자, 문자열, 불 형식 등 일반적인 기본 형식 포함) 로 나 뉜 다.대상 과 맵 유형 (복잡 한 대상 유형 포함);그리고 배열 형식 (Set, List 등 포함).YAML 에서 다양한 유형의 문법 을 살 펴 보 겠 습 니 다.
1. 일반 유형 값
YAML 파일 에서 K: (빈 칸) v 형식 으로 직접 작성 할 수 있 습 니 다. 그러나 주의해 야 할 것 은 문자열 형식 값 입 니 다. Yaml 에서 문자열 의 값 은 다른 값 과 마찬가지 로 '' 또는 '수식' 을 추가 할 필요 가 없습니다. Yaml 에 '(작은 따옴표) 를 추가 하면 작은 따옴표 범위 내 에 있 는 문자열 을 나타 내 는 특수 문 자 는 전의 할 필요 가 없습니다.원래 의 기호 적 의미 에 따라 출력 합 니 다. 예 를 들 어:
name: "zhangsan 
lisi"

출력 결과: zhangsan 줄 바 꾸 기 lisi
'(작은 따옴표) 를 추가 하면 현재 작은 따옴표 에 있 는 문자열 의 모든 특수 문 자 를 전의 하여 일반적인 문자열 로 출력 합 니 다. 예 를 들 어:
name: 'zhangsan 
lisi'

출력 결과: zhangsan lisi
2. 대상 유형 과 맵 유형
Yml 에서 대상 유형 과 Map 유형의 쓰기 방법 은 모두 같 습 니 다. 등급 은 현재 속성 이 있 는 등급 을 대표 하고 모든 속성의 key 는 Yml 의 key 입 니 다. 예 를 들 어:
demo:
  lastName: zhangsan        
  age: 20 

demo 는 하나의 Map 일 수도 있 고 lastName 과 age 의 key 를 포함 할 수도 있 으 며 하나의 대상 인 스 턴 스 일 수도 있 습 니 다. lastName 과 age 라 는 속성 을 포함 합 니 다.
3. 배열 (Set, List) 유형
Yml 에 서 는 배열 형식의 값 에 대해 두 가지 지원 하 는 쓰기 가 있 습 니 다. 첫 번 째 쓰기 방법 은 각 값 이 배열 의 값 에 대응 하 는 것 입 니 다. key 가 없 으 면 - 대체 로 변 합 니 다. 다음 과 같 습 니 다.
pets:
 ‐ cat
 ‐ dog
 ‐ pig

두 번 째 쓰기 법칙 은 Yml 가 이러한 배열 유형 에 대한 최적화 쓰기 입 니 다. 값 을 한 줄 에 쓰 는 것 을 지원 합 니 다. 한 배열 의 값 을 대표 하고 [] 를 사용 하여 소 포 를 합 니 다. 다음 과 같 습 니 다.
pets: [cat,dog,pig]

자동 주입 프로필
Yml 의 기본 문법 을 알 게 된 후에 저 희 는 SpringBoot 의 설정 파일 을 자동 으로 주입 하여 저희 의 설정 파 라 메 터 를 읽 습 니 다. SpringBoot 에서 테스트 파일 을 해당 하 는 실체 클래스 Bean 으로 작성 하여 Bean 을 Spring 에 연결 하고 클래스 에 @ ConfigurationProperties 주 해 를 표시 할 수 있 습 니 다. 이 주 해 를 추가 하면,SpringBoot 는 설정 파일 의 모든 속성의 값 을 이 Bean 에 표시 합 니 다. ConfigurationProperties 주석 에 prefix 매개 변 수 를 입력 할 수 있 습 니 다. 설정 파일 의 어느 부분 을 현재 Bean 과 일치 하 게 주입 하면 설정 파일 의 값 을 실체 Bean 에 주입 할 수 있 습 니 다. 예 는 다음 과 같 습 니 다.
person:
    lastName: hello
    age: 18
    boss: false
    birth: 2017/12/12
    maps: {k1: v1,k2: 12}
    lists:
      ‐ lisi
      ‐ zhaoliu
    dog:
      name:   
      age: 12

대응 하 는 실체 Bean 은:
/**
 *                 ,        
 * @ConfigurationProperties:  SpringBoot                        ,   application.yml/application.properties;
 *      prefix = "person":       key                
 *       Bean       ,          @ConfigurationProperties          ;
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map maps;
    private List lists;
    private Dog dog;
}

이 기능 을 사용 하면 설정 파일 프로세서 의 의존 도 를 추가 할 수 있 습 니 다. 나중에 설정 파일 을 작성 할 때 속성 알림 이 있 습 니 다. 현재 설정 파일 과 관련 된 실체 Bean 을 자동 으로 찾 아 줍 니 다. pom 좌 표 는 다음 과 같 습 니 다.

        
    org.springframework.boot            
    spring‐boot‐configuration‐processor            
    true            


대응 하 는 설정 을 가 져 올 곳 에서 B 이 실체 Bean 을 자동 으로 주입 하면 됩 니 다.
@ Value 획득 값 과 @ ConfigurationProperties 획득 값 비교 사용 하기
마찬가지 로 SpringBoot 에서 우 리 는 전통 적 인 방식 인 @ Value 주해 방식 을 통 해 설정 파일 의 모든 속성 을 지정 한 필드 에 단독으로 주입 할 수 있 습 니 다. @ Value 를 사용 하 는 것 과 @ ConfigurationProperties 방식 으로 설정 파일 을 주입 하 는 것 은 어떤 차이 가 있 습 니까?우 리 는 두 가지 방식 의 차 이 를 제한 적 으로 표를 열거 한 것 으로 참고 로 표 는 다음 과 같다.
@ConfigurationProperties
@Value
기능.
설정 파일 의 속성 을 일괄 주입 합 니 다.
하나하나 지정 하 다
느슨 한 귀속 (느슨 한 문법)
지지 하 다.
지지 하지 않 음
SpEL 문법
지지 하지 않 음
지지 하 다.
JSR 303 데이터 검증
지지 하 다.
지지 하지 않 음
복잡 유형 패키지
지지 하 다.
지지 하지 않 음
앞에서 우 리 는 @ ConfigurationProperties 를 통 해 application. yml 의 설정 정 보 를 읽 었 습 니 다. 그러면 우 리 는 다른 프로필 을 읽 어서 해당 하 는 설정 bean 에 불 러 올 수 있 습 니까?SpringBoot 에서 @ PropertySource 의 설명 을 제공 합 니 다. 예 를 들 어 불 러 올 프로필 을 지정 할 수 있 습 니 다.
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
}

이렇게 하면 다른 프로필 을 지정 하여 대응 하 는 설정 실체 에 불 러 올 수 있 습 니 다.
ImportResource
저 희 는 Spring 프로 그래 밍 을 사용 할 때 xml 설정 방식 으로 대응 하 는 bean 인 스 턴 스 를 설정 하 는 것 을 좋아 합 니 다. SpringBoot 에 서 는 @ ImportResource 주 해 를 통 해 해당 하 는 xml 설정 파일 을 가 져 와 서 특정한 설정 클래스 에 설정 하면 xml 설정 파일 의 인 스 턴 스 를 등록 할 수 있 습 니 다. 예 를 들 어 저 희 는 지금 xml 설정 파일 을 만 들 고 있 습 니 다.


    


그리고 @ ImportResource 를 사용 하여 xml 프로필 을 가 져 옵 니 다:
//  Spring         
@ImportResource(locations = {"classpath:beans.xml"})

그리고 Spring 주해 구동 개발 에 익숙 한 사람 은 Spring 4. x 버 전에 서 Spring 은 전체 주해 식 설명 Bean 설정 을 지원 합 니 다. 주해 식 설명 Bean 을 완성 하려 면 xml 설정 파일 대신 @ Configuration 이 필요 합 니 다. 설정 류 에서 등록 해 야 할 Bean 은 @ Bean 을 사용 하여 구성 요 소 를 Spring 에 추가 하면 xml 설정 과 같은 작업 을 할 수 있 습 니 다.예 를 들 면:
/**
 * @Configuration:           ;        Spring    
 *
              
 *
 */
@Configuration
public class MyAppConfig {
    //             ;          id     
    @Bean
    public HelloService helloService02(){
        System.out.println(" Spring   HelloService  ...");
        return new HelloService();
    }
}

다 중 프로필 파일 설정
우 리 는 일상적인 개발 과정 에서 여러 환경 에서 여러 개의 설정 을 사용 해 야 하 는 장면 을 만 날 수 있 습 니 다. 이때 우 리 는 여러 개의 프로필 을 설정 합 니 다. 즉,
application - {profile}. properties / yml 파일 입 니 다. yml 에 서 는 여러 개의 문서 블록 을 지원 합 니 다. 즉, 하나의 yml 파일 에 여러 개의 profflee 환경 설정 을 설정 할 수 있 습 니 다.
server:
  port: 8081
spring:
  profiles:
    active: prod

server:
  port: 8083
spring:
  profiles: dev

server:
  port: 8084
spring:
  profiles: prod  #        

사용 도 간단 합 니 다. 다음 과 같은 몇 가지 방식 으로 기본 활성 화 된 환경 을 지정 할 수 있 습 니 다.
1. 설정 파일 에 지정
설정 파일 에서 지정 할 수 있 습 니 다.
spring.profiles.active=dev

2. 자바 시작 명령 파라미터 지정
java -jar spring-boot-config.jar --spring.profiles.active=dev;

3. jvm 가상 컴퓨터 시작 매개 변 수 를 설정 하여 기본 매개 변 수 를 지정 합 니 다.
-Dspring.profiles.active=dev

기본 로드 프로필
SpringBoot 에 서 는 기본적으로 프로젝트 의 application. properties 나 application. yml 파일 을 Spring boot 의 기본 설정 파일 로 검색 합 니 다. SpringBoot 에 서 는 기본 값 으로 다음 네 곳 에서 주 설정 파일 을 불 러 옵 니 다. 우선 순 위 는 높 은 곳 에서 낮은 곳 으로 다음 과 같 습 니 다.
–file:./config/       ##          config  
–file:./             ##       
–classpath:/config/   ##      config    
–classpath:/          ##           (  jar )

여기 서 주의해 야 할 것 은 SpringBoot 기본 로드 메커니즘 은 높 은 우선 순위 에서 설정 을 찾 습 니 다. 여러 파일 에 같은 설정 이 있 고 설정 값 이 다 르 면 SpringBoot 는 마지막 설정 에 대응 하 는 값 을 찾 지 않 고 첫 번 째 로 찾 은 값 을 위주 로 합 니 다. 즉, 높 은 우선 순위 가 낮은 우선 순위 의 설정 을 덮어 씁 니 다.물론 SpringBoot 의 기본 설정 파일 을 불 러 오 는 메커니즘 을 제외 하고 jar 를 시작 하 는 자바 명령 파라미터 에 spring. config. location 파 라 메 터 를 추가 하여 기본 설정 파일 의 위 치 를 지정 할 수 있 습 니 다. 명령 은 다음 과 같 습 니 다.
java -jar spring-boot-config.jar  --spring.config.location=G:/application.properties

외부 화 프로필 로드 순서
SpringBoot 는 우리 가 지정 한 외부 프로필 외 에 도 외부 프로필 을 불 러 오 는 다양한 정책 을 지원 합 니 다. 우선 순위 에 따라 높 은 것 부터 낮은 것 까지 정렬 합 니 다. 다음 과 같 습 니 다.
명령 행 인자
우리 가 필요 로 하 는 설정 항목 을 jar 를 시작 할 때 매개 변 수 를 사용 하여 전달 합 니 다. 예 를 들 어:
java -jar spring-boot-Config.jar --server.port=8087 --server.context-path=/abc

시스템 속성 과 환경 변수
System. getProperties () 에서 시스템 속성 에 설 정 된 인 자 를 가 져 올 수도 있 고 운영 체제 자체 가 설정 한 환경 변수 에서 가 져 올 수도 있 습 니 다.
프로필 이 있 는 프로필
jar 패키지 밖의 application - {profile}. properties 또는 application. yml (spring. profile 포함) 설정 파일 에서 필요 한 설정 파 라 메 터 를 우선 읽 습 니 다. jar 패키지 내부 의 application - {profile}. properties 또는 application. yml (spring. profile 포함) 설정 파일 에서 설정 파 라 메 터 를 불 러 오지 않 으 면 jar 패키지 내부 의 application - {profile}. properties 또는 application. yml (spring. profile 포함) 설정 파일 에서 설정 파 라 메 터 를 불 러 옵 니 다.
프로필 없 는 프로필
jar 패키지 밖의 application. properties 나 application. yml (spring. profile 없 음) 프로필 에서 필요 한 설정 파 라 메 터 를 우선 읽 습 니 다. jar 패키지 내부 의 application. properties 나 application. yml (spring. profile 없 음) 설정 파일 에서 배치 파 라 메 터 를 불 러 옵 니 다.
@PropertySource
@ Configuration 주 해 를 포함 하 는 클래스 의 @ PropertySource 주해 가 지정 한 인자
SpringApplication. setDefaultProperties 지정
마지막 으로 SpringBoot 는 SpringApplication. setDefaultProperties 설정 을 통 해 기본 매개 변 수 를 설정 매개 변수 로 불 러 옵 니 다.

좋은 웹페이지 즐겨찾기