【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();
}
}
🙉本篇文章到此结束