当前位置: 首页>编程语言>正文

spring factories 覆盖jar包中的类 springboot配置文件覆盖

概述

SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话, 就可以使用application.properties或者application.yml进行配置

查找配置文件如何覆盖SpringBoot项目的默认配置

springboot配置文件的优先级

配置文件存放位置:

项目根目录下

项目根目录下的/config子目录中

项目的resources目录中

项目的resources下的/config子目录中

优先级从高到低【优先级高的文件会覆盖优先级低的文件中的配置】

项目根目录下的/config子目录中

config/application.properties

config/application.yml

项目根目录下

application.properties

application.yml

项目的resources下的/config子目录中

resources/config/application.properties

resources/config/application.yml

项目的resources目录中

resources/application.properties

resources/application.yml

properties文件

简介

后缀properties的文件是一种属性文件。这种文件以key=value格式存储内容

注意

如果properties文件中含有中文那么需要对idea进行设置【file-settings-Editor-File Encodings】

Properties工具类

Properties工具类,位于java.util包中,该工具类继承自Hashtable<Object,Object>。 通过Properties工具类可以读取.properties类型的配置文件

properties文件写法

#这是一条注释
name=jkw
age=20

读取properties文件的数据

public class PropertiesTest {
    public static void main(String[] args) throws IOException {
        //实例化Properties对象
        Properties prop = new Properties();
        //获取读取properties文件的输入流对象
        InputStream is = PropertiesTest.class.getClassLoader().getResourceAsStream("application.properties");
        //通过给定的输入流对象读取properties文件并解析。
        prop.load(is);
        System.out.println(prop.getProperty("name"));
    }
}

yaml文件

简介

YAML文件的扩展名为.yml或.yaml

基本要求

大小写敏感

使用缩进代表层级关系

相同的部分只出现一次

yml语法中,相同缩进代表同一个级别,只要每个属性前的空格数一样即可

注意

像name: jkw,冒号后面要有一个空格

yml编写数据

#简单数据
name: jkw

#对象数据
# 学生1
student1:
  sex: female
  age: 10
  address: beijing
# 学生2
student2: { sex: female,age: 10,address: beijing }

# 集合数据
# 城市
city1:
  - beijing
  - tianjin
  - shanghai
  - chongqing
city2: [ beijing,tianjin,shanghai,chongqing ]

@Value获取数据

package jkw.test;

import org.springframework.beans.factory.annotation.Value;

public class YmlTest {
    @Value("${name}")
    private static String name;

    @Value("${student1.age}")
    private static String studentAge;

    @Value("${city1[0]}")
    private static String  city10;
    public static void main(String[] args) {
        System.out.println(name);
        System.out.println(studentAge);
        System.out.println(city10);

    }

}

@ConfigurationProperties读取配置文件数据

user:
          id: 10001
          username: shangxuetang
          address:
           - beijing
           - tianjin
           - shanghai
           - chongqing
          grades:
           - subject: math
            score: 100
           - subject: english
            score: 90

            public class Grade {
              private String subject;
              private double score;
              // 省略getter/setter/tostring
            }

            
            @Controller
            @ConfigurationProperties(prefix = "user")
            public class YmlController2 {
              private int id;
              private String username;
              private List<String> address;
              private List<Grade> grades;
            
            
              @RequestMapping("/yml2")
              @ResponseBody
              public String yml2(){
                System.out.println(id);
                System.out.println(username);
                System.out.println(address);
                System.out.println(grades);
                return "hello springboot!";
               }
            
            
              public int getId() {
                return id;
               }
            
            
              public void setId(int id) {
                this.id = id;
               }
            
            
              public String getUsername() {
                return username;
               }
            
            
              public void setUsername(String username) {
                this.username = username;
               }
            
            
              public List<String> getAddress() {
                return address;
               }
            
            
              public void setAddress(List<String> address) {
                this.address = address;
               }
            
            
              public List<Grade> getGrades() {
                return grades;
               }
            
            
              public void setGrades(List<Grade> grades) {
                this.grades = grades;
               }
            }

yaml-占位符

myconfig:
          myport: ${server.port}
          
          @Value("${myconfig.myport}")
          private int port;

          SpringBoot框架提供了一些生成随机数的方法可以在yml文件中使用:
          ${random.value} :生成类似uuid的随机数,没有"-"连接
          ${random.uuid} :生成一个uuid,有短杠连接
          ${random.int} :随机取整型范围内的一个值
          ${random.int(10)}:随机生成一个10以内的数
          ${random.int(100,200)}:随机生成一个100-200 范围以内的数
          ${random.long}:随机取长整型范围内的一个值
          ${random.long(100,200)}:随机生成长整型100-200范围内的一个值

          # 随机生成tomcat端口
          server:
            port: ${random.int(1024,9999)}

bootstrap

SpringBoot中有两种容器对象,分别是bootstrap和application,bootstrap是应用程序的父容器,bootstrap加载优先于applicaton。

bootstrap配置文件主要对bootstrap容器进行配置,application配置文件是对applicaton容器进行配置。

bootstrap配置文件也同样支持properties和yml两种格式,主要用于从外部引入Spring应用程序的配置。

boostrap由父ApplicationContext加载,比applicaton优先加载。

boostrap里面的属性不能被覆盖。


https://www.xamrdz.com/lan/5y81951252.html

相关文章: