当前位置:   article > 正文

SpringBoot配置文件_springboot指定配置文件

springboot指定配置文件

目录

一、配置文件作用

二、SpringBoot配置文件

三、配置文件的格式 

四、properties配置文件说明 

4.1 properties基本语法 

4.2 读取配置文件

 4.3 properties缺点分析

五、yml配置文件说明

5.1 yml基本语法 

5.2 yml使用进阶 

5.2.1 yml配置不同数据类型及null 

5.2.2 注意事项:value值加单双引号 

5.2.3 配置对象

5.2.4 配置Map

​5.3 yml优缺点


一、配置文件作用

        配置文件主要为了解决硬编码的问题,把可能会改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。

硬编码:硬编码是将数据直接嵌入到程序或其它可执行对象的源代码中,也就是我们常说的“代码写死”。

比如手机字体的大小

        如果采用硬编码的方式,就直接在程序中指定字体大小,所有的用户使用的都是同一个字体大小,但是不同的用户有不同的偏好,我们可以把手机字体的大小放在配置文件中,当程序启动时,读取配置,以用户设置的字体大小来显示。

二、SpringBoot配置文件

        SpringBoot支持并定义了配置文件的格式,也在另一个方面达到了规范其它框架集成到SpringBoot的目的。

很多项目或者框架的配置信息也放在配置文件中,比如:

  • 项目的启动端口
  • 数据库的连接信息
  • 第三方系统的调用密钥等信息
  • 用于发现和定位问题的普通日志和异常日志等

项目的启动端口

SpringBoot内置了Tomcat服务器,默认端口号是8080,但是用户电脑上8080端口号有可能被其它应用程序占用了,所以SpringBoot需要支持让用户自定义端口号。

数据库连接信息

为了更方便简单的访问数据库,出现了一些持久层框架,其实就是对JDBC进行了更深层次的封装,让用户通过几行简单代码就可完成数据库的访问。但是不同的应用程序访问的数据库不同,这些持久层框架就需要支持用户可以自定义配置数据库的连接信息。

2.1 配置文件快速入手

前面讲了Tomcat默认端口号是8080,所以我们程序访问时的端口号也是8080,但是如果8080端口号被其它进行占用了呢?我们可以通过配置文件来修改服务的端口号,SpringBoot在创建看项目时,就已经帮我们创建了配置文件。

修改application.properties文件

server.port = 9090

重新运行程序,观察日志

 显示Tomcat启动端口号为9090

三、配置文件的格式 

SpringBoot配置文件格式有以下三种:

  • application.properties
  • application.yml
  • application.yam

yml为yaml的简写,实际开发中出现频率最高。yml和yaml的使用方式一样,此处只讲解yml文件的使用。

当应用程序启动时,SpringBoot会自动从classpath路径找到并加载 application.properties和application.yml或者application.yaml文件。

特殊说明

  1. .properties和.yml可以并存于一个项目中,当.properties和.yml并存时,两个配置都会加载,如果配置文件内容冲突,则以.properties为主,也就是.properties优先级更高。
  2. 虽然.properties和.yml可以共存,但实际的业务中,我们通常会采用一种统一的配置文件格式,这样可以更好的维护。 

四、properties配置文件说明 

properties是创建SpringBoot项目默认的配置文件。

4.1 properties基本语法 

properties是以键值的形式配置的,key和value之间是以“=”连接的,如:

#配置项目端口号
server.port = 9090
#配置数据库连接信息
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

4.2 读取配置文件

如果在项目中,想要主动的读取配置文件的内容,可以使用@Value注解来实现。@Value注解使用“${}”的格式读取,如下代码所示:

properties配置如下:

demo.key1 = hello,properties
  1. import org.springframework.beans.factory.annotation.Value;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. public class PropertiesController {
  6. @Value("${demo.key1}")
  7. private String key;
  8. @RequestMapping("/key")
  9. public String key() {
  10. return "读取到的值:" + key;
  11. }
  12. }

最终执行结果:

 4.3 properties缺点分析

 properties配置都以key-value的形式配置的,如下图所示:

从上述配置key看出,properties配置文件中会有很多的冗余的信息,比如:

 想要解决这个问题,就可以使用yml配置文件的格式化了。

五、yml配置文件说明

5.1 yml基本语法 

yml是树形结构的配置文件,它的基本语法是key: value。

key和value之间使用英文冒号加空格的方式组成,空格不可省略

基本语法如下:

下面的错误配置是没有空格导致的,发现key是没有高亮显示。

使用yml连接数据库

yml使用示例:

 yml和properties连接数据库的配置对比,发现yml文件没有冗余的配置信息。

5.2 yml使用进阶 

5.2.1 yml配置不同数据类型及null 

  1. import jakarta.annotation.PostConstruct;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.util.StringUtils;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. @RestController
  7. public class YmlController {
  8. @Value("${demo.key1}")
  9. public String key1;
  10. @Value("${demo.key2}")
  11. public String key2;
  12. @Value("${demo.key3}")
  13. public String key3;
  14. @Value("${demo.key4}")
  15. public String key4;
  16. @RequestMapping("/demo")
  17. public String key() {
  18. return "读取到的值:" + key1;
  19. }
  20. @PostConstruct
  21. public void init() {
  22. System.out.println("key1:" + key1);
  23. System.out.println("key2:" + key2);
  24. System.out.println("key3:" + key3);
  25. System.out.println(key3.equals(""));
  26. System.out.println(!StringUtils.hasLength(key3));
  27. System.out.println("key4:" + key4);
  28. System.out.println(key4 == null);
  29. }
  30. }

5.2.2 注意事项:value值加单双引号 

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。

在application.yml中配置如下信息:

读取程序实现代码如下:

  1. import jakarta.annotation.PostConstruct;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. public class YmlController {
  6. @Value("${string.str1}")
  7. public String str1;
  8. @Value("${string.str2}")
  9. public String str2;
  10. @Value("${string.str3}")
  11. public String str3;
  12. @PostConstruct
  13. public void init() {
  14. System.out.println("str1:" + str1);
  15. System.out.println("str2:" + str2);
  16. System.out.println("str3:" + str3);
  17. }
  18. }

 运行结果如下:

从上述结果可以看出:

  • 字符串默认不用加上单引号或者双引号
  • 单引号会转义特殊字符,但其失去特殊功能,始终是一个普通的字符串
  • 双引号不会转移字符串里面的特殊字符,特殊字符会表示本身的含义 

此处的转移理解起来会有些拗口,\n本意表示换行

使用单引号会转义,就是说,\n不再表示换行了。而是表示一个普通的字符串

使用双引号不会转义,\n表示的是它本身的含义,就是换行 

5.2.3 配置对象

这个时候就不能用@Value来读取配置中的对象了,此时要使用另一个注解@ConfigurationProperties来读取,具体实现如下:

  1. @ConfigurationProperties(prefix = "student")
  2. @Component
  3. @Data
  4. public class Student {
  5. private int id;
  6. private String name;
  7. private int age;
  8. }

调用类的实现如下:

  1. @RestController
  2. public class YmlController {
  3. @Autowired
  4. private Student student;
  5. @PostConstruct
  6. public void init() {
  7. System.out.println(student);
  8. }
  9. }

运行结果如下:

 

5.2.4 配置集合

配置文件也可以配置list集合,如下所示:

集合和读取对象一样,也是使用@ConfigurationProperties来读取的,具体实现如下:

  1. @Component
  2. @ConfigurationProperties(prefix = "dbtypes")
  3. @Data
  4. public class DBType {
  5. private List<String> name;
  6. }

访问集合的实现如下:

  1. @RestController
  2. public class YmlController {
  3. @Autowired
  4. private DBType dbType;
  5. @PostConstruct
  6. public void init() {
  7. System.out.println(dbType);
  8. }
  9. }

运行结果如下:

 

5.2.4 配置Map

 Map和读取对象一样,也是使用@ConfigurationProperties来读取的,具体实现如下:

  1. @Component
  2. @ConfigurationProperties(prefix = "maptypes")
  3. @Data
  4. public class MapConfig {
  5. private HashMap<String, String> map;
  6. }

 打印类的实现如下:

  1. @RestController
  2. public class YmlController {
  3. @Autowired
  4. private MapConfig mapConfig;
  5. @PostConstruct
  6. public void init() {
  7. System.out.println(mapConfig);
  8. }
  9. }

运行结果如下:

 5.3 yml优缺点

优点:

  • 可读性高,写法简单,易于理解
  • 支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态
  • 支持更多的编程语言

缺点:

  • 不适合写复杂的配置文件
  • 对格式有较强的要求 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/953650
推荐阅读
相关标签
  

闽ICP备14008679号