官网配置手册
官网:https://spring.io/
选择SpringBoot
选择LEARN
选择 Application Properties
配置MySQL数据库连接
针对Maven而言,会搜索出两个MySQL的连接驱动。
com.mysql » mysql-connector-j
比较新,是在mysql » mysql-connector-java基础上进行二次开发和维护
mysql » mysql-connector-java也说明了转移到了com.mysql » mysql-connector-j,推荐使用com.mysql » mysql-connector-j【如果是老项目,则应该选择mysql » mysql-connector-java】
spring:datasource:# MySQL8.x要加上cjdriver-class-name: com.mysql.cj.jdbc.Drivername: rootpassword: flzxsqcurl: jdbc:mysql://127.0.0.1:3306/my_db?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8
SpringBoot这里配置的是UTF-8,但是会被默认的数据库连接池HikariCP解析时映射到MySQL的utf8mb4字符集上。
HikariCP使用mysql-connector-j作为数据库连接驱动,而mysql-connector-j对于字符集utf-8的解释会映射为utf8mb4格式,进而更好的支持Unicode特殊字符比如 Emoji 表情等
读取配置文件信息
properties格式
properties配置文件
- 同样的代码需要多次写,会不方便
格式:key.value
# 应用服务 WEB 访问端口
server.port=8080
# MySQL数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/my_db&?useUnicode=true&characterEncoding=UTF-8&userSSL=true&serverTimezone=GMT%2B8
spring.datasource.name=root
spring.datasource.password=flzxsqc
# MySQL8.x加cj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# 用户自定义配置
config.customer.str1=hello
yaml格式
yaml格式配置文件
- 类似于JSON格式,可读性高,写法简单易理解
- 支持的数据类型众多【数组、散列表】
- 支持的编程语言更多【PHP、Python、JavaScript】
格式:key: value
注意: key 和 value 之间使用英文冒号加空格形式组成,其中空格不能省略
# 应用服务 WEB 访问端口
server:port: 8080# MySQL数据库连接# 用户自定义配置
spring:datasource:# MySQL8.x要加上cjdriver-class-name: com.mysql.cj.jdbc.Drivername: rootpassword: flzxsqcurl: jdbc:mysql://127.0.0.1:3306/my_db?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8# 用户自定义配置
config:customer:# 字符串【只有双引号才会被解析】str1: hello worldstr2: hello \n worldstr3: 'hello \n world'str4: "hello \n world"# 整数num1: 3# 浮点数float1: 3.1415926# Null【~代表null】null1: ~# 对象
student:id: 1name: "张三"age: 23student2: { id: 2, name: "李四", age: 24 }# 集合
mylist:dbtypes:- mysql- oracle- sqlservermylist2: { dbtypes: [ mysql2, oracle2, sqlserver2 ] }
yml配置文件中如果使用双引号修饰了字符,那么其中的特殊字符就会生成对应的效果比如 \n 换行符
读取基础数据
把properties文件注释掉,只读取yaml文件数据
采用@Value注解读取配置文件中基础数据类型
前端页面效果【被转为了JSON字符串】
Java代码如下
package app.controller;import app.model.MyList;
import app.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.beans.factory.annotation.Value;import java.util.ArrayList;
import java.util.List;@RestController
public class TestController {// 读取用户自定义配置信息@Value("${config.customer.str1}")private String config_customer_str1;@Value("${config.customer.str2}")private String config_customer_str2;@Value("${config.customer.str3}")private String config_customer_str3;@Value("${config.customer.str4}")private String config_customer_str4;@Value("${config.customer.num1}")private Integer config_customer_num1;@Value("${config.customer.float1}")private float config_customer_float1;@Value("${config.customer.null1}")private Object config_customer_null1;// 读取系统的配置项@Value("${server.port}")private String server_port;@GetMapping("/config")public List<Object> readConfig() {List<Object> config = new ArrayList<>();config.add(config_customer_str1);config.add(config_customer_str2);config.add(config_customer_str3);config.add(config_customer_str4);config.add(config_customer_num1);config.add(config_customer_float1);config.add(config_customer_null1);config.add(server_port);System.out.println(config);return config;}
}
控制台输出效果
读取对象
@ConfigurationProperties 对于配置文件中的赋值依赖 getter 和 setter 方法,缺少之后就会无法启动项目
# 对象
student:id: 1name: "张三"age: 23
# 类似于js的行内写法也可以读取到
student2: {id: 2, name: "李四", age: 24}
Java代码如下
构造对象
package app.model;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "student") // 将配置文件中 student 配置赋值给当前对象
public class Student {private Integer id;private String name;private Integer age;
}
读取对象
package app.controller;import app.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;import java.util.ArrayList;
import java.util.List;@RestController
public class TestController {// 读取对象private final Student student;@Autowiredpublic TestController(Student student) {this.student = student;}@GetMapping("/config")public List<Object> readConfig() {List<Object> config = new ArrayList<>();config.add(student);System.out.println(config);return config;}
}
读取集合
构造集合
package app.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;@Data
@Component
@ConfigurationProperties(prefix = "mylist2")
public class MyList {private List<String> dbtypes;
}
读取集合
package app.controller;import app.model.MyList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;import java.util.ArrayList;
import java.util.List;@RestController
public class TestController {// 读取集合private MyList myList;@Autowiredpublic TestController(MyList myList) {this.myList = myList;}@GetMapping("/config")public List<Object> readConfig() {List<Object> config = new ArrayList<>();config.add(myList);System.out.println(config);return config;}
}
多环境配置
多平台的配置文件明明也有格式要求,其中 application-xxx.yml是固定的,xxx 是可以随意修改的。一般来说:dev是开发环境;prod是生产环境;test是测试环境
在 application.yml 中管理配置文件
这样就会在项目启动时读取dev中配置
#配置文件管理
spring:profiles:active: dev