springBoot的配置文件

目录

配置文件的格式 

1. 配置项的分类和中文支持

2.  properties 配置文件

读取配置文件

优缺点分析

3. yml 配置文件 

读取配置文件

优缺点分析:

 4. 多个配置文件

 5. properties 和 yml 的对比


在 springBoot 中很多重要的数据是需要通过配置文件进行配置的。

例如:项目启动的端口号,数据库的连接信息等。 

配置文件的格式 

在 springBoot 中配置文件有两种格式:一种为 properties,一种为 yml (yaml); 

首先 properties 和 yml 配置文件是可以同时存在于项目中的。但如果在此项目中,这两个配置文件的某一个配置项是相同的时候,会以 properties 为主,也就是 properties 文件的优先级更高,但也会执行 yml 文件中的配置项;(通常情况下,也只会使用一个配置文件) 

1. 配置项的分类和中文支持

 在配置文件中,配置项一般有两种:

 1. 系统配置项:项目端口号...

 2. 用户自定义配置项:通过用户自己定于;

一般默认配置文件不支持中文的,需自行设置,在settings文件中对项目(一般需要针对此项目和新项目的两个settings都修改) 的encoding 都改为 UTF-8;

springBoot的配置文件_第1张图片 

2.  properties 配置文件

1. properties 配置文件是 sprinBoot 项目的默认配置文件,以 key=value 的格式进行配置;

# 配置项目的端口号
server.port=8080
# 数据库的配置项
spring.datasource.url=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx

class=hello

读取配置文件

读取配置文件采取如下格式:

    @Value("${class}")      // "${}"
    public String classR;

 表示读取配置文件中 key 为 class  的值;

优缺点分析

1. 它是系统默认的配置文件;

2. properties 配置项的优先级比 yml 高;

3. 写法简单,不容易出错;

4. 但是写法有些冗余,例如上述数据库的配置中,spring.datasource重复写了三次,于是就引出了 yml;

3. yml 配置文件 

yml的基本语法是:key: value ,需要注意的是 key 和 value 之间通过 :+空格 来间隔;空格不可省略!!!

且取代 spring 和 url 之间 . 的是换行缩进;

~ 表示 null;

spring:
 datasource:
 url: xxx
 username: xxx
 password: xxx

读取配置文件

读取方式跟 properties 的方式是一样的;

在 yml 配置文件还可以配置对象(注意要重写 setter 方法,因为要从配置文件中去获取对应的数值,使用 setter 方法赋值给当前的 Bean 对象),使用注解 @ConfigurationProperties("类名")从配置文件中获取

springBoot的配置文件_第2张图片

@ConfigurationProperties("student")        // 从yml配置文件中获取类
@Component
@Setter     // lombok
@ToString   // lombok
public class StudentComponent {
    public int id;      // 属性名要和配置文件中的配置项相对应
    public String name;
    public int age;
}
@Controller             // springBoot 不再需要像 spring 一样要在配置文件中说明了哪个路径下需要存入Bean,可以理解为扫描路径约定为启动类的路径下
@ResponseBody           // 加在类上,表示当前类中的所有方法返回的都是非静态页面的数据     -> 返回的是数据而不是页面
public class TestController {

    @Value("${mystr1}")
    public String mystr1;

    @Value("${mystr2}")
    public String mystr2;

    @Value("${mystr3}")
    public String mystr3;

    @Value("${student.name}")    // 从配置文件中读取对应类的属性
    public String name;

    @Autowired             // 从容器中读取对象
    private StudentComponent studentComponent;

    @PostConstruct      // 初始化方法
    public void  doPostConstruct(){
        System.out.println("-----------------------");
        System.out.println(mystr1);
        System.out.println(mystr2);
        System.out.println(mystr3);
        System.out.println("-----------------------");
        System.out.println(name);
        System.out.println(studentComponent);
    }

}

springBoot的配置文件_第3张图片

也可以配置集合,使用到的注解和配置对象一样:

dbtypes: {name: [str1,str2,str3]}
@Component
@ConfigurationProperties("dbtypes")   // 从配置文件中获取对应集合
@Data   // lombok
public class ListComponent {
    private List name;
}
@Controller             
@ResponseBody           
public class TestController {

   @Autowired
    private ListComponent listComponent;

    @PostConstruct      // 初始化方法
    public void  doPostConstruct(){
        System.out.println(listComponent.getName());
    }

}

优缺点分析:

1. yml 格式就没有那么冗余了,可读性也更高;

2. yml支持更多种编程语言;

3. yml 支持的类型更多,还可以读取对象;

4. 但是格式需要多注意,以免出错;

 4. 多个配置文件

在正常的开发环境中,会分为开发,测试,生产等多个环境,此时多个环境下,项目的一些 配置是不一样的,比如是端口号可能是不一致的,那么此时就需要到多个配置文件,不同的环境下对应一个配置文件,还需要一个总配置文件,写不同环境下相同的配置。那么此时就可以通过 总的配置文件来指定要执行哪个环境下的配置问价,不管执行哪个环境下的配置文件,总配置文件都会执行。

配置文件规则:

 1. 必须有主配置文件,主配置文件名必须为 application.yml(properties);

 2. 不同平台的配置文件,每个平台拥有一个配置文件 ,配置文件名要求为 application-xxx.后缀;

springBoot的配置文件_第4张图片

对于要执行哪个配置文件,通过在主配置文件中执行 ( action中的数值是 xxx )

spring:
  profiles:
    active: test    

 此时执行的就是 application-test 配置文件和主配置文件。

 5. properties 和 yml 的对比

1. 格式上:properties 是以 key=value 的形式配置的键值类型,而 yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换行缩进的方式配置,key 和 value 之间使用 (:+ 空格)的方式!!!
2. properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题;
3. yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,也支持更多的数据类型;

更多的系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html 

你可能感兴趣的:(JavaEE进阶,spring,boot,后端,java)