zoukankan      html  css  js  c++  java
  • SpringBoot配置文件

    1、springboot配置文件

    SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。

    SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件,其中,application.properties文件是键值对类型的文件,之前一直在使用,所以此处不在对properties文件的格式进行阐述。除了properties文件外,SpringBoot还可以使用yml文件进行配置,下面对yml文件进行讲解。

    SpringBoot使用一个全局的配置文件,配置文件名是固定的;
    •application.properties
    •application.yml

    2、YML语法

        1、基本语法

                    语法: key: (空格)value

                       示例代码:

                      注意:value之前有一个空格

                             以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

                     案例代码:name:  haohao

                     字符串默认不用加上单引号或者双引号;

    ​                 "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

    ​                name: "zhangsan lisi":输出;zhangsan 换行 lisi

    ​ '              ':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

    ​               name: ‘zhangsan lisi’:输出;zhangsan lisi

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

       2、配置对象数据          

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

    person:
      name: 张三
      password: 12

       行内写法:

    person: {name: 张胜男,password:  admin}

    3、数组(List、Set)

      用- 值表示数组中的一个元素

      list:
        - cat
        - dog
        - pig

    行内写法:

      list: [cat,dog,pig]

     4、@Value注入

       @Value("${lastName}")
        private String lastName;
    yml文件
    lastName:
      最后时间

    5、配置文件注入

    person:
      name: 张三
      password: 12
      list:
        - cat
        - dog
        - pig
      dog:
          name: 小花狗
          age:  23
      map:
          name: 张三1
          password: 1222
    

    JavaBean

    /**
      * 将配置文件中配置的每一个属性的值,映射到这个组件中
      * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
      *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
      *
      * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
      *
     */
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
    
        private String name;
        private String password;
        private List<String> list;
        private Dog dog;
        private Map<String,Object> map;
    注意:使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

     我们可以导入文件处理器,以后就有提示了

      <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>

    properties配置文件在idea中默认utf-8可能会乱码

    @Value获取值和@ConfigurationProperties获取值比较

     

    @ConfigurationProperties

    @Value

    功能

    批量注入配置文件中的属性

    一个个指定

    松散绑定(松散语法)

    支持

    不支持

    SpEL

    不支持

    支持

    JSR303数据校验

    支持

    不支持

    复杂类型封装

    支持

    不支持

    配置文件yml还是properties他们都能获取到值;
       如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
       如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

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

    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated
    public class Person {
    
        private String name;
        private String password;
        private List<String> list;
        private Dog dog;
        private Map<String,Object> map;
    
        @Email//lastName必须是邮箱格式
        @Value("${lastName}")
        private String lastName;
    

      当不合法时报错信息

        Property: person.lastName
        Value: 最后时间
        Reason: 不是一个合法的电子邮件地址

    7、@PropertySource&@ImportResource&@Bean

          1、@PropertySource 指定加载配置文件

             JavaBean   

    /**
      * 将配置文件中配置的每一个属性的值,映射到这个组件中
      * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
      *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
      *
      * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
     @PropertySource(value = "classpath:person.properties")指定加载配置文件
      *
     */
    @Component
    @ConfigurationProperties(prefix = "person")
    @PropertySource(value = "classpath:person.properties")
    public class Person {
    
        private String name;
        private String password;
        private List<String> list;
        private Dog dog;
        private Map<String,Object> map;
    
     
        @Value("${lastName}")
        private String lastName;
    person.properties文件

    person.name=zhagnsan
    person.password=admin
    person.list=[1,2,3,4]
    lastName=最后名字

    2、@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效

    Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
    想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

    @ImportResource(locations = {"classpath:beans.xml"})
    导入Spring的配置文件让其生效

    编写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.yehui.service.HelloService"></bean>
    </beans>
    public class HelloService {
    
        public String add(){
            return "add";
        }
    }
        @Autowired
        private HelloService helloService;
        @RequestMapping("/service")
        public String service(){
            return helloService.add();
        }
    @SpringBootApplication
    //导入外部类
    @ImportResource(locations = "classpath:bean.xml")
    public class StartProperties {
        public static void main(String[] args) {
            SpringApplication.run(StartProperties.class);
        }
    }

    SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式
      1、配置类@Configuration------>Spring配置文件
      2、使用@Bean给容器中添加组件

    /**
     * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
     * 在配置文件中用<bean><bean/>标签添加组件
     */
    @Configuration
    public class MyAppConfig {
        
        @Bean
        public HelloService helloService(){
            return  new HelloService();
        }
    }

    8、配置文件占位符

         1、随机数

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

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

    person.name=zhagnsan
    person.password=admin
    person.list=[1,2,3,4]
    lastName=${random.value}
    person.username=${person.name}
    #占位符获取之前配置的值,如果没有原样输出,可以是用:指定默认值
    person.dog.name=${person.hello:hello}

     9、Profile

     1、多Profile文件

    我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
    默认使用application.properties的配置;

    application-dev.properties

    server.port=8082

    application.properties

    #激活使用哪个配置
    spring.profiles.active=dev

    2、yml支持多文档块方式

    spring:
      profiles:
        active: test   #使用哪个环境
    ---
    server:
      port: 8082
    spring:
      profiles:
        dev  #指定哪个环境
    
    ---
    server:
      port: 8083
    spring:
      profiles: test

    3、指定激活

    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

    10、配置文件加载位置

    springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

    –file:./config/

    –file:./

    –classpath:/config/

    –classpath:/

    优先级由高到底,高优先级的配置会覆盖低优先级的配置;

    SpringBoot会从这四个位置全部加载主配置文件;互补配置;

    11、外部配置加载顺序

    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指定的默认属性
    所有支持的配置加载来源;

  • 相关阅读:
    How to function call using 'this' inside forEach loop
    jquery.validate.unobtrusive not working with dynamic injected elements
    Difference between jQuery.extend and jQuery.fn.extend?
    Methods, Computed, and Watchers in Vue.js
    Caution using watchers for objects in Vue
    How to Watch Deep Data Structures in Vue (Arrays and Objects)
    Page: DOMContentLoaded, load, beforeunload, unload
    linux bridge
    linux bridge
    EVE-NG网卡桥接
  • 原文地址:https://www.cnblogs.com/cxyyh/p/10624936.html
Copyright © 2011-2022 走看看