摘要:全局配置文件默认为下的,另外它还可以重命名为格式即对着两种格式均支持。其中每个环境的数据库地址服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。
SpringBoot全局配置文件默认为src/main/resources下的application.properties,另外它还可以重命名为.yml格式(即SpringBoot对着两种格式均支持)。
修改默认配置如修改SpringBoot内嵌Tomcat的启动端口为9080(.yml格式)
server: port: 9080
启动项目即可在控制台启动日志中看到
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 9080 (http)
这时在浏览器输入localhost:9080即可正常访问
附SpringBoot Common application properties
我们也可以在SpringBoot配置文件中自定义属性配置,如
girl: name: baby age: 18 cupSize: B
然后通过@Value("${属性名}")注解来加载对应的配置属性
package cn.fulgens.springboot.springbootconfig.web; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @Value("${girl.name}") private String girlName; @Value("${girl.age}") private Integer girlAge; @Value("${girl.cupSize}") private String girlCupSize; @GetMapping("/girl") public String girl() { return "girlName: " + girlName + " girlAge: " + girlAge + " girlCupSize: " + girlCupSize; } }
启动工程,访问:localhost:9080/girl,浏览器显示:
girlName: baby girlAge: 18 girlCupSize: B
属性注入成功
属性配置间的引用在SpringBoot全局配置文件中的各个属性之间可以通过直接引用来使用
girl: name: baby age: 18 cupSize: B desc: ${girl.name} ${girl.age} ${girl.cupSize}
同样可以使用@Value注解将girl.desc属性配置注入到某一属性中,如
@RestController public class HelloController { @Value("${girl.name}") private String girlName; @Value("${girl.age}") private Integer girlAge; @Value("${girl.cupSize}") private String girlCupSize; @Value("${girl.desc}") private String girlDesc; @GetMapping("/girl") public String girl() { // return "girlName: " + girlName + " girlAge: " + girlAge + " girlCupSize: " + girlCupSize; return girlDesc; } }
再次启动工程,访问:localhost:9080/girl,浏览器显示:
baby 18 B将属性配置赋给实体类
当我们属性配置很多的时候,使用@Value注解一个一个的注入将会变得很繁琐,这时SpringBoot提供了将属性配置与实体类结合的方式,具体先来看一下SpringBoot中官方的使用如org.springframework.boot.autoconfigure.data.redis.RedisProperties
package org.springframework.boot.autoconfigure.data.redis; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties( prefix = "spring.redis" ) public class RedisProperties { private int database = 0; private String url; private String host = "localhost"; private String password; private int port = 6379; private boolean ssl; private int timeout; private RedisProperties.Pool pool; private RedisProperties.Sentinel sentinel; private RedisProperties.Cluster cluster; ... }
对于上面我们自己关于girl的一些配置,同理我们可以创建一个GirlProperties类,如
package cn.fulgens.springboot.springbootconfig.properties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @ConfigurationProperties(prefix = "girl") @Component public class GirlProperties { private String name; private Integer age; private String cupSize; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getCupSize() { return cupSize; } public void setCupSize(String cupSize) { this.cupSize = cupSize; } }
注意这里指定了@ConfigurationProperties注解的prefix,同时以上@Component注解可加可不加
有时可能还需要在pom.xml中加上以下依赖
org.springframework.boot spring-boot-configuration-processor true
那么如何使用呢?我们需要在需要使用的类上加@EnableConfigurationProperties注解,同时使用@Autowired注解注入即可,如
package cn.fulgens.springboot.springbootconfig.web; import cn.fulgens.springboot.springbootconfig.properties.GirlProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableConfigurationProperties(GirlProperties.class) public class HelloController { @Autowired private GirlProperties girlProperties; @GetMapping("/girl") public String girl() { return girlProperties.getName() + "--" + girlProperties.getAge() + "--" +girlProperties.getCupSize(); } }
再次启动工程,访问:localhost:9080/girl,浏览器显示:
baby--18--B使用随机值
Spring Boot的属性配置文件中可以通过${random}来产生随机int、long、uuid或者string字符串,来支持属性的随机值。
比如我们给girl随机来个年龄
age: ${random.int}自定义配置文件
虽然SprinBoot提供了application.properties或application.yml全局配置文件,但有时我们还是需要自定义配置文件,如将上文关于girl的属性配置提取到girl.properties文件中,那么如何让spring读取这个属性配置文件呢?答案是使用@PropertySource(value = "classpath:girl.properties")当然如果这样写需要将girl.properties文件放在类路径下
结合属性配置类的用法如下:
@Configuration @PropertySource(value = "classpath:girl.properties") @ConfigurationProperties(prefix = "girl") public class GirlProperties { private String name; private Integer age; private String cupSize; ... }多环境配置
开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-test.yml:测试环境
application-dev.yml:开发环境
application-prod.yml:生产环境
哪个profile会被激活?在application.yml文件中通过spring.profiles.active属性来设置,其值对应{profile}值
这里在类路径下创建application-dev.yml配置server.port为8080,并在application.yml中配置spring.profiles.active为dev
再次启动工程,访问:localhost:8080/girl即可正常访问
参考自
慕课廖师兄girl案例
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76382.html
摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...
摘要:前提好几周没更新博客了,对不断支持我博客的童鞋们说声抱歉了。熟悉我的人都知道我写博客的时间比较早,而且坚持的时间也比较久,一直到现在也是一直保持着更新状态。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好几周没更新博客了,对不断支持我博客的童鞋们说声:抱歉了!。自己这段时...
摘要:代码如下可以看到中一共有个依赖,其中只有是我手动加入的,用于单元测试。点击项目启动按钮,效果如下好的程序必须配备完善的单元测试。测试结果如下可以看到红圈框住的地方,出现这个绿色标志证明单元测试没问题。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的。但是今年这种日子就可能一去不复返了,没...
摘要:本文参考官方文档部分特定版本如版本官方文档地址注本文基于构建话说在上已经有多颗星了,足见火爆程度简介以下介绍引自创建独立的应用程序直接嵌入,或无需部署文件提供自己的入门来简化你的配置尽可能自动配置提供生产就绪功能,如指标,运行 本文参考 Spring Boot官方文档 Part II. Getting Started部分特定版本如1.5.10.RELEASE版本官方文档地址:https...
阅读 3466·2021-11-18 10:02
阅读 3710·2021-09-13 10:25
阅读 1922·2021-07-26 23:38
阅读 2570·2019-08-30 15:44
阅读 2272·2019-08-30 13:51
阅读 1226·2019-08-26 11:35
阅读 2274·2019-08-26 10:29
阅读 3444·2019-08-23 14:56