Spring Boot 프로필 상세 설명(소결)

14495 단어 SpringBoot프로필
Spring Boot 는 properties 파일 과 yml 파일 두 가지 상용 프로필 을 제공 합 니 다.스프링 부 트 자동 설정 의 기본 값 을 수정 하 는 역할 을 합 니 다.properties 파일 에 비해 yml 파일 은 젊 고 구덩이 도 많 습 니 다.소 하 를 패배 시 켰 다 고 할 수 있 습 니 다.yml 은 빈 칸 을 통 해 등급 관 계 를 확인 하 는 것 은 파일 구조 와 뚜렷 하지만 보 잘 것 없 는 빈 칸 으로 인해 등급 관 계 를 파괴 할 수 있 습 니 다.이 장 에 서 는 yml 의 문법 과 설정 파일 에서 값 을 추출 하 는 데 중점 을 두 고 있 습 니 다.뭘 기다 리 고 있 는 지 빨리 와 서 공부 해라!
기술:Yml,properties 문법,ConfigurationProperties 와 Value 주해 의 사용,설정 파일 자리 차지 문자 의 사용
설명:이 장 에 서 는 Yml 의 문법 과 ConfigurationProperties 주해 의 사용 을 중점적으로 소개 합 니 다.테스트 코드 와 전체 코드 는 github 로 이동 하 십시오.좋아 하 는 친 구 는 star 를 주문 할 수 있 습 니 다.
원본 코드:https://github.com/ITDragonBlog/daydayup/tree/master/SpringBoot/spring-boot-yml
글 디 렉 터 리 구조:

1.YAML 소개
yml 은 YAML(YAML Ain't Markup Language)언어의 파일 로,데이터 중심 으로 json,xml 등 보다 프로필 로 적합 합 니 다.
yml 은 xml 에 비해 구조 화 된 코드 가 적어 서 데 이 터 를 더욱 직접적 이 고 일목요연 하 게 한다.
yml 이랑 json 은 요?좋 은 사람 도 나 쁜 사람 도 없 으 니,적당 한 것 이 가장 좋다.yml 의 문법 은 json 보다 우아 하고 주석 이 표준적 이 며 설정 파일 로 적합 합 니 다.json 은 yml 보다 기계 교환 형식 이 강하 고 api 호출 데이터 교환 에 더욱 적합 합 니 다.
1)YAML 문법
빈 칸 의 들 여 쓰기 정도 로 등급 관 계 를 제어 하 다.빈 칸 의 개 수 는 중요 하지 않 습 니 다.왼쪽 빈 칸 이 정렬 되면 같은 등급 으로 간주 합 니 다.빈 칸 대신 tab 를 사용 할 수 없 도록 주의 하 세 요.대소 문자 가 민감 하 다.글자 액면가,대상,배열 세 가지 데이터 구 조 를 지원 하고 복합 구조 도 지원 합 니 다.
글자 값:문자열,불 형식,수치,날짜.문자열 은 기본적으로 인용 부 호 를 추가 하지 않 습 니 다.인용 부 호 는 특수 문 자 를 의미 합 니 다.날짜 형식 지원 yyy/MM/dd HH:mm:ss
대상:키 쌍 으로 구성 되 어 있 으 며,키:(빈 칸)value 와 같은 데이터 로 구성 되 어 있 습 니 다.콜론 뒤의 빈 칸 은 반드시 있어 야 합 니 다.각 그룹의 키 값 은 한 줄 을 차지 하고 들 여 쓰 는 정도 가 일치 해 야 합 니 다.줄 내 쓰기 도 사용 할 수 있 습 니 다.{k1:v1,...kn:vn}
배열:예 를 들 어-(빈 칸)value 의 데이터 로 구성 되 어 있 습 니 다.짧 은 횡선 뒤의 빈 칸 은 반드시 있어 야 합 니 다.각 그룹의 데이터 가 한 줄 을 차지 하고 들 여 쓰 는 정도 가 일치 해 야 합 니 다.줄 내 쓰기 도 사용 할 수 있 습 니 다.[1,2,...n]
복합 구조:위의 세 가지 데이터 구조 임 의 조합
2)YAML 의 활용
Spring Boot 의 전역 프로필 application.yml 을 만 들 고 속성 파 라 메 터 를 설정 합 니 다.주로 문자열,특수 문자 가 있 는 문자열,불 형식,수치,집합,줄 내 집합,줄 내 대상,집합 대상 등 자주 사용 하 는 데이터 형식 이 있 습 니 다.

yaml:
 str:          
 specialStr: "       
" specialStr2: '
' flag: false num: 666 Dnum: 88.88 list: - one - two - two set: [1,2,2,3] map: {k1: v1, k2: v2} positions: - name: ITDragon salary: 15000.00 - name: ITDragonBlog salary: 18888.88
실체 클래스 YamlEntity.java 를 만 들 고 프로필 의 속성 값 을 가 져 옵 니 다.주석@ConfigurationProperties 를 통 해 프로필 의 지정 값 을 가 져 와 실체 클래스 에 주입 합 니 다.그 구체 적 인 테스트 방법 과 획득 치 의 원 리 는 계속 뒤 를 보 세 요!

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * YAML      
 *    :
 *  、       ,  key:(  )value
 *  、                   ,     。
 */
@Component
@ConfigurationProperties(prefix = "yaml")
public class YamlEntity {

  //    ,   ,  ,  
  private String str; //      
  private String specialStr; //        
  private String specialStr2;//        
  private Boolean flag;  //     
  private Integer num;  //   
  private Double dNum;  //   

  //   ,List Set,    :    :-  value,      ,     ;   :[1,2,...n]     
  private List<Object> list; // list     
  private Set<Object> set;  // set      

  // Map    ,    :   :key  value,      ,     ;   :{key: value,....}     
  private Map<String, Object> map; // Map K-V
  private List<Position> positions; //     ,    

  //   getter,setter,toString  
}

3)YML 소결
1.문자열 은 따옴표 를 추가 하지 않 고 따옴표 를 추가 하면 특수 문 자 를 출력 할 수 있 습 니 다.따옴표 를 추가 하지 않 거나 추가 하지 않 으 면 특수 문 자 를 의미 합 니 다.
2.배열 유형,짧 은 횡선 뒤에 빈 칸 이 있어 야 합 니 다.대상 유형,콜론 뒤에 빈 칸 이 있어 야 합 니 다.
3.YAML 은 빈 칸 의 들 여 쓰기 정도 로 등급 관 계 를 제어 하지만 빈 칸 대신 tab 키 를 사용 할 수 없고 대소 문자 가 민감 합 니 다.
4.어떻게 프로그래머 를 붕괴 시 킵 니까?yml 파일 에 빈 칸 을 몇 개 추가 합 니 다!(〃>접시<)
2.Properties 안내
properties 파일 은 여러분 이 자주 사용 하 시 는데 여 기 는 간단하게 소개 하 겠 습 니 다.그 문법 구 조 는 키=value 와 같다.중국어 난 장 판 문제 에 주의 하 세 요.ASCII 로 번 호 를 바 꿔 야 합 니 다.구체 적 으로 다음 과 같다.

userinfo.account=itdragonBlog
userinfo.age=25
userinfo.active=true
userinfo.created-date=2018/03/31 16:54:30
userinfo.map.k1=v1
userinfo.map.k2=v2
userinfo.list=one,two,three
userinfo.position.name=Java   
userinfo.position.salary=19999.99
프로필 에서 값 을 추출 하여 실체 클래스 에 주입 하 는 것 은 YAML 과 같 습 니 다.

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 *     
 * @ConfigurationProperties :                      (    prefix  )    
 */
@Component
@ConfigurationProperties(prefix = "userinfo")
public class UserInfo {

  private String account;
  private Integer age;
  private Boolean active;
  private Date createdDate;
  private Map<String, Object> map;
  private List<Object> list;
  private Position position;

  //   getter,setter,toString  
}

3.프로필 값 추출
Spring Boot 는 ConfigurationProperties 주 해 를 통 해 설정 파일 에서 속성 을 가 져 옵 니 다.위의 예 에서 보 듯 이 ConfigurationProperties 주 해 는 prefix 설정 을 통 해 대량으로 가 져 올 데 이 터 를 지정 할 수 있 습 니 다.글자 액면가,집합,Map,대상 등 복잡 한 데 이 터 를 가 져 오 는 것 을 지원 합 니 다.ConfigurationProperties 주해 에 또 다른 특종 이 있 나 요?그것 과 Spring 의 Value 주 해 는 또 어떤 차이 가 있 습 니까?이 문제 들 을 가지 고 우 리 는 계속 아래 를 내 려 다 보 았 다.๑•̀ㅂ•́)و✧
1)ConfigurationProperties 와 Value 의 장단 점
ConfigurationProperties 주해 의 장단 점
1.설정 파일 에서 속성 을 대량으로 주입 할 수 있 습 니 다.
2.복잡 한 데이터 형식 가 져 오 는 것 을 지원 합 니 다.
3.속성 명 에 대한 요구 가 비교적 낮 습 니 다.예 를 들 어 user-name,username,userName,USER_NAME 에서 값 을 얻 을 수 있 습 니 다.
4.JAVA 의 JSR 303 데이터 검증 을 지원 합 니 다.
5.강력 한 SpEL 표현 식 을 지원 하지 않 는 것 이 단점 입 니 다.
Value 주해 의 장단 점 은 정반 대 입 니 다.주입 값 만 설정 할 수 있 습 니 다.배열,집합 등 복잡 한 데이터 형식 은 지원 되 지 않 습 니 다.데이터 검증 이 지원 되 지 않 습 니 다.속성 명 일치 에 대해 엄격 한 요구 가 있 습 니 다.가장 큰 특징 은 SpEL 표현 식 을 지원 하여 더욱 풍부 한 기능 을 가지 게 하 는 것 이다.
2)@ConfigurationProperties 상세 설명
첫 번 째 단계:가 져 오기 의존.ConfigurationProperties 주 해 를 사용 하려 면 spring-boot-configuration-processor 를 가 져 와 야 합 니 다.
두 번 째 단계:데이터 설정.application.yml 설정 파일 에서 속성 파 라 메 터 를 설정 합 니 다.접 두 사 는 itdragon 입 니 다.파 라 메 터 는 글자 액면가 와 배열 이 있 습 니 다.복잡 한 속성 을 가 져 오 는 능력 을 지원 하 는 지 판단 합 니 다.
세 번 째 단계:일치 하 는 데이터.클래스 에 ConfigurationProperties 를 추가 하고 prefix 속성 값 을 itdragon 으로 설정 합 니 다.이 종 류 를 Spring 의 IOC 용기 에 추가 합 니 다.
네 번 째 단계:데 이 터 를 검증 합 니 다.데이터 검증 Validated 주 해 를 추가 하고 데이터 검증 을 열 어 데이터 검증 기능 을 지원 하 는 지 테스트 합 니 다.
다섯 번 째 단계:ConfigurationProperties 주석 이 SpEL 표현 식 을 지원 하 는 지 테스트 합 니 다.
가 져 오기 의존:pom.xml 에 spring-boot-configuration-processor 의존 추가

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-configuration-processor</artifactId>
 <optional>true</optional>
</dependency>
설정 데이터:application.yml 설정 속성 파라미터,nick-name 은 일치 하 는 속성의 느슨 함 을 판단 하 는 데 사 용 됩 니 다.nick 로 바 뀌 면name 은 여전히 값 을 가 져 올 수 있 습 니 다.

itdragon:
 nick-name: ITDragonBlog
 email: [email protected]
 iphone: 1234567890
 abilities: [java, sql, html]
 created_date: 2018/03/31 15:27:30
일치 및 검사 데이터:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
/**
 * ConfigurationProperties      
 *    :     spring-boot-configuration-processor;
 *    : ConfigurationProperties         Spring IOC   ;
 *    :  prefix  ,           ;
 *    :        ,      ;
 *
 *    :
 *  、nickName createdDate yml     ,              ,               
 *  、email iphone      JSR303    
 *  、abilities             
 */
@Component
@ConfigurationProperties(prefix = "itdragon")
@Validated
public class ConfigurationPropertiesEntity {

  private String nickName;  //     ,        
  private String email;
//  @Email           //     ,      :BindValidationException: Binding validation errors on itdragon
  private String iphone;
  private List<String> abilities;
  private Date createdDate;  //     ,        

//  @ConfigurationProperties("#{(1+2-3)/4*5}")
  private String operator;  //     ,   SpEL   :not applicable to field

  //   getter,setter,toString  
}

3)@Value 상세 설명
지난 블 로그 에 서 는 밸 류 주해 의 사용 을 소 개 했 는데,여기 에는 간단 한 설명 만 있다.
첫 번 째 단계:속성 에 Value 주 해 를 추가 하고${}설정 파 라 메 터 를 통 해 설정 파일 에 값 을 주입 합 니 다.
두 번 째 단계:${itdragon.cetred 수정date}의 매개 변수 값 을${itdragon.cetredDate}로 변경 하여 분석 에 성공 할 수 있 는 지 테스트 합 니 다.
세 번 째 단계:데이터 검증 Validated 주 해 를 추가 하고 데이터 검증 을 열 어 데이터 검증 기능 을 지원 하 는 지 테스트 합 니 다.
네 번 째 단계:Value 주석 이 SpEL 표현 식 을 지원 하 는 지 테스트 합 니 다.

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
/**
 * Value      
 *    :        Value    
 *    : Value         Spring IOC   ;
 *    :        ,          ;
 *
 *    :
 *  、nickName createdDate yml     ,              ,               
 *  、email iphone      JSR303    
 *  、abilities             
 *
 *   :
 *  、createDate     yml            ,
 *  、   iphone                 ,
 *  、          ,          :IllegalArgumentException: Could not resolve placeholder 'itdragon.abilities' in value "${itdragon.abilities}"
 */
@Component
@Validated
public class ValueEntity {

  @Value("${itdragon.nick-name}")
  private String nickName;
  @Value("${itdragon.email}")
  private String email;
  @Email
  @Value("${itdragon.iphone}")    //     ,        
  private String iphone;
//  @Value("${itdragon.abilities}")   //     ,           
  private List<String> abilities;
//  @Value("${itdragon.ceatredDate}")  //     ,          ,      
  private Date createdDate;

  // Value       :  SpEL   
  @Value("#{(1+2-3)/4*5}")      //     
  private String operator;
  @Value("#{1>2 || 2 <= 3}")     //     
  private Boolean comparison;
  @Value("#{systemProperties['java.version']}") //     :os.name
  private String systemProperties;
  @Value("#{T(java.lang.Math).abs(-18)}") //    
  private String mapExpression;

  //   getter,setter,toString  
}

4)설정 파일 값 추출 소결
1.ConfigurationProperties 주 해 는 대량 주입 을 지원 하고 Value 주 해 는 단일 주입 에 적합 합 니 다.
2.ConfigurationProperties 주 해 는 데이터 검증 을 지원 하지만 Value 주 해 는 지원 되 지 않 습 니 다.
3.ConfigurationProperties 주 해 는 느슨 한 일치 속성 을 지원 하고 Value 주 해 는 속성 과 엄 격 히 일치 해 야 합 니 다.
4.ConfigurationProperties 는 강력 한 SpEL 표현 식 을 지원 하지 않 고 Value 는 지원 합 니 다.
4.설정 파일 자리 차지 문자
자리 표시 자 와 난수 가 비교적 간단 하 므 로 여기에 코드 를 직접 붙 입 니 다.주의해 야 할 것 은:
1.자리 차지 문자 의 값 은 전체 경로 여야 합 니 다.
2.자리 표시 자 는 기본 값 을 설정 합 니 다.콜론 뒤에 빈 칸 이 있 으 면 안 됩 니 다.

ran: #    prefix   random,
 ran-value: ${random.value}
 ran-int: ${random.int}
 ran-long: ${random.long}
 ran-int-num: ${random.int(10)}
 ran-int-range: ${random.int[10,20]}
 ran-placeholder: placeholder_${ran.ran-value:       , key     }

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 *           
 */
@Component
@ConfigurationProperties(prefix = "ran")
public class RandomEntity {

  private String ranValue;  //          
  private Integer ranInt;   //         
  private Long ranLong;    //          
  private Integer ranIntNum; //               
  private Integer ranIntRange;//               
  private String ranPlaceholder;//    

  //   getter,setter,toString  e
}
    :

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootYmlApplicationTests {

  @Autowired
  private UserInfo userInfo;
  @Autowired
  private YamlEntity yamlEntity;
  @Autowired
  private ConfigurationPropertiesEntity configurationPropertiesEntity;
  @Autowired
  private ValueEntity valueEntity;
  @Autowired
  private RandomEntity randomEntity;

  @Test
  public void contextLoads() {
//   System.out.println("YAML Grammar : " + yamlEntity);
//   System.out.println("UserInfo : " + userInfo);
//   System.out.println("ConfigurationProperties Grammar : " + configurationPropertiesEntity);
//   System.out.println("Value Grammar : " + valueEntity);
    System.out.println("Random Grammar : " + randomEntity);
  }

}

총화
1.Spring Boot 는 두 가지 형식의 프로필 을 지원 하 는데 그 중에서 YAML 의 데이터 구 조 는 properties 보다 더욱 뚜렷 합 니 다.
2.YAML 은 프로필 을 작성 하 는 언어 로 매우 간결 하고 강력 합 니 다.
3.YAML 은 빈 칸 에 대한 요구 가 엄격 하고 Tab 키 로 대체 할 수 없습니다.
4.YAML 은 빈 칸 의 들 여 쓰기 정 도 를 통 해 등급 을 정 하고 사칭 뒤에 빈 칸 이 있 으 며 짧 은 횡선 뒤에 빈 칸 이 있 습 니 다.
5.ConfigurationProperties 주 해 는 설정 파일 의 속성 을 대량으로 주입 하 는 데 적합 합 니 다.Value 주 해 는 설정 파일 의 한 항목 을 가 져 오 는 데 적합 합 니 다.
6.ConfigurationProperties 주 해 는 데이터 검증 과 복잡 한 데 이 터 를 지원 하고 Value 주 해 는 SpEL 표현 식 을 지원 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기