Spring Boot

二、SpringBoot 配置文件

2018-09-12  本文已影响22人  Class鸣

1、配置文件

配置文件的作用:修改SpringBoot自动配置的默认值;
SpringBoot在底层都给我们自动配置好;

server:
    port:8081
<server>
    <port>8081</port>    
</server>

2、YAML语法

2.1、基本语法
k:(空格)v:表示一对键值(空格必须有);
- 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是一个层级的

server:
    port: 8081
    path: /hello

属性和值也是大小写敏感;

2.2、值的写法

  1. 字面量:普通的值(数字、字符串、布尔)

2. 对象、Map:

k: v:在下一行来写对象的属性和值的关系;注意缩进

friends:
    lastName: zhangsan
    age: 20
friends: {lastName: lisi,age: 15}

3. 数组(List、Set)

pets:
    - cat
    - dog
    - pig
pets: [cat,dog,pig]

3、配置文件值的注入

person:
    lastName: hello
    age: 18
    boss: false
    birth: 2017/12/12
    maps: {k1: v1,k2: 12}
    lists:
        ‐ lisi
        ‐ zhaoliu
    dog:
        name: 小狗
        age: 12
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    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>

3.1、乱码问题

3.2、@Valule 和 @ConfigurationProperties 获取值比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

3.3、配置文件注入值数据校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

    //lastName必须是邮箱格式
    @Email
    private String lastName;

@Component把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>

限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

3.4、@PropertySource&@ImportResource&@Bean

  1. @PropertySource:加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
}
  1. @ImportResource:导入Spring的配置文件,让配置文件里面的内容生效
    Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
    想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
@ImportResource(locations = {"classpath:beans.xml"})

编写Spring的配置文件

<?xml version="1.0" encoding="UTF‐8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring‐beans.xsd">
    <bean id="helloService" class="com.atguigu.springboot.service.HelloService"></bean>
</beans>
  1. SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式
    1. 配置类@Configuration------>Spring配置文件
    2. 使用@Bean给容器中添加组件
      @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
      在配置文件中用<bean><bean/>标签添加组件
@Configuration
public class MyAppConfig {
    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
}

4、配置文件占位符

4.1、随机数

${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

4.2、占位符获取之前配置的值,如果没有可以是用:指定默认值


person.last‐name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15

5、Profile

5.1、多Profile文件

5.2、properties支持多文档块

server:
port: 8081
spring:
profiles:
active: prod
‐‐‐
server:
port: 8083
spring:
profiles: dev
‐‐‐
server:
port: 8084
spring:
profiles: prod 
#指定属于哪个环境

5.3、激活指定profile

  1. 在配置文件中指定 spring.profiles.active=dev
  2. 命令行:
    java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
    可以直接在测试的时候,配置传入命令行参数
  3. 虚拟机参数;
    • Dspring.profiles.active=dev

6、配置文件位置加载

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties


7、外部配置加载顺序

SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会
形成互补配置

  1. 命令行参数
    所有的配置都可以在命令行上进行指定
    java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
    多个配置用空格分开; --配置项=值
  2. 来自java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource配置的random.*属性值
    由jar包外向jar包内进行寻找;
    优先加载带profile
  6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    再来加载不带profile
  8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  10. @Configuration注解类上的@PropertySource
  11. 通过SpringApplication.setDefaultProperties指定的默认属性
    所有支持的配置加载来源;

参考官方文档

上一篇 下一篇

猜你喜欢

热点阅读