文章目录
- 1. 配置文件的作用
- 2. 配置文件的格式
- 3. properties 配置文件说明
-
- 3.1 properties 基本语法
- 3.2 properties 配置缺点分析
- 4. yml 配置文件说明
-
- 4.1 yml 基本语法
- 4.2 yml 配置简单的数据类型及 null
- 4.3 yml 配置对象
- 4.4 yml 配置 list 集合
- 5. properties 和 yml 的总结
- 6. Spring Boot 读取配置文件的方法
-
- 6.1 使用 @Value 读取配置文件
- 6.2 使用 @ConfigurationProperties 读取配置文件
- 6.3 使用 Environment 读取配置文件
- 6.4 使用 @PropertySource 读取配置文件
- 6.5 使用原生方式 Properties 对象读取配置文件
1. 配置文件的作用 整个项目中所有重要的数据都是在配置文件中配置的,比如:
- 数据库的连接信息
- 项目的启动端口
- 第三方系统的调用密钥等信息
- 用于发现和定位问题的普通日志和异常日志
2. 配置文件的格式 Spring Boot 配置文件主要分为两种格式:
.properties
和 .yml
在创建 Spring Boot 项目时,项目默认会带一个
application.properties
配置文件文章图片
properties 相当于老款的配置文件,而 yml 相当于新款的配置文件,要想使用新款的配置文件,在
/src/main/resources
目录下手动创建一个 application.yml
文件就行 文章图片
补充说明:
- 理论上 properties 和 yml 类型的配置文件可以共存,但是当这两个配置文件同时存在时,会以 properties 类型的配置文件为最高优先级,即如果这两个文件同时配置了某个属性,那么最终会使用 properties 文件的配置。当加载完 properties 类型的配置文件后,会继续加载 yml 类型的配置文件。不过并不推荐一个项目同时存在两种类型的配置文件。
- IDEA 社区版创建好 Spring Boot 项目后,yml 配置文件默认拥有代码提示,但是 properties 配置文件没有代码提示。可以添加一个 Spring Tools 插件,解决 properties 配置文件没有代码提示的问题。
3.1 properties 基本语法 properties 是以键值对的形式配置的,key 和 value 之间用
=
号连接。key 就是要配置的属性,value 就是要设置的值。示例代码:
- 配置项目的端口号
# 配置端口号 server.port=8080
- 配置数据库连接信息
# 配置数据库连接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=1234
@Value
注解来读取 properties 配置文件的配置内容。读取方式为,先在注入类中创建一个相关属性,再在该属性上增加 @Value
注解,具体使用方式为 @Value(value = "https://www.it610.com/article/${要获取的配置文件中的属性}")
或 @Value("${要获取的配置文件中的属性}")
。注意: 使用
@Value
注解获取配置文件的属性时要带 ${}
。读取示例:
@Controller
@ResponseBody
public class ReadProperties {@Value(value = "https://www.it610.com/article/${server.port}")
private Integer port;
@Value("${spring.datasource.url}")
private String dbURL;
@RequestMapping("/port")
public Integer readPort(){
return port;
}@RequestMapping("/dburl")
public String readDbURL(){return dbURL;
}
}
文章图片
3.2 properties 配置缺点分析 properties 是以
key=value
的形式来进行配置的,会显得代码冗余。文章图片
4. yml 配置文件说明 yml 是 YAML(YAML Ain’t a Markup Language)的缩写,译为不是一种标记语言。yml 是一种可读性高、易于理解、用于表达数据序列化的格式。它可以用于简单表达清单(数组)、散列表、标量等数据形态。是一种专门用来写配置文件的语言,可用于多种编程语言项目的文件配置,如 Java、Go、Python、C++ 等等。
4.1 yml 基本语法 yml 是树型结构的配置文件,它的基础形式是
key: value
,yml 的基础语法具有以下的规则:-
key: value
表示键值对关系,冒号后面必须有一个空格
- 【JavaEE|【Spring Boot】SpringBoot 配置文件详解】使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的
- 大小写敏感
- 配置项目的端口号
# 配置项目的端口号 server: port: 8080
- 配置数据库的连接信息
# 配置数据库连接的信息 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false username: root password: 1234
# 整型
value: 10# 布尔类型
boolean.value: true# 字符串
string:
value1: 你好呀 \n aaa
value2: '你好呀 \n bbb'
value3: "你好呀 \n ccc"# NULL
null.value: null
读取代码: 通过
@Value
注解来读取配置中的简单数据类型和 null@Controller
@ResponseBody
public class readYml {@Value("${value}")
private int val1;
@Value("${boolean.value}")
private Boolean val2;
@Value("${string.value1}")
private String val3;
@Value("${string.value2}")
private String val4;
@Value("${string.value3}")
private String val5;
@Value("${null.value}")
private Object val6;
@RequestMapping("/read")
public void read(){
System.out.println("整型 value:" + val1);
System.out.println("整型 value:" + val2);
System.out.println("整型 value:" + val3);
System.out.println("整型 value:" + val4);
System.out.println("整型 value:" + val5);
System.out.println("整型 value:" + val6);
}
}
文章图片
注意: 在 yml 中,字符串如果使用了双引号包裹,那么特殊字符是不会转义的,比如 \n 就表示换行;而如果字符串什么都不包裹或者用单引号包裹,那么特殊字符就会自动进行转义。
4.3 yml 配置对象 yml 配置:
# 对象(写法一)
student:
id: 1
name: 张三
age: 15# 对象(写法二)
user: {id: 2, username: 李四, password: 1234}
读取代码:
首先需要创建一个匹配配置文件中对象的类,并且读取配置文件中的对象就不能使用
@Value
注解,而需要使用 @ConfigurationProperties
注解,该注解放在创建的类上,并且有一个 prefix 属性用于设置配置文件中对应的 key。创建的类中必须要有 Setter 和 Getter 方法。@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}public void setId(int id) {
this.id = id;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public int getAge() {
return age;
}public void setAge(int age) {
this.age = age;
}@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
通过创建的类读取到配置文件的对象后,将该类注册到 Spring 容器中,当使用时,直接通过
@Autowired
或者 @Resource
注解注入就好。@Controller
public class readYml {@Autowired
private Student student;
@RequestMapping("/student")
public void read(){
System.out.println(student);
}
}
文章图片
4.4 yml 配置 list 集合 yml 配置:
# 集合(方式一)
dbtypes1:
fruits:
- 苹果
- 菠萝
- 西瓜# 集合(方式二)
dbtypes2: {color: [红色,蓝色]}
读取代码:
yml 配置集合时,也需要通过
@ConfigurationProperties
注解来读取,该注解的 prefix 属性对应着上述 yml 配置的 dbtypes1 或者 dbtypes2。接下来创建一个匹配配置文件中集合的类@Component
@ConfigurationProperties(prefix = "dbtypes1")
public class DBTypes {
private List fruits;
public List getFruits() {
return fruits;
}public void setFruits(List fruits) {
this.fruits = fruits;
}
}
通过创建的类读取到配置文件的对象后,将该类注册到 Spring 容器中,当使用时,直接通过
@Autowired
或者 @Resource
注解注入就好。@Controller
public class readYml {@Resource
private DBTypes dbTypes;
@RequestMapping("/dbtypes")
public void read(){
System.out.println(dbTypes.getFruits());
}
}
文章图片
5. properties 和 yml 的总结
- properties 是以 key=value 的形式配置的键值类型的配置?件,? yml 使?的是类似 json 格式的 树形配置?式进?配置的,yml 层级之间使?换?缩进的?式配置,key 和 value 之间使?“: ”英? 冒号加空格的?式设置,并且空格不可省略。
- properties 为早期并且默认的配置?件格式,但其配置存在?定的冗余数据,使? yml 可以很好的 解决数据冗余的问题。
- yml 通?性更好,?持更多语?,如 Java、Go、Python 等,如果是云服务器开发,可以使??份 配置?件作为 Java 和 Go 的共同配置?件。
- yml 虽然可以和 properties 共存,但?个项?中建议使?统?的配置类型?件。
- yml 支持更多的数据类型
- 使用 @Value 读取配置文件
- 使用 @ConfigurationProperties 读取配置文件
- 使用 Environment 读取配置文件
- 使用 @PropertySource 读取配置文件
- 使用原生方式读取配置文件
application.yml
配置文件进行读取。yml:
name: yml
desc: configuration
6.1 使用 @Value 读取配置文件 使用 @Value 可以读取单个配置项,代码如下所示:
@Controller
@ResponseBody
public class readYml {@Value("${yml.name}")
private String name;
@RequestMapping("/read1")
public void read1(){
System.out.println(name);
}
}
文章图片
6.2 使用 @ConfigurationProperties 读取配置文件 使用
@ConfigurationProperties
可以按对象或者集合的形式来读取配置项,首先先创建一个和配置中对象和集合匹配的类,然后通过@ConfigurationProperties
读取配置文件中的对象或集合,然后注入到 Spring 中,当需要使用时,通过 @Autowired
或者 @Resource
注入就可以获取到,代码如下所示:@Component
@ConfigurationProperties(prefix = "yml")
public class Yml {
private String name;
private String desc;
public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getDesc() {
return desc;
}public void setDesc(String desc) {
this.desc = desc;
}@Override
public String toString() {
return "Yml{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
@Controller
@ResponseBody
public class readYml {@Autowired
private Yml yml;
@RequestMapping("/read2")
public void read2(){
System.out.println(yml);
}
}
文章图片
6.3 使用 Environment 读取配置文件 Environment 是 Spring Core 中的一个用于读取配置文件的类,将此类使用
@Autowired
或者 @Resource
注入到类中就可以使用它的 getProperty
方法来获取某个配置项的值,代码如下所示:@Controller
@ResponseBody
public class readYml {@Resource
private Environment enviroment;
@RequestMapping("/read3")
public void read3(){
System.out.println(enviroment.getProperty("yml.name"));
}
}
文章图片
6.4 使用 @PropertySource 读取配置文件 使用
@PropertySource
注解可以来指定读取某个配置文件,比如指定读取 application.yml
配置文件的内容,就可以在指定的类上添加 @PropertySource("classpath:application.yml")
,代码如下所示:@Controller
@ResponseBody
@PropertySource("classpath:application.yml")
public class readYml {@Value("${yml.desc}")
private String desc;
@RequestMapping("/read4")
public void read4(){
System.out.println(desc);
}
}
文章图片
6.5 使用原生方式 Properties 对象读取配置文件 可以使用最原始的方式 Properties 对象来读取配置文件,代码如下所示:
注意: 使用原生方式读取配置文件,只支持 properties 格式的配置文件
@Controller
@ResponseBody
public class readYml {@RequestMapping("/read5")
public void read5() {
Properties properties = new Properties();
InputStreamReader inputStreamReader = new InputStreamReader(
this.getClass().getClassLoader().getResourceAsStream("application.properties"),
StandardCharsets.UTF_8
);
try {
properties.load(inputStreamReader);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(properties.getProperty("properties.name"));
}
}
文章图片
推荐阅读
- spring|spring boot 集成Kafka配置文件详解
- springboot|springboot配置文件详解
- 适用于所有级别程序员的7个最佳Java博客
- 更新ing!!读书(HTTP和Java)笔记整理
- Servlet|Servlet学习之Session
- 单例模式|单例模式(饿汉式,dcl懒汉式)
- 常见的注解
- 高并发|JUC高并发编程(07) -- 多线程锁 -- 演示锁的八种情况
- #|Oracle数据库操作