目录
1.application.properties (传统格式/默认格式)
1.属性配置
1.在工作空间中复制对应工程,并修改工程名称
2.删除与Idea相关配置文件,仅保留src目录与pom.xml文件
3.修改pom.xml文件中的artifactId与新工程/模块名相同
4.删除name标签(可选)
5.保留备份工程供后期使用
2.配置文件分类
SpringBoot提供了多种属性配置方式,以修改服务器端口为例,举例说明以下三种属性配置方式的不同
1.application.properties (传统格式/默认格式)
server.port=80
2.application.yml (主流格式)
server:
port:81
3.application.yaml
server:
port:82
4.配置文件加载优先级
如果以上三种配置文件都存在,application.properties(最高) > application.yml > application.yaml (最低)
不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
3.yaml文件
1.yaml语法规则
-
大小写敏感
-
属性层级关系使用多行描述,每行结尾使用冒号结束
-
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
-
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
-
表示注释
2.字面值表达方式
|------------------------------------|--------------------------------------------|
| 值类型 | 说明 |
| boolean: TRUE | TRUE,true,True,FALSE,false,False均可 |
| float: 3.14 | 6.8523015e+5 #支持科学计数法 |
| int: 123 | #支持二进制、八进制、十六进制#0b1010 0111 0100 1010 1110 |
| nu1l:~ | 使用~表示null |
| string: HelloWorld | 字符串可以直接书写 |
| string2:"Hello world" | 可以使用双引号包裹特殊字符 |
| date:2018-02-17 | 日期必须使用yyyy-MM-dd格式 |
| datetime:2018-02-17T15:02:31+08:00 | 时间和日期之间使用T连接,最后使用4代表时区 |
3.数组数据表达方式
数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
java
subject:
- Java
- 前端
- 大数据
enterprise:
name: itcast
age: 16
subject:
- Java
- 前端
- 大数据
likes: [王者荣耀,刺激战场] #数组书写缩略格式
4.对象数组表达式
java
#对象数组格式
users:
- name: Tom
age: 4
- name: Jerry
age: 5
#对象数组格式二
users1:
-
name: Tom
age: 4
-
name: Jerry
age: 5
#对象数组缩略格式
users2: [{name:Tom,age:4},{name:Jerry,age:5 }]
4.yaml数据读取
1.读取yaml单一属性数据
- 使用@Value读取单个数据,如果数据存在多层级,依次书写层级名称即可,属性名引用方式:${一级属性名,二级属性名....} 。以下为示例代码:
java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class productController {
//读取yaml数据中的单一数据
@Value("${country}")
private String getCountry;
@Value("${enterprise.name}")
private String enterpriseName;
@Value("${subject[0]}")
private String subjectFirst;
@Value("${enterprise.subject[0]}")
private String enterpriseSubjectFirst;
@GetMapping
public String getId()
{
String data ="country:"+ getCountry + ";enterprise.name:"+enterpriseName + ";subjectFirst:"+subjectFirst +";enterpriseSubjectFirst:"+enterpriseSubjectFirst ;
System.out.println(data);
return data;
}
}
2.在浏览器中调用接口:http://127.0.0.1:8081/hello
3.运行结果如下图所示:
2.yaml文件中的变量引用
- 1.在配置文件中可以使用${属性名}方式引用属性值
- 2.如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析
1.application.yml 或 application.yaml 配置文件中配置示例:
baseDir: C:\win10 #使用S(属性名}引用数据 tempDir: ${baseDir}\temp #使用引号包赛的字符串,其中的转义字符可以生效 tempDir2: "${baseDir}\\temp\\t1\\t2\\t3"
- 控制器文件代码示例:
java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class productController {
@Value("${tempDir}")
private String tempDirStr;
@Value("${tempDir2}")
private String tempDirStr2;
@GetMapping
public String getId()
{
String data ="tempDirStr:" + tempDirStr +";tempDirStr2"+ tempDirStr2;
System.out.println(data);
return data;
}
}
3.在浏览器中调用接口:http://127.0.0.1:8081/hello
4.运行结果如下图所示:
3.读取yaml全部属性数据
- 1.使用Environment对象封装全部配置信息
- 2.使用@Autowired自动装配数据到Environment对象中
1.控制器文件代码示例:
java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class productController {
@Autowired
private Environment env;
@GetMapping
public String getId()
{
String data ="country:"+ env.getProperty("country") + ";enterprise.name:"+ env.getProperty("enterprise.name") + ";subjectFirst:"+env.getProperty("subject[0]") +";enterpriseSubjectFirst:"+env.getProperty("enterprise.subject[0]") ;
System.out.println(data);
return data;
}
}
-
运行结果如下图所示:
4.读取yaml引用类型属性数据
1 . application.yml 或 application.yaml 配置文件中配置示例:
#创建类,用于封装下面的数据
#由spring带我们去加载数据到对象中,一定要告诉spring加载这组信息
#使用时候从spring中直按获取信息使用
datasource: driver: com.mysql.jdbc.Driver url: jdbc:mysql:localhost/springboot_db username: root password: root
- 定义数据模型,封装yaml文件中对应的数据,定义为spring管控的bean
java
package com.example.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//1.定义数据模型,封装yaml文件中对应的数据
//2.定义为spring管控的bean
@Component
//3.指定加载的数
@ConfigurationProperties("datasource")
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
@Override
public String toString() {
return "MyDataSource{" +
"driver='" + driver + '\'' +
", url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
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;
}
}
- 控制器文件代码示例:
java
package com.example.demo.controller;
import com.example.demo.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class productController {
@Autowired
private MyDataSource myDataSource;
@GetMapping
public String getId()
{
String data = myDataSource.toString();
System.out.println(myDataSource);
return data;
}
}
5.运行结果如下图所示: