Java(一百四十四)SpringBoot读取配置文件

87 阅读3分钟

这里,我们来了解一下SpringBoot的常用配置。

 

一:配置文件类型及位置

SpringBoot的配置文件我们一般使用.yml文件(这个玩意儿有自动缩进,看着比较明显)。Yml文件在默认创建的SpringBoot框架中是没有的。需要我们自己创建。

 

它创建的位置可以有很多个(配置文件可以放在项目根目录、根目录下的config目录、resouce根目录、resource\config目录),这个和PHP框架中的配置文件就不同,PHP的配置文件是在指定的位置。

 

上边我们说了,.yml文件可以在很多位置创建。那必然是有读取先后顺序的。那具体的读取顺序是什么样子呢?我们在四个位置创建四个.yml文件,测试框架的配置文件读取顺序。四个.yml文件存放位置如下图所示:

1.jpg

 

读取顺序结果:

项目根目录下的config目录(8084) => 项目根目录(8082) => resource\config目录(8085)=> resouce根目录(8083)

 

在同级目录下.properties文件的读取优先级要大于.yml文件。

 

二:读取配置文件内容

读取配置文件有两种方式。我们先来尝试第一种

先在resouce根目录下的application.yml中添加如下配置:

server:
   port: 8083
 
 data-source:
   url: https://guanchao.site
   username: camellia
   password: 123456

 

1 :通过注解@ConfigurationProperties读取配置文件

编写一个封装类读取配置文件的信息

该类需要被Spring容器管理

类中的属性与配置文件的属性一致

在类上添加注解@ConfigurationProperties(prefix="属性的前缀")

在\src\main\java\com\example\demo\demos目录下创建DataRecourse.java类文件,代码如下:

package com.example.demo.demos.web;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
 @Component
 @ConfigurationProperties(prefix = "data-source")
 public class DataRecourse {
     private String url;
     private String username;
     private String password;
     public DataRecourse() {}
 
     public String getUrl() {
         return url;
     }
 
     public void setUrl(String url) {
         this.url = url;
     }
 
     public String getUsername() {
         return username;
     }
 
     public void setUsername(String username) {
         this.username = username;
     }
 
     public String getPassword() {
         return password;
     }
 
     public void setPassword(String password) {
         this.password = password;
     }
 
     @Override
     public String toString() {
         return "DataRecourse{" +
                 "url='" + url + ''' +
                 ", username='" + username + ''' +
                 ", password='" + password + ''' +
                 '}';
     }
 }

 

在\src\main\java\com\example\demo\demos目录下创建DataRecourseController.java类文件,代码如下:

package com.example.demo.demos.web;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 @Controller
 public class DataRecourseController {
     @Autowired
     private DataRecourse data;
     @RequestMapping("test")
     public String test(){
         System.out.println("UserController.test,data:"+data);
         return null;
     }
 }

 

启动服务器,访问:http://localhost:8083/test

控制台输出:

UserController.test,data:DataRecourse{url='https://guanchao.site', username='camellia', password='123456'}

 

2 :通过@Value读取配置文件

这里我重新在\src\main\java\com\example\demo\demos目录下创建DataRecourseValue.java类文件,代码如下:

package com.example.demo.demos.web;
 
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 @Component
 public class DataRecourseValue
 {
     @Value("${data-source.url}")
     private String url;
     @Value("${data-source.username}")
     private String username;
     @Value("${data-source.password}")
     private String password;
     public DataRecourseValue() {}
 
     public String getUrl() {
         return url;
     }
 
     public void setUrl(String url) {
         this.url = url;
     }
 
     public String getUsername() {
         return username;
     }
 
     public void setUsername(String username) {
         this.username = username;
     }
 
     public String getPassword() {
         return password;
     }
 
     public void setPassword(String password) {
         this.password = password;
     }
 
     @Override
     public String toString() {
         return "DataRecourse{" +
                 "url='" + url + ''' +
                 ", username='" + username + ''' +
                 ", password='" + password + ''' +
                 '}';
     }
 }

在\src\main\java\com\example\demo\demos目录下DataRecourseController.java文件中新建方法,代码如下:

@Autowired
 private DataRecourseValue dataValue;
 @RequestMapping("testValue")
 public String testValue(){
     System.out.println("UserController.test,data:"+dataValue);
     return null;
 }

启动服务器,访问:http://localhost:8083/testValue

控制台输出:

UserController.test,data:DataRecourse{url='https://guanchao.site', username='camellia', password='123456'}

 

.properties 文件的读取,也可以使用上方的配置。

三:读取列表

在.yml配置文件中,不仅可以配置字符串,也可以配置列表。具体怎么配置呢?如下所示:

data-source:
   url: https://guanchao.site
   username: camellia
   password: 123456
   strList:
     - a
     - b
     - c
     - d

对,你没看错,就是前面加一个 “-”即可。

配置完成了,接下来,我们测试一下读取,这里就不挖坑了,直接说,列表参数的读取只能使用通过注解@ConfigurationProperties读取配置文件的读取方式:

具体代码如下所示:

package com.example.demo.demos.web;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
 
 @Component
 @ConfigurationProperties(prefix = "data-source")
 public class DataRecourse {
     private String url;
     private String username;
     private String password;
     // 列表参数
     private List<String> strList;
     public DataRecourse() {}
 
     public String getUrl() {
         return url;
     }
 
     public void setUrl(String url) {
         this.url = url;
     }
 
     public String getUsername() {
         return username;
     }
 
     public void setUsername(String username) {
         this.username = username;
     }
 
     public String getPassword() {
         return password;
     }
 
     public void setPassword(String password) {
         this.password = password;
     }
 
     public List<StringgetStrList() {
         return strList;
     }
 
     public void setStrList(List<String> strList) {
         this.strList = strList;
     }
 
     @Override
     public String toString() {
         return "DataRecourse{" +
                 "url='" + url + ''' +
                 ", username='" + username + ''' +
                 ", password='" + password + ''' +
                 ", strList=" + strList +
                 '}';
     }
 }

 

controller文件:

@Autowired
 private DataRecourse data;
 @RequestMapping("test")
 public String test(){
     System.out.println("UserController.test,data:"+data);
     return null;
 }

启动服务器,在浏览器中访问:http://localhost:7091/test

控制台输出:

UserController.test,data:DataRecourse{url='https://guanchao.site', username='camellia', password='123456', strList=[a, b, c, d]}

 

有好的建议,请在下方输入你的评论。