目录
使用 @ConfigurationProperties 注解
配置文件作用
SpringBoot的配置文件主要有以下几个作用:
- 数据源和持久化:连接数据库、连接池等各种数据源和持久化相关的配置
- 日志记录和调试:设置日志记录级别、格式和输出位置等,还有启用远程调试功能等
- 缓存管理:设置缓存文件的类型、过期时间等
- Web服务配置:设置Web服务器的端口号、静态资源目录和错误页面等
- 安全认证:配置身份验证、授权和HTTP等相关安全配置
- 消息服务和异步操作:配置异步消息队列、任务调度等各种消息服务和异步处理功能
配置文件注意事项
- 必须要有一个主配置文件,名字只能是application.yml(properties)
- 每个平台都必要要有一个配置文件
命名格式只能是 application-XXX.yml(.properties)
只有XXX部分是自定义的- 若各个配置文件中有完全相同的部分,则统一都写到主配置文件中去
- 在Java中,配置文件有两种类型:properties和yml,二者理论上可以出现在同一个项目中,但实际开发中只能统一选一个。
- properties的优先级较高,原因是properties和yml本质上没有任何区别,都是键值对,系统率先加载yml的,然后加载properties的,这样properties就会覆盖yml的
properties
Properties 是一种常见的配置文件类型,其以键值对(key-value)的形式保存配置信息。Properties 格式的文件通常使用 .properties 后缀名,该文件包含了若干行文本和 ASCII 编码的字符集,其中每一行都表示一个属性的键值对。在 Java 应用程序中,Properties 类也提供了一套 API 来解析和读取这类文件。
用法
这里就修改了服务器的端口号。
更多的用法可以到这里查看Common Application Properties (spring.io)
修改字符集
在properties中可以 用 # 来写注释
通常在IDEA中的properties的字符集是不适配中文的,这就需要我们修改一下。
优缺点
优点:
- 写法简单,不易出错,就是 key=value ,对于空格之类的也没有要求
- 优先级高
缺点:
- 冗余性较大
- 只能适用于Java项目,无法对其他语言项目适用
特点:是系统默认的配置文件
yml
yml是YAML的缩写,Yet Another Markup Language(另一种标记语言)
它被广泛应用于各种编程语言中,并且比 JSON 和 XML 更加人性化。
用法
优缺点
优点:
- 可读性高:语法简洁,易读
- 层级结构分明清晰
- 支持更多的数据类型
- 可以在各种编程语言的项目中使用
缺点:
- 学习成本较高,需要掌握其语法规则
读取配置文件
读取配置文件信息的方法有很多,下面将介绍一些常见的方法。
使用 @Value注解
这个注解可以读取单个配置项
读properties配置文件
package com.example.demo.component;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadProperties {
@Value("${server.port}")
private String propertiesString;
@PostConstruct
public void getPropertiesString() {
System.out.println("读取properties类型的配置文件信息" + propertiesString);
}
}
读yml配置文件
package com.example.demo.component;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
// 必须使用 ${} 才能从配置文件中读出来
@Value("${server.port}")
private String ymlString;
@PostConstruct
public void getYmlString() {
System.out.println("读取yml类型的配置文件信息" + ymlString);
}
}
使用 @ConfigurationProperties 注解
与@value不同的是,这个@configurationProperties可以读取多个配置项
读properties配置文件
首先要有一个与之对应的Bean对象,该对象的属性名要和配置文件的Key相同才可以
其中prefix的内容是从配置文件中的哪个路径去找,多级下的使用 . 来分开,yml也是同理
package com.example.demo.repository;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Repository;
@Repository
@ConfigurationProperties(prefix = "spring.datasource")
@Data
public class SpringDatasource {
private String url;
private String username;
private String password;
}
package com.example.demo;
import com.example.demo.repository.SpringDatasource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication implements InitializingBean {
@Autowired
private SpringDatasource springDatasource;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(springDatasource);
}
}
读yml配置文件
读取的方法和properties相同。
指定文件来读取
以上两个读取配置文件的方法默认读取的是主配置文件中的内容。若是想要读取 环境特定的配置文件,就需要和 @PropertySource 一起使用了。
使用 @PropertySource 注解 来 指定查询配置文件
通过该注解可以指定读取的位置,然后读取出来配置项。
package com.example.demo;
import com.example.demo.repository.SpringDatasource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
@SpringBootApplication
@PropertySource("classpath:application-dev.yml")
public class DemoApplication implements InitializingBean {
// @Autowired
// private SpringDatasource springDatasource;
@Value("${server.port}")
private String port;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void afterPropertiesSet() throws Exception {
// System.out.println(springDatasource);
System.out.println(port);
}
}
读取@ConfigurationProperties同上,只需要在加上该注解指定位置即可。
有什么问题评论区支持。希望可以帮到你。