咨询热线:15565668898 联系人:潜龙军 地址:西藏自治省拉萨市色拉路第六安居园
补习系列(10)-springboot 之配置读取
来源:星投娱乐最新客服 发布时间:2019-11-08 点击量:220
目录
简介一、配置样例二、如何注入配置1. 缺省配置文件2. 使用注解3. 启动参数还有..三、如何读取配置@Value 注解Environment 接口@ConfigurationProperties 注解四、不同环境中的配置1. 区别开发、测试、发布环境2. 声明多配置文件参考文档简介
在早前的博客中曾经写过 Spring 程序通过 Bean 映射实现配置信息的读取。在SpringBoot 框架中读取配置的方式变得非常多样,这导致读者在搜寻资料时反而容易迷糊。
到底,SpringBoot 是按什么顺序加载配置?相应的,我们该选择什么样的方式去读取?一、配置样例
先看一个例子:
@Compomentpublic class BuildConfig{ @Value("${buildinfo.version") private String version; ...}
代码中,@Component 将 BuildConfig 注册为 Bean ,接下来使用 @Value 注解,将 配置中的 buildinfo.version键映射到了 version 字段上。
我们都知道,通过 application.properties 可以方便的配置一些属性。属性的值是支持变量替换的,如下:
myName=LileimyDesc=${myName} is a good man
这点,是由 SpringBoot 自动生成的 PropertyPlaceholderConfigurer 对象实现的。
除了 上面所说 application.properties 之外,还有什么途径?下面介绍如何注入配置
二、如何注入配置
1. 缺省配置文件
类路径中 application.properties(yml) 是默认的配置文件。此外如果启动应用时,当前目录中存在同名的配置文件,则以此优先。
在此规则之下,SpringBoot 还能识别不同 profile下的配置,这将在后面篇幅中介绍。
2. 使用注解
@PropertySource
可指定属性配置文件的位置,样例代码:
@Configuration@PropertySource("classpath:/com/myco/app.properties")public class AppConfig { @Autowired Environment env; @Bean public TestBean testBean() { TestBean testBean = new TestBean(); testBean.setName(env.getProperty("testbean.name")); return testBean; }}
@TestPropertySource
与 @PropertySource 类似,该注解用于指定测试环境中的属性文件,其优先级高于 @PropertySource。
3. 启动参数
以下的命令以指定参数启动 SpringBoot 应用
java -jar application.jar --server.port=9000
server.port 值将被注入为环境属性值。
而以下的命令还可以指定 配置文件的位置
java -jar application.jar --spring.config.location=/etc/xxx.properties
这个spring.config.location就是指的配置文件位置,默认情况下,SpringBoot 会从下面几路径找到配置文件:
路径 |
---|
file:./config/ |
file:./ |
classpath:/config/ |
classpath:/ |
还有..
SpringBoot 注入配置的方式其实非常多,完整顺序如下表:
优先级 | 配置 |
---|---|
1 | @TestPropertySource 注解 |
2 | @SpringBootTest 注解 |
3 | 命令行参数 |
4 | SPRING_APPLICATION_JSON 属性值(或环境变量) |
5 | Servlet 相关参数 |
6 | JNDI 属性 |
7 | Java 系统属性 (System.getProperties()) |
8 | 操作系统环境变量 |
9 | RandomValuePropertySource 随机属性 |
10 | Jar包外部 application-{profile}.properties |
11 | Jar包内部 application-{profile}.properties |
12 | Jar包外部 application.properties |
13 | Jar包内部 application.properties |
14 | @PropertySource 注解 |
15 | SpringApplication 默认值 |
三、如何读取配置
@Value 注解
如以下的实现:
@Configurationpublic class AppConfig { @Value("${api.log.enabled:false}") private boolean apiLogEnabled;
除了类型自动转换之外,通过:false后缀可以指定默认值。
Environment 接口
Environment 是一个类似 Properties 的接口,用来获取属性非常方便。
@Configurationpublic class AppConfig { @Autowired private Environment environment; public String getApplicationId() { return this.environment.getProperty("application.id"); }}
@ConfigurationProperties 注解
该注解一般用作前缀匹配,下面的代码摘自Mongodb
@ConfigurationProperties(prefix = "spring.data.mongodb")public class MongoProperties { /** * Mongo server host. */ private String host; /** * Mongo server port. */ private Integer port = null; /** * Database name. */ private String database;
相应的 Mongodb 配置信息如:
spring.data.mongodb.host=127.0.0.1spring.data.mongodb.port=27017spring.data.mongodb.database=xxx
四、不同环境中的配置
Spring 提供了 Profile 机制用于管理不同环境的配置。
配置内容可以是 Java Config(对应@Component或@Configuration),也可以是配置文件。如:
@Configuration@Profile("prod")public class ProdConfiguration { // ...}
通过@Profile注解可将代码配置关联到某个配置环境
在具体应用中,Profile的用途通常有二:
1. 区别开发、测试、发布环境
对于dev、prod、test分别做不同的配置
//for devapplication-dev.properties//for prodapplication-prod.properties//for testapplication-test.properties
可以在 application.properties 指定启用的环境:
spring.profiles.active=dev
也可以通过命令行指定:
java -jar app.jar --spring.profiles.active=prod
2. 声明多配置文件
当内容过多时,可以将配置信息进行拆分,如下:
application-mongodb.properties
spring.data.mongodb.host=127.0.0.1spring.data.mongodb.port=27017spring.data.mongodb.username=xxxspring.data.mongodb.password=xxxspring.data.mongodb.database=xxx
application-mail.properties
spring.mail.host=xxxspring.mail.username=xxxspring.mail.password=xxxspring.mail.from=xxxspring.mail.to=xxxspring.mail.cc=xxx
在主配置文件指定包含关系:
application.properties
spring.profiles.include=mongodb,mail
参考文档
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.htmlhttps://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
欢迎继续关注"美码师的补习系列-springboot篇" ,如果觉得老司机的文章还不赖,请多多分享转发^-^
相关产品
-
黑龙潭景区峡谷两壁陡峭奇耸,三瀑十八潭贯穿在其中,集新、奇、险为一体,行在其中尽享视听盛宴。新颖的特色景观绝无重复之感,大自然的鬼斧神工让幽深的峡谷奇趣十足、神秘莫测。最刺激的莫过于穿梭在急旋的潭水和陡峭的峰崖间,谷深路窄,猿啸山涧,大有“铤而走险”的意味。春季山花烂漫,登山踏青的同时可以欣赏到杏花、桃花、映山红等,呼吸山野间的新鲜空气,感受深山里的花花世界。
-
这下好了,该男子见小王彻底晕了,索性叫来了自己的朋友。果然,过了几分钟,又有一名中年男子进店,以相同的手法操作,分两次点了牛肉面和两份汤包,在反复给了整钱又发现零钱以及催促找零钱、找多少钱间,收银员小王彻底糊涂了,于是该男子成功取回掏出的200元,还让收银员找了175元。走后没多久,第一名男子再次折返称要给朋友带饭,于是又以同样的方式,骗了小王两次。
-
流动性紧张,导致宏观经济数据低于预期。令不少人担忧的是,这种经济增速下降的趋势在短期内仍将延续下去,因此,不少投行已经修订了中国今年上半年乃至全年的经济增长预期。
-
据《华盛顿观察家报》分析,若要落实塞尔瓦的要求,美军或将在目前已有的B-61型自由落体炸弹的基础上进行升级,在使用时可以任意选择炸弹当量,以灵活控制炸弹威力。
-
在保养方面,爱丽舍享受厂家提供的两年或6万公里整车质保,新车行驶3000公里时可以到店进行首次保养,之后每行驶1.5万公里做一次常规保养,常规保养含更换机油、机滤、材料费及人工工时费在内价格为260元左右。大保养周期视车况而定,一般更换机油、三滤的价格在400元左右。
-
爱体迷负责人告诉记者,这类观赛模式纳入了距离和属性两种维度,球迷免去主客场比赛奔波的同时,也可以根据自己的爱好、需求选择相应的观赛场景。据分析,在获得中超联赛公共区域版权的授权后,专营的观赛场所将有利于丰富中超赛事比赛日收入的内容,也为巨大的球迷流量创造场景化消费新入口。
-
后来,一个同样是电影学博士出身的影评人灰狼找到了毕志飞的北大博士论文,在自媒体账号“枪稿”发布文章,提出了多处质疑,并称毕志飞为“百度百科搬运工”。还有人发现了毕志飞岳父的富豪身份,猜测这位富豪岳父可能在背后为毕志飞铺路。
-
再度来到《最强大脑》,周杰伦不忘调侃一下老朋友魏坤琳教授,一出场就笑称:“音乐是我评判的唯一标准。”在去年第一季节目时,周杰伦曾表示,“只要有音乐类的挑战都想试试。”他还调侃称,“背歌词我一定输,我自己的歌词我都记不住,别的不管做什么,一定要成功! ”于是,这一次再度加盟,节目组特别为他设计了独家挑战“倒走黑白键”:琴师倒着弹一首他的歌曲,周杰伦听完就要说出歌名。面对难度直线上升的全新难题,坐上挑战位的周杰伦笑称:“完全没有准备好。 ”
热点资讯
- [포토]라틀리프,기선제압선제골2019-06-18
- 滴滴9月15日恢复深夜出行服务,试行夜运营规则2019-10-29
- 即时通讯App怎样才能火?背后的技术原理,可以从这5个角度切入2019-10-30
- 打捞队起诉滴滴索要百万赔偿进展:滴滴捐赠百万救援器材2019-06-18
- 海口:湿地展新颜百姓得实惠2019-06-18
- 四川警方破获网络传播淫秽物品大案查获淫秽视频15万多部2019-11-07
- Python爬虫入门(一)——爬取糗百2019-11-07
- 安庆市委宣传部原常务副部长获刑五年:怕败露以“退赃”避责2019-10-29