Spring Boot 配置文件总结 天天讯息
Spring Boot 中提供一个全局的配置文件:application.properties
,这个配置文件的作用就是,允许我们通过这个配置文件去修改 Spring Boot 自动配置的默认值。
Spring Boot 支持两种格式的配置文件:application.properties
和 application.yml
。
(相关资料图)
yml 等同于 yaml
,写法看个人喜欢,我喜欢写成 application.yml
application.properties
和 application.yml
,它们的区别在于语法不同,但本质上是一样的。application.properties
使用键值对的方式来配置,而 application.yml
使用缩进和冒号的方式来配置。
properties 作为后缀的配置文件,语法是这样的:key = value
,如果有多级配置项,则是 first.second.third = value
。
key=valuefirst.second.third=value
示例:
定义属性:key=valuegame.name=GTA5
这里的 key
和 game.name
都是属性名称,而 value
和 GTA5
是属性的值。
game.list=GTA5,NBA2K,AC
这里的 game.list
这个列表包含了 3 个元素。
game.map.key1=value1game.map.key2=value2
这里的 game.map
是一个 Map,这个 Map 包含了两个元素,key1 映射到 value1,key2 映射到 value2
game.name=GTA5# 引用上面已定义的属性great.game=${game.name}
yml (yaml)yml 作为后缀的配置文件,语法是这样的:key: value
。使用冒号代替等号,同时冒号后面需要跟上一个空格符,不可省略。
key: valuefirst: second: third: value
示例:
定义属性:key: valuegame: name: GTA5
定义 List:game: list: - GTA5 - NBA2K - AC
定义 Map:game: map: key1: value1 key2: value2
引用已定义的属性:game: name: GTA5great: game: @{game.name}
不同环境下切换不同的配置文件一般项目中在不同环境下都有不同的配置,还是以这个 Tomcat 的端口号为例:
目前有 3 个环境,分别是开发环境、测试环境、生产环境。在开发环境下,端口号是 4790;测试环境下,端口号是 4791;生产环境下是 4792。
application-dev.yml
server: port: 4790
application-test.yml
server: port: 4791
application-prod.yml
server: port: 4792
spring.profiles.active现在,通过 spring.profiles.active
这个配置项,在 application.yml
中指定我们想要切换的配置文件,现在指定使用开发环境的配置文件:
# 指定使用 application-dev.yml 这个配置文件spring: profiles: active: dev
启动 Spring Boot 应用,控制台输出:
2023-03-16 15:41:48.122 INFO 3356 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 4790 (http) with context path ""
指定使用测试环境下的配置文件:
# 指定使用 application-test.yml 这个配置文件spring: profiles: active: test
启动 Spring Boot 应用,控制台输出:
2023-03-16 15:42:21.462 INFO 24548 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 4791 (http) with context path ""
同理,指定使用生产环境的配置文件也是一样的做法。
自定义的配置在 Spring Boot 项目中,自定义配置是经常用到的,我目前体会到的自定义的配置的作用有一点:配置与代码解耦
下面,我们看看如何自定义配置,并使用自己自定义配置的值:
server: port: 4790# 自定义的配置demo: author: god23bin description: 点个免费的赞,我能开心好久!
上面自定义了两个配置项,分别是 demo.author
和 demo.description
,接着,如何在代码中使用这些配置好的值呢?
目前使用这些配置好的值(读取这些值),有以下几种方式:
使用@Value
使用 @ConfigurationProperties
@Value我们写一个普通的 Java 类,使用 Spring 提供的 @Value
来读取这两个值:
@Data@Componentpublic class DemoCustomConfig { /** * 通过 @Value 注解读取配置文件中的自定义配置项的值,使用 ${} 进行读取 **/ @Value("${demo.author}") private String author; @Value("${demo.description}") private String description;}
上面的代码中,我在类上使用了 @Data
和 @Component
,@Data
是来自 Lombok 的,用于生成 getter 和 setter 方法,@Component
则将该类的实例对象交给 Spring 管理,接着在该类的两个属性上分别使用了 @Value
注解,通过 ${}
指定了我们要读取的配置项。
进行测试,我们写一个 Controller 判断我们的读取是否成功:
@RequestMapping("/demo")@RestControllerpublic class DemoController { @Autowired private DemoCustomConfig demoCustomConfig; @GetMapping("/getCustomValue") public ResponseEntity getCustomValue() { return ResponseEntity.ok(demoCustomConfig.getAuthor() + "说:" + demoCustomConfig.getDescription()); }}
访问该接口:localhost:4790/demo/getCustomValue
@ConfigurationProperties
注解,它可以将配置文件中的的值绑定到 Java Bean 中,也就是通过这个 Bean 可以读取到配置文件中配置的值,我们看看如何操作。
我们自定义一个用于读取配置文件中配置项的类:
@Data@Component@ConfigurationProperties("system.demo")public class SystemCustomConfig { private String name; private String version;}
上面的代码,主要使用了 @ConfigurationProperties
这个注解,并指定了前缀 system.demo
,同时这个类有两个属性,name 和 version, 这样就相当于我们自定义了 system.demo.name
和 system.demo.version
这两个属性。
接着,我们就能在配置文件中写这两个我们自定义的配置项了:
server: port: 4790# 自定义的配置system: demo: name: 超级系统 version: 1.0
写完这里的配置项,并不需要使用 @Value
去读取,因为使用了 @ConfigurationProperties
注解,Spring 已经帮我们搞定了配置的值的读取,至于它的实现原理,这里先不深究。
进行测试,依然通过写一个接口来测试我们通过:
@RequestMapping("/demo")@RestControllerpublic class DemoController { @Autowired private SystemCustomConfig systemCustomConfig; @GetMapping("/getSystemVersion") public ResponseEntity getSystemVersion() { return ResponseEntity.ok(systemCustomConfig.getName() + "版本:" + systemCustomConfig.getVersion()); }}
访问该接口:localhost:4790/demo/getSystemVersion
不过,目前有个问题就是,我们自己写了个 Java Bean 后,在配置文件中写配置项的时候并没有相关提示,这个就比较不友好,如果当我们自己写的配置想要给其他人用的话,别人都不知道有什么配置可以配。所以想要能像 Spring Boot 提供的配置提示一样的话,就需要引入下面的依赖:
org.springframework.boot spring-boot-configuration-processor true
spring-boot-configuration-processor
是一个用于生成配置元数据的注解处理器。它会扫描使用@ConfigurationProperties
注解的类和方法,来获取配置参数并生成配置元数据。生成的配置元数据可以用于 IDE 的自动补全和提示功能。
如果你引入了这个依赖并且重启该 Spring Boot 项目后,依旧没有提示的话,尝试开启 IDEA 中的 annotaion processing
。
对于我们自定义的配置,会出现这样的提示:Cannot resolve configuration property(无法处理自定义的配置属性),如下:
解决方式就是定义一下元数据,用元数据来描述这个属性。当我们移动到这个配置项上时,出现提示,我们直接点击 Define configuration key xxx
就可以帮我们生成一个关于配置的元数据文件。
additional-spring-configuration-metadata.json
:
{ "properties": [ { "name": "demo.author", "type": "java.lang.String", "description": "Demo的作者" }, { "name": "demo.description", "type": "java.lang.String", "description": "Demo的描述" } ]}
此时,还是一样,重启项目,如果黄色提示还是没有去除的话,这里建议重新用 Maven 进行一次 clean,接着重新编译整个项目,就可以了。于此同时,也具有了自动提示功能。
自定义配置文件上面说的是自定义的配置,现在这里说自定义的配置文件,我们知道 Spring Boot 默认提供 application.properties
这个配置文件。那现在我们想自己写一个配置文件,并且能在应用中读取这个配置文件的信息,该如何做呢?这里就涉及到 @PropertySource
这个注解了。
自定义的配置文件:
custom.yml
:
# 自定义的配置文件version: 2.0description: 求关注!
读取该配置文件的配置类:
@Data@Configuration@PropertySource("classpath:custom.yml")public class DemoPropertiesSourceConfig { @Value("${version}") private String version; @Value("${description}") private String description;}
这样,就能读取到自己编写的配置文件的配置信息了。
如果有多个自定义的配置文件,那么可以使用 @PropertySources
注解,可以看到最后面多加了一个 s
,说明这个单词是复数,通俗易懂。
@Configuration@PropertySources({ @PropertySource("classpath:custom1.yml"), @PropertySource("classpath:custom2.properties")})public class MyConfig { // ...}
总结配置文件的两种写法:properties 和 yml
项目中存在多个配置文件,可以使用 spring.profiles.active
属性来切换使用哪个配置文件。
自定义的一些配置属性(配置项),如何读取呢?可以在程序中通过 @Value
或者@ConfigurationProperties
来读取。
自定义的配置文件,可以通过 @PropertySource
来指定获取该自定义配置文件的信息。
希望各位屏幕前的靓仔靓女们
给个三连!你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!
咱们下期再见!
关键词:
上一篇:最新快讯!李发彬夺冠视频_李发斌
- 深圳医保政策修订 10 月 1 日起实施
- 2023年聚碳酸酯行业股票有哪些?(9月9日)
- 这些是三星在 2023 年申请的一些最奇怪的商标
- 中国5000年绘画史——历代名家:北宋·王希孟
- “钻石恒久远”神话破灭?
- 联合会杯赛程(关于联合会杯赛程的基本详情介绍)
- 宁夏首届残特奥运动会在中卫举行
- 强纶新材全资子公司拟向银行申请1000万贷款 实控人黄朝强、黄昊辰、方惠会提供连带责任保证
-
演讲稿我心目中的好老师范文 演讲稿我心目中的好老师
0471房产来为大家解答以上的问题。演讲稿我心目中的好老师范文,演讲稿
-
崩坏3长夜红月兑换码是什么 具体一览
如果你想要找一款有着超多玩法的游戏,那么一定就是崩坏3。游戏中长夜
-
哀牢山下的“人生赢家”
清晨的阳光穿透云层,洒向哀牢山脚。正值秋收季节,李正华起了个大早,
-
以后再也不怕下雨晒太阳啦
作者:小狐狸呼呼呼 霸道来袭!8骨大号全自动雨伞女酷帅男通杀!遮风挡
X 关闭
X 关闭