文章目录
提示:以下是本篇文章正文内容,Java系列学习将会持续更新
1. 什么是配置文件?
整个项目中所有重要的数据都是在配置文件中配置的,比如:
- 数据库的连接信息(包含用户名和密码的设置);
- 项目的启动端口;
- 第三方系统的调用秘钥等信息;
- 用于发现和定位问题的普通日志和异常日志等。
Spring Boot 配置文件主要分为以下两种格式:一般在 resources 包下
application.properties
application.yml
说明:
-
properties是以
key=value
的形式配置的键值对类型配置文件,而yml是以key: value
的形式配置的键值对类型配置文件; -
properties是早期且系统默认的配置文件格式,但配置存在一定的冗余数据,而yml可以更好的解决数据冗余问题;
-
yml通用性更好,支持多语言,支持更多的数据类型;
-
两种格式的文件可以同时存在于一个项目中,两者可以同时加载。但是
.properties文件优先级高
,当对同一数据做出不同不同配置时,会覆盖.yml文件。而且也不建议同时写两个文件。
2. properties 配置文件说明
properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:
# 配置项目端口号
server.port=8080
# 配置数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
3. yml 配置文件说明
3-1 yml基础语法
yml 是以键值的形式配置的,key 和 value 之间是以“: ”连接的,如:
spring:
main:
# 关闭 Spring 默认的 banner 显示
banner-mode: off
# 关闭启动日志打印
log-startup-info: false
banner:
image:
# 让 banner 显示某张图的字符形式
location: classpath:hill.png
datasource:
url: jdbc:mysql://127.0.0.1:3306/java22_diaocha?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
# 显示更详细的调试信息 默认是 false
debug: true
logging:
file:
# 使用 YAML 格式时,可以正常使用中文。YAML 下不用再做 \ 的转义了
name: F:\IDEA Project volume\03_JavaEE\day4_配置文件
# 设置日志输出级别
level:
# 如果是包名,则这个包下的所有类(孩子 + 子孙)都遵守这个输出级别
com.spring.day4: info
# 如果是类名,则只有这个类遵守这个输出级别
com.spring.day4.Demo2: debug
pattern:
# 控制台的日志格式(只输出消息本身)
# 中间有 YAML 的特殊字符,用单引号引起来
console: '%clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n'
3-2 yml进阶: 配置数据类型
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
# 整数
int.value: 10
# Null,~代表null
null.value: ~
3-3 yml进阶: 配置对象
student:
id: 1
name: Java
age: 18
或者,行内写法:
student: {id: 1,name: Java,age: 18}
3-1 yml进阶: 配置集合
dbtypes:
name:
- mysql
- sqlserver
- db2
或者,行内写法:
dbtypes: {name: [mysql,sqlserver,db2]}
4. 读取配置文件
application.yml 自定义配置项:
# 自定义对象:
wangshaoyu:
name: 王少宇
age: 20
address: 中国
SpringBoot提供3种方式读取配置项:
- 使用 Spring 提供的 Environment 类
String name = environment.getProperty("wangshaoyu.name");
- 使用 @Value 注解,直接让 Spring 注入
@Value("${wangshaoyu.name}") String name;
- @ConfigurationProperties 注解把一组配置项,包装成一个对象
@ConfigurationProperties(prefix = "wangshaoyu")
setter()方法 + getter() 方法
4-1 Environment
Environment
是用来读取应用程序运行时的环境变量的类,可以通过key-value的方式读取配置文件和系统环境变量,命令行输入参数,系统属性等,具体如下:
@Slf4j
@Component
public class ReadFromConfig1 {
// 将 Spring 下的 Environment 对象注入
@Autowired
public ReadFromConfig1(Environment environment) {
// getProperty("") 指向需要的value对应的key值
String name = environment.getProperty("wangshaoyu.name");
log.info("读取到的 wangshaoyu.name = " + name);
int age = environment.getProperty("wangshaoyu.age");
log.info("读取到的 wangshaoyu.age = " + age);
String address = environment.getProperty("wangshaoyu.address");
log.info("读取到的 wangshaoyu.address = " + address);
}
}
4-2 @Value
如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value
注解来实现。
@Value 注解使用“${}”
的格式读取,如下代码所示:
@Slf4j
@Component
public class ReadFromConfig2 {
public ReadFromConfig2(
// 一定要使用 Spring 下的那个 @Value 注解
@Value("${wangshaoyu.name}") String name,
@Value("${wangshaoyu.age}") int age,
@Value("${wangshaoyu.address}") String address) {
log.info("姓名: " + name);
log.info("年龄: " + age);
log.info("地址: " + address);
}
}
4-3 @ConfigurationProperties
使用@ConfigurationProperties
首先建立配置文件与对象的映射关系,然后在控制器方法中使用@Autowired注解将对象注入。具体如下:
1.定义配置类 :需要将该类注册到 Spring 中
// 使用 @Component 注册到 Spring 中
@Component
// prefix 指向配置属性的前置项
@ConfigurationProperties(prefix = "wangshaoyu")
public class WangshaoyuConfig {
private String name;
private String age;
private String address;
// setter 方法是必须的,否则不会生效,即使属性是用 public 修饰的
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
// 为了能访问到私有属性,再写个 getter 方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
}
2.使用配置类
@Slf4j
@Component
public class ReadFromConfig3 {
// 将配置文件类注入
@Autowired
public ReadFromConfig3(WangshaoyuConfig config) {
log.info("读取到的 wangshaoyu.name = " + config.getName());
log.info("读取到的 wangshaoyu.age = " + config.getAge());
log.info("读取到的 wangshaoyu.address = " + config.getAddress());
}
}
5. 应用 - JDBC
5-1 application.yml
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/libary?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
5-2 MySQLConfig.java
将一组 datasource 配置项,包装成一个对象
@Component
@ConfigurationProperties(prefix = "spring.datasource")
@Data // 自动构造 setter + getter
public class MySQLConfig {
private String url;
private String username;
private String password;
}
5-3 AppConfig.java
利用配置对象生成 DataSource 对象
@Slf4j
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource(@Autowired MySQLConfig config) {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl(config.getUrl());
dataSource.setUser(config.getUsername());
dataSource.setPassword(config.getPassword());
return dataSource;
}
}
5-4 DemoApplication.java
@Slf4j
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) throws SQLException {
ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
// 依赖注入,从Spring 中获取 DataSource 对象
DataSource dataSource = context.getBean(DataSource.class);
// 获取 Connection 对象
try (Connection c = dataSource.getConnection()) {
String sql = "select uid, username, password from users order by uid limit 5";
try (PreparedStatement ps = c.prepareStatement(sql)) {
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
log.info("uid = {}, username = {}, password = {}",
rs.getInt("uid"),
rs.getString("username"),
rs.getString("password"));
}
}
}
}
}
}
总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是SpringBoot配置文件的学习,认识了两种格式的配置文件的写法,以及读取配置文件的三种方法。之后的学习内容将持续更新!!!