SpringBoot项目属性配置
2018-06-18 00:13:08来源:未知 阅读 ()
我们知道,在项目中,很多时候需要用到一些配置的东西,这些东西可能在测试环境和生产环境下会有不同的配置,后面也有可能会做修改,所以我们不能在代码中写死,要写到配置中。我们可以把这些内容写到application.yml文件中。
举个例子,在微服务架构中,某个服务经常会调用其他服务来获取相关信息,那么需要配置其他服务的地址,我们可以做如下配置:
server: port: 8001 # 配置多个微服务的地址 url: # 订单微服务的地址 orderUrl: http://localhost:8002 # 用户微服务的地址 userUrl: http://localhost:8003 # 购物车微服务的地址 shoppingUrl: http://localhost:8004
然后在代码中如何获取到这些配置内容呢?我们在属性上使用@Value
注解即可获取到,如下:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/test") public class TestController { private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class); @Value("${url.orderUrl}") private String orderUrl; @Value("${url.userUrl}") private String userUrl; @Value("${url.shoppingUrl}") private String shoppingUrl; @RequestMapping("/config") public String testConfig() { LOGGER.info("=====获取的订单服务地址为:{}", orderUrl); LOGGER.info("=====获取的用户服务地址为:{}", userUrl); LOGGER.info("=====获取的购物车服务地址为:{}", shoppingUrl); return "success"; } }
很简单,请求一下该8001端口的服务后,可以看到控制台会打印出三个服务的地址,在实际项目中也是这么用的,后面如果因为服务器部署的原因,需要修改某个服务的地址,那么只要在配置文件中修改即可。
这里再引申一个问题,随着业务复杂度的增加,一个项目中可能会有越来越多的微服务,那么代码中,如果这样一个个去使用@Value
注解引入的话,太繁琐,也不科学。所以可以考虑封装一个配置类。
/** * @author shengwu ni * @date 2018/06/11 */ @Component @ConfigurationProperties(prefix = "url") public class MicroServiceUrl { private String orderUrl; private String userUrl; private String shoppingUrl; // 省去get和set方法 }
使用@ConfigurationProperties
注解可以指定一个前缀,然后该类中的属性名就是配置中去掉前缀后的名字,一一对应即可。同时,该类上面需要加上@Component
注解,作为组件放到Spring容器中。对了,使用@ConfigurationProperties
需要导入一个依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
OK,再写个Controller来测试一下,此时,不需要再一个个引入了,直接通过@Resource注解将刚刚的配置类注入进来即可使用了,非常方便。如下:
@RestController @RequestMapping("/test") public class TestController { private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class); @Resource private MicroServiceUrl microServiceUrl; @RequestMapping("/config") public String testConfig() { LOGGER.info("=====获取的订单服务地址为:{}", microServiceUrl.getOrderUrl()); LOGGER.info("=====获取的用户服务地址为:{}", microServiceUrl.getUserUrl()); LOGGER.info("=====获取的购物车服务地址为:{}", microServiceUrl.getShoppingUrl()); return "success"; } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 项目经理说这种代码必须重构,我同意了,这代码是写的是有多 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
- nacos~配置中心功能~springboot的支持 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash