Bootstrap

【JavaEE】Spring(4):配置文件


一、什么是配置文件

在编写代码时会遇到一些 [硬编码] 的问题,我们将可能改变的数据放在一个集中的地方,当程序启动时,应用程序会自动扫描配置文件

硬编码:将数据直接嵌入到程序中,也就是我们常说的把代码写死

1.1 配置文件格式

SpringBoot支持的配置文件有以下三种:

  • application.properties
  • application.yml
  • application.yaml

.yml 和 .yaml 在功能和使用上没有任何区别,这里我们以 .yml 为主

当应用程序启动时,SpringBoot会自动加载这些文件

注意:

  • 当.properties 和 .yml 并存在一个项目中时,则以 .properties 为主,因为.properties的优先级更高
  • 在实际开发中,我们会采取一种统一的配置文件格式

二、properties 配置文件

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

2.1 properties基本语法

properties配置文件中,信息以键值对的形式存在,键和值之间以 = 相连

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

配置文件中使用 # 来表示注释信息

2.2 读取配置文件

如果想要主动读取配置文件中的信息,可以使用@Value,假如配置文件有如下内容

1 mykey.key1 = sans

编写程序读取配置文件中的内容:

@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1; //将配置文件中mykey.key1的值读取到key1中

    @RequestMapping("/key")
    public String key(){
        return "读取到值:"+key1;
    }
}

三、yml配置文件

3.1 yml基本语法

yml配置文件中也是键值对,key 和 value 之间以英文冒号和空格相连,空格不可省略

3.2 yml配置不同类型的数据

#字符串
string.value: Sans

#布尔类型
boolean.value: true
boolean.value1: false

#整数
int.value: 10

#浮点数
float.value: 3.14159

#Null,~代表null
null.value: ~

# 空字符串
empty.value: ''

读取yml配置文件的方式和properties相同,都是采用@Value

【value值加单双引号】

在yml配置文件中,字符串的表示不用加单双引号,如果加上单双引号分别会怎么样,配置信息如下:

string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

测试:

@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;

@RequestMapping("/test")
public void test() {
    System.out.println(str1);
    System.out.println(str2);
    System.out.println(str3);
}

总结:双引号会转义特殊字符,单引号就是一个普通的字符串和什么都不加一样

3.3 配置对象

# 第一种
student:
  id: 1
  age: 18
  name: Sans

# 第二种
student1: {id: 2, name: 18, age: Frisk}

读取对象时,要采用一个新注解:@ConfigurationProperties

@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private int id;
    private int age;
    private String name;
}

上述代码如果不加@Data,就得加上属性的get、set方法和重写的toString方法

调用类如下:

@RestController
public class StudentController {
    @Autowired
    private Student student;

    @RequestMapping("/read")
    public String readStudent() {
        return student.toString();
    }
}

3.4 配置集合

dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

读取集合依然采用 @ConfigurationProperties

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
    private List<String> name;
}

调用类实现如下:

@RestController
public class ListController {
    @Autowired
    private ListConfig listConfig;
    @RequestMapping("/readList")
    public String readList(){
        return listConfig.toString();
    }
}

3.5 配置Map

maptypes:
  map:
    k1: kk1
    k2: kk2
    k3: kk3

读取集合依然采用@ConfigurationProperties

@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
    private HashMap<String,String> map;
}

调用类实现如下:

@RestController
public class MapController {
    @Autowired
    private MapConfig mapConfig;
    @RequestMapping("/readMap")
    public String readMap(){
        return mapConfig.toString();
    }
}


🙉本篇文章到此结束

;