Spring Boot 核心配置

Spring Boot配置文件分类

application.properties或者application.yml(application.yaml)进行配置

application.properties

         语法结构 :

                key=value server.port=8081

application.yml

                  语法结构 :key:空格 value (冒号后面必须要有空格)

                 server: port: 8081

小结:

SpringBoot提供了2种配置文件类型:

properteis和yml/yaml 默认配置文件名称:application

在同一级目录入如果三类文件共存,优先级为:properties > yml > yaml

YAML概述

YAML全称是 YAML Ain't Markup Language 。

YAML是一种直观的能够被电脑识别的的数据数据序列化 格式, 并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比 如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。

YML文件是以数据为核心的,比传统的xml方式更加简 洁。 YAML文件的扩展名可以使用.yml或者.yaml。

三者语法比较:

 properties: 
    server.port=8080
    server.address=127.0.0.1
 xml: 
    <server> 
    <port>8080</port> 
    <address>127.0.0.1</address> 
    </server> 
yml: 
server: 
   port: 8080 
   address: 127.0.0.1

YAML基础语法

1. 大小写敏感

2. 数据值前边必须有空格,作为分隔符

3. 使用缩进表示层级关系

4. 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混 乱)。

5. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

6. "#"表示注释,从这个字符一直到行尾,都会被解析器忽略。

YAML:数据格式

字面量:普通的值 [ 数字,布尔值,字符串 ]

boolean: TRUE               #TRUE,true,True,FALSE,false,False均可
float: 3.14                 #6.8523015e+5 #支持科学计数法
int: 123                    #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
string: HelloWorld          #字符串可以直接书写

数组:一组按次序排列的值( List、set )

address:
   - beijing
   - shanghai
 # 行内写法
commpany: [阿里巴巴,华为,腾讯,字节跳动]

对象、Map(键值对)

person:
  name: wangzhuo
 # 行内写法
person: {name: wangzhuo}
 #对象数组格式一
users:
- name: Tom
  age: 4
- name: Jerry
  age: 5
 #对象数组格式二
users: 
-
   name: Tom
   age: 4
-
   name: Jerry
   age: 5 
#对象数组缩略格式
users2: [ { name:Tom,age:4 },{ name:Jerry,age:5 } ]

YAML:参数引用

 name: wangzhuo
 person:
   name: xuelaoshi 
   pet: ${name}    
# 引用上边定义的name值
 name: xuls${random.uuid} # 配置文件占位符,随机uuid
 name: ${person.name}_真帅

YAML:小结

1) 配置文件类型

          properties:和以前一样 (设置文件的语言编码UTF-8)

        yml/yaml:注意空格

2) yaml:简洁,以数据为核心

基本语法

   大小写敏感

   数据值前边必须有空格,

    作为分隔符 使用空格缩进表示层级关系,

    相同缩进表示同一级

数据格式

      对象

      数组: 使用 " - "表示数组每个元素

      纯量

参数引用 ${key}

读取配置内容

yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!

支持方式:

           逐个注入:@Value

           批量注入:1.@ConfigurationProperties

                             2.Environment类

逐个注入演示

@Component //注册bean
 public class Dog {
 @Value("阿黄")
 private String name;
 @Value("18")
 private Integer age;
 }

加载指定的配置文件@PropertySource :加载指定的配置文件;

我们去在resources目录下新建一个dog.yml文件

name: 阿黄
age: 18 
@PropertySource(value = "classpath:dog.yml")
 @Component //注册bean
 public class Dog{
 @Value("${name}")
 private String name;
 @Value("${age}")
 private Integer age; 
}

批量注入方式

编写一个复杂一点的实体类:Person 类

@Component //注册bean到容器中
public class Person {
 private String name;
 private integer age;
 private boolean marry;
 private Date birth;
 private Map<String,Object> maps;
 private List<Object> lists;
 private Dog dog;
 }
 //有参无参构造、get、set方法、toString()方法 

编写yaml文件内容

person1:
 name: wangls
 age: 18
 marry: true
 birth: 1990/10/19
 maps: {k1: v1,k2: v2}
 lists:- code- bodybuilding- music
 dog:
 name: summer
 age: 1

将数据注入到我们的类中

/*
 @ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
 @Component //注册bean
 @ConfigurationProperties(prefix = "person1")
public class Person {
 private String name;
 private Integer age;
 private Boolean happy;
 private Date birth;
 private Map<String,Object> maps;
 private List<Object> lists;
 private Dog dog;
 }

如果编写完配置文件有红色提示,则可以添加坐标隐藏

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-configuration-processor</artifactId>
 <optional>true</optional>
 </dependency> 

批量注入方式2

直接在测试类中装配开发模式类辅助获取key对应value数据

@Autowired
 private Environment env;
 @Test
 public void test(){ 
System.out.println(env.getProperty("person1.name"));
 System.out.println(env.getProperty("person1.age"));
 System.out.println(env.getProperty("person1.dog.name"));
 System.out.println(env.getProperty("person1.lists[0]"));    
}

JSR303数据校验

JSR303校验注解的使用步骤

1.添加依赖,导入spring-boot-starter-validation启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
 </dependency>

2.在实体类需要校验的成员字段(Field)上,添加校验注解。

 @Component  //注册bean到容器中
//@ConfigurationProperties(prefix = "dog")
 //@Validated
 public class Dog {
    @NotNull(message = "狗名不能为空")
    private String name;
    @NotNull(message = "狗命不能为空")
    @Max(value = 15,message = "狗命拿来")
    private Integer age;
    @Min(value = -1,message = "狗还是个细胞")
    private Integer length;
    @Email(message = "邮箱必须合法")
    private String email;
 }

3.在Controller控制器的校验参数前,使用@Valid注解开启校验,使用BindingResult 绑定校验结果

 @RequestMapping("/validationDemo")
    public String validationDemo(@Valid Dog dog, BindingResult result){
        //得到所有错误信息计数
        int errorCount = result.getErrorCount();
        //错误数大于0
        if (errorCount>0){
            //得到所有错误
            List<FieldError> fieldErrors = result.getFieldErrors();
            //迭代错误
            for (FieldError fieldError:fieldErrors) {
                //错误信息
                System.out.println( "属性:{},"+fieldError.getField()+"传来的值是:
{}"+fieldError.getRejectedValue()+",出错的提示消息:
{}"+fieldError.getDefaultMessage());
            }
            return "数据不合法";
        }else{
            return "数据合法";
        }
    }

JSR303校验注解的分类

值校验:

 // 被注解的元素必须为null
  @Null(message = "必须为null") 
  
  // 被注解的元素必须不为null
  @NotNull(message = "必须不为null") 
  
// 校验注解的元素值不为空(不为null、去除首位空格后长度为0),类型为String
 @NotBlank(message = "必须不为空") 
// 校验注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0),类型为CharSequence、
Collection、Map、Array
 @NotEmpty(message = "必须不为null且不为空") 
// 被注解的元素必须为true,并且类型为boolean
 @AssertTrue(message = "必须为true") 
// 被注解的元素必须为false,并且类型为boolean
 @AssertFalse(message = "必须为false")
// 被注解的元素其值必须大于等于最小值,并且类型为int,long,float,double
 @Min(value = 18, message = "必须大于等于18")
 // 被注解的元素其值必须小于等于最小值,并且类型为int,long,float,double
 @Max(value = 18, message = "必须小于等于18") 
// 校验注解的元素值大于等于@DecimalMin指定的value值,并且类型为BigDecimal
 @DecimalMin(value = "150", message = "必须大于等于150") 
// 校验注解的元素值小于等于@DecimalMax指定的value值 ,并且类型为BigDecimal
 @DecimalMax(value = "300", message = "必须大于等于300")
 // 校验注解的元素值在最小值和最大值之间,并且类型为BigDecimal,BigInteger,CharSequence,
byte,short,int,long。
@Range(max = 80, min = 18, message = "必须大于等于18或小于等于80") 
// 被注解的元素必须为过去的一个时间,并且类型为java.util.Date
 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Past(message = "必须为过去的时
间")
 // 被注解的元素必须为未来的一个时间,并且类型为java.util.Date
 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Future(message = "必须为未来的时
间")
// 校验注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
@Digits(integer=3,fraction = 2,message = "整数位上限为3位,小数位上限为2位")
 // 被注解的元素必须符合指定的正则表达式,并且类型为String
 @Pattern(regexp = "\\d{11}",message = "必须为数字,并且长度为11")
 // 校验注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式,类型为String
 @Email(message = "必须是邮箱")
/ 被注解的元素的长度必须在指定范围内,并且类型为String,Array,List,Map
 @Size(max = 11, min = 7, message = "长度必须大于等于7或小于等于11")
 // 校验注解的元素值长度在min和max区间内 ,并且类型为String
 @Length(max = 11, min = 7, message = "长度必须大于等于7或小于等于11")

Controller统一异常处理

@ControllerAdvice:统一为Controller进行"增强"

@ExceptionHandler : 异常处理

import org.springframework.validation.BindException;
 import org.springframework.web.bind.annotation.*;
 @ControllerAdvice
 public class BindExceptionUtilAdvice {
 // 验证参数未使用@RequestBody注解
@ExceptionHandler(BindException.class)
 @ResponseBody//选择添加
public String handlerBindException(BindException ex, HttpServletRequest 
request){
 return "全局异常处理器成功"; // 跳转至统一提示错误信息的视图
 }
 }

多环境切换profile

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。 其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。 profile功能就是来进行动态配置切换的;

命名语法:

例如:application-环境简称.properties/yml

application-dev.properties/yml 开发环境

application-test.properties/yml 测试环境

application-pro.properties/yml 生产环境

1) profile配置方式

      多profile文件方式

2) profile激活方式

配置文件 :

spring:

     profiles:

           active:  环境简称

虚拟机参数 :在VM options 指定:-Dspring.profiles.active=dev

命令行参数:java –jar xxx.jar --spring.profiles.active=de

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值