本篇文章主要介绍 Spring 配置文件的使用,主要讲解 properties 和 yml 两种配置文件。写入配置文件的配置信息可在Spring 官方配置查到。烦请路过的大佬给小的留一个赞🤩
文章目录
1. 什么是配置文件
配置文件是一种计算机文件,可以为一些计算机程序配置参数和初始设置。
2. 为什么需要配置文件
在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的。比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通用性,那么以上信息就不能写死在程序里。通常我们的做法是用配置文件来解决
3. Java 应用常见的配置文件格式
Java 中常用的有 properties 配置文件和 yml 配置文件
3.1 特殊说明
- 理论上讲 properties 可以和 yml 一起存在于一个项目当中,当 properties 和 yml 一起存在一个项 目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”, 那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。
- 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。这就好像连锁店的服饰一样,不管是老款的服装还是新款的服装,一定要统一了才好看。
4. *.properties
4.1 properties 配置文件说明
properties 配置文件是最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件。
4.2 properties 基本语法
properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:
# 配置数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
4.3 注意
一般properties 配置文件默认字符集为 GBK 格式,所以不能出现中文
5. *.yml
5.1 yml 配置文件说明
yml 是 YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另一种标记语言”。 yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
5.2 yml 基本语法
yml 是树形结构的配置文件,它的基础语法是“key: value”,注意 key 和 value 之间使用英文冒汗加空 格的方式组成的,其中的空格不可省略。格式如下:
# yml 配置数据库spring:datasource:url: jdbc:mysql://127.0.0.1:3306/shujvku?characterEncoding=utf8
username: root
password:123456
6. 修改 Spring 配置的一些配置信息
# 修改 Spring 默认 banner 是否显示
spring.main.banner-mode=false
# 修改 Spring 开始日志是否打印
spring.main.log-startup-info=off
# 修改 banner 样式
spring.banner.image.location=classpath:1.png
# true 打印完全日志
debug=false
# 打印日志的路径
logging.file.name=D:\\JAVA\\myapp.log
# 设置日志输出级别
# logging.level + 包名,会影响包下所有的输出级别,直接是类名,就仅仅此类
logging.level.com.hsq.demo=debug
7. 在配置文件中配置对象
具体怎么拿出对象的属性值,在第 8 点中一并说明
hsq.name=hsq
hsq.age=20
8. 在 Bean 读取配置信息的三种方法
# 配置文件中的信息
hsq.name=hsq
hsq.age=20
8.1 使用 Spring 提供的 Environment 对象
使用 @Autowired 注解注入 Environment 对象
@Slf4j@ComponentpublicclassReadFromConfig1{@AutowiredpublicReadFromConfig1(Environment environment){String name = environment.getProperty("hsq.name");
log.info("读取到的 hsq.name = "+ name);String age = environment.getProperty("hsq.age");
log.info("读取到的 age = "+ age);}}
8.2 使用 @Value 注解
@Slf4j@ComponentpublicclassReadFromConfig2{@AutowiredpublicReadFromConfig2(@Value("${hsq.name}")String name,@Value("${hsq.age}")String age
){
log.info("读取到的 hsq.name = "+ name);
log.info("读取到的 age = "+ age);}}
8.3 使用注解 @ConfigurationProperties 将配置信息包装成对象
@Component@ConfigurationProperties(prefix ="hsq")publicclassHsqConfig{String name;String age;// setter 方法必须有,否则不会生效publicvoidsetAge(String age){this.age = age;}publicvoidsetName(String name){this.name = name;}publicStringgetAge(){return age;}publicStringgetName(){return name;}}
@Slf4j@ComponentpublicclassReadFromConfig3{@AutowiredpublicReadFromConfig3(HsqConfig hsqConfig){
log.info("读取到的 hsq.name = "+ hsqConfig.getName());
log.info("读取到的 age = "+ hsqConfig.getAge());}}
9. 使用配置文件配置 MySQL 数据库
9.1 将配置信息写入配置文件
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java22_diaocha?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: root
password: root
9.2 读取配置信息并包装成对象
这里的 setter 方法由 lombok 中的 @Data 自动生成
@Component@ConfigurationProperties(prefix ="spring.datasource")@DatapublicclassMySQLConfig{String url;String username;String password;}
9.3 将配置信息对象注册进 Spring 库
以方法注册的方式注册
@Slf4j@ConfigurationpublicclassAppConfig{@BeanpublicDataSourcedataSource(@AutowiredMySQLConfig config){MysqlDataSource dataSource =newMysqlDataSource();
log.info("MySQL 配置如下:"+ dataSource);
dataSource.setURL(config.url);
dataSource.setUser(config.username);
dataSource.setPassword(config.password);return dataSource;}}
9.4 写 SQL 操作数据库
@Slf4j@SpringBootApplicationpublicclassDemoApplication{@SneakyThrowspublicstaticvoidmain(String[] args){ConfigurableApplicationContext context =SpringApplication.run(DemoApplication.class, args);// 从库中得到 dataSource 对象DataSource dataSource = context.getBean(DataSource.class);try(Connection c = dataSource.getConnection()){String sql ="select uid, username, password from users";try(PreparedStatement ps = c.prepareStatement(sql)){
log.info("执行的 SQL = "+ ps);try(ResultSet rs = ps.executeQuery()){while(rs.next()){
log.info("uid = {}, username = {}, password = {}",
rs.getInt("uid"),
rs.getString("username"),
rs.getString("password"));}}}}}}
打印得到从库中查到的数据,说明配置成功
版权归原作者 hssq 所有, 如有侵权,请联系我们删除。