我们知道,在项目中,很多时候需要用到一些配置的东西,这些东西可能在测试环境和生产环境下会有不同的配置,后面也有可能会做修改,所以我们不能在代码中写死,要写到配置中。我们可以把这些内容写到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);@Resourceprivate MicroServiceUrl microServiceUrl;@RequestMapping("/config")public String testConfig() {LOGGER.info("=====获取的订单服务地址为:{}", microServiceUrl.getOrderUrl());LOGGER.info("=====获取的用户服务地址为:{}", microServiceUrl.getUserUrl());LOGGER.info("=====获取的购物车服务地址为:{}", microServiceUrl.getShoppingUrl());return "success";}
}

关注小编

可获得两大新人礼包

36份一线互联网Java面试电子书

84个Java稀缺面试题视频

地址:http://yunxi.ai/java/java.html

转载于:https://blog.51cto.com/13672983/2128157

SpringBoot项目属性配置相关推荐

  1. spring boot学习(2) SpringBoot 项目属性配置

    第一节:项目内置属性 application.properties配置整个项目的,相当于以前的web.xml: 注意到上一节的访问HelloWorld时,项目路径也没有加:直接是http://loca ...

  2. dev项目属性按钮是灰色_Spring Boot 中的项目属性配置

    阅读本文约需要5分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了Spring Boot 如何使用 SLF4J 进行日志记 ...

  3. SpringBoot简明教程之项目属性配置(二):@ConfigurationProperties与@Value简单比较

    前文回顾 @ConfigurationProperties与@Value简单比较 如何通过@Value来实现注入值 是否支持松散绑定(Relaxed Binding) 是否支持SpEL语法 是否支持J ...

  4. requestmapping配置页面后_第004课:Spring Boot 项目属性配置

    在项目中,很多时候需要用到一些配置的信息,这些信息可能在测试环境和生产环境下会有不同的配置,后面根据实际业务情况有可能还会做修改,针对这种情况,我们不能将这些配置在代码中写死,最好就是写到配置文件中. ...

  5. springboot项目接入配置中心,实现@ConfigurationProperties的bean属性刷新方案

    前言 配置中心,通过key=value的形式存储环境变量.配置中心的属性做了修改,项目中可以通过配置中心的依赖(sdk)立即感知到.需要做的就是如何在属性发生变化时,改变带有@Configuratio ...

  6. SpringBoot项目实现配置实时刷新功能

    需求描述:在SpringBoot项目中,一般业务配置都是写死在配置文件中的,如果某个业务配置想修改,就得重启项目.这在生产环境是不被允许的,这就需要通过技术手段做到配置变更后即使生效.下面就来看一下怎 ...

  7. SpringBoot项目端点配置

    端点配置 开启端点 在SpringBoot中开启应用监控非常容易,只需要添加spring-boot-starter-actuator依赖即可,actuator(执行器)是制造业术语, 指一个用于移动或 ...

  8. vs2010项目属性配置

    VS vs2010使用方案管理项目,一个解决方案下可包含多个项目. 默认情况下,项目属性的设置的目录起点为项目配置文件所在的位置,实际上就是项目头文件和源文件所在的位置. vs2010中默认建立C++ ...

  9. 【VS】项目属性配置(上)

    首先,我们一般不会修改解决方案的属性,而是设置每个项目各自的属性. 接着上一篇文章,我们来看看我们应该怎样来设置各项目的项目属性更好: 我们以NYOJ_001项目的Debug版的设置为例: 在常规选项 ...

最新文章

  1. C# Note34: 异常机制相关小点
  2. filezilla 定时上传_FileZilla Server安装教程 - FtpCopy数据自动备份软件(FTP定时备份)|FTP自动下载|FTP自动上传|FTP自动备份...
  3. CPU缓存一致性协议MESI
  4. Spring系列(八):Spring生命周期中BeanPostProcessor接口用法介绍
  5. EasyExcel项目使用
  6. 工业互联网解决方案创新应用报告(2020)
  7. 马哥Linux--elasticsearch
  8. 定速巡航和自适应定速巡航有什么区别,开关分别是什么样的?
  9. linux如何运行java程序,Linux环境下运行简单java程序
  10. mysql返回李连杰的姓_李连杰:我爷爷不姓李,说出名字后害怕你们没胆量播出去...
  11. linux下mysql,linux下mysql的装配
  12. In-App Purchase 实战
  13. java中while的用法案例_Java While循环 do-while循环用法
  14. Qt滚动区域QScrollArea
  15. python数据分析案例实战——融360客户贷款风险预测(信用卡)
  16. linux pv 文件夹,Linux 实用命令 - pv
  17. 使用OneNote多人分布式共享
  18. html 边框终点 圆点,CSS设置虚线或虚边框dashed border
  19. HTTP的请求相应过程
  20. JavaMai——邮箱验证用户注册

热门文章

  1. CUL8R的完整形式是什么?
  2. 第九章 魔法方法、特性和迭代器
  3. 四、纤维素纤维使用P-N系阻燃剂协同作用的原理?
  4. python datatime 平均值_python求数据的时间平均
  5. mysql row_id为什么是6字节?为什么是8字节
  6. 框架controller找不到_SpingBoot框架知识详解
  7. LeetCode【1--两数之和】 LeetCode【2--两数相加】
  8. Linux系统编程---11(会话,守护进程,创建守护进程)
  9. 交叉编译openssl不修改Makefile的方法
  10. Linux网络编程——tcp并发服务器(I/O复用之select