美文网首页
spring boot配置(一)

spring boot配置(一)

作者: topshi | 来源:发表于2019-06-25 14:49 被阅读0次

    配置文件

    spring boot使用一个全局配置文件(文件名固定),分两种application.propertiesapplication.yml,用于修改spring boot自动配置的默认值。

    YAML(YAML Ain't Markup Language)

    标记语言:

    • 以前的配置文件大多使用xml文件
    • YAML以数据为中心,比json、xml等更适合做配置文件

    基本语法:

    • k:(空格)v : 表示一对键值对
      以空格的缩进来控制层级关系,只要是左对齐的一列数据都是同一层级的
    server:
      port: 8080
    

    属性和值大小写敏感
    值得写法:

    • 字面量:普通的值(数字、字符串、布尔)
      k: v :字面直接来写;字符串默认不用加上单引号或者双引号;
      "" 双引号:不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。
      name:"zhangsan\n lisi": 输出:zhangsan换行 lisi
      '' 单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据。
      name: 'zhangsan\n lisi':输出:zhangsan \n lisi
    • 对象、Map:
      k: v : 在下一行写对象的属性和值的关系
      对象还是k: v的形式
      friends:
        lastName: zhangsan
        age: 20
      
      行内写法
      friends: {lastName: zhangsan,age: 18}
      
    • 数组(List、Set):用-值表示数组中的元素
      pets:
        - cat
        - dog
        - pig
      
      行内写法
      pets: {cat,dog,pig}
      

    实例:配置文件值注入
    在bean包下创建两个javabean,PersonDog

    • javabean
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
    

    (将配置文件中配置的每个属性值映射到这个组件中)
    @ConfigurationProperties(prefix = "person"):该注解告诉spring boot将本类中的所有属性和配置文件中相关的配置进行绑定;prefix = "person"指定配置文件下哪个标签下面的属性进行一一映射。
    @Component:标注这是一个组件,只有容器中的组件才能使用容器提供的@ConfigurationProperties功能。

    • 配置文件
    person:
      lastName: zhangsan
      age: 18
      boss: false
      birth: 2019/2/1
      maps: {k1: v1,k2: 18}
      lists:
        - lisi
        - lili
      dog:
        name: 小狗
        age: 12
    
    • 配置文件处理器
      IDE提醒添加的依赖,这样在配置文件中编写代码时就有提示了
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    

    @ConfigurationProperties和@Value

    @Value用法:

    public class Person {
        @Value("小明")  //直接赋值
        private String lastName;
        @Value("#{11 * 2}")     //表达式
        private Integer age;
        @Value("${person.boss}")    //从配置文件中获取值
        private Boolean boss;
        private Date birth;
    

    使用@Value需要在javabean中一个一个配置。

    . @ConfigurationProperties @Value
    功能 批量注入配置文件中的属性 一个一个配置
    松散绑定(松散语法) 支持 不支持
    SpEL(表达式) 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型封装 支持 不支持
    • 松散绑定:形如person.last-name,用 - 代替驼峰
    • JSR303数据校验
      @Validated
      public class Person {
          @Email   //指定只能赋Email格式的值
          @Value("${person.lastName}")
          private String lastName;
      
    • 复杂类型封装:@Value无法配置Map、List等复杂类型的属性

    小结:

    • 如果只是要用一个配置文件中的某个值,则用@Value
    • 如果写了个javabean来和配置文件中的属性进行绑定,则用@ConfigurationProperties

    @PropertySource和@ImportResource

    • @PropertySource
      @ConfigurationProperties注解默认使用全局配置文件对JavaBean进行配置,而@PropertySource注解可以指定一个配置文件来为JavaBean配置。
      @PropertySource(value = {"classpath:person.properties"})
      @Component
      @ConfigurationProperties(prefix = "person")
      public class Person {
      

    只支持.properties文件)

    • @ImportResource
      导入spring的配置文件,让配置文件里的内容生效;
      spring boot中没有spring的配置文件,它无法识别我们编写的配置文件,因此需要在主配置类上使用@ImportResource将spring配置文件加载进来
      @ImportResource(locations = {"classpath:beans.xml"})
      @SpringBootApplication
      public class ConfigurationApplication {
      

    spring boot推荐使用全注解的方式添加组件

    • 用配置类代替spring配置文件
    • @Bean将对象添加到容器中
      如下是一个配置类
    /**
     * @Configuration  指明该类是一个配置类,替代了之前spring的配置文件
     * 以前使用<bean></bean>添加组件
     */
    @Configuration
    public class MyAppConfig {
        @Bean   //将方法返回值添加到容器中,默认id是方法名
        public HelloService helloService(){
            return new HelloService();
        }
    }
    

    配置文件的占位符

    person.lastName = 李四${random.int}
    person.age = ${random.int}
    person.boss = false
    person.birth = 2017/12/12
    person.maps.k1 = v1
    person.maps.k2 = 12
    person.lists = lisi,zhaoliu
    person.dog.name = ${person.lastName}_小狗
    person.dog.age = 2
    

    ${}可以用于获取之前配置过的值,如person.dog.name = ${person.lastName}_小狗
    如果没有值,可以指定默认值,如person.dog.name = ${person.lastName:李四}_小狗

    相关文章

      网友评论

          本文标题:spring boot配置(一)

          本文链接:https://www.haomeiwen.com/subject/ieazqctx.html