阅读本文约需要5分钟

大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了Spring Boot 如何使用 SLF4J 进行日志记录,今天跟大家分享一下 Spring Boot 中的项目属性配置。

我们知道,在项目中,很多时候需要用到一些配置信息,这些信息在测试环境和生产环境下可能会有不同的配置,后面根据实际业务情况有可能还需要再做修改。

针对这种情况,我们不能将这些配置在代码中写死,最好是写到配置文件中,比如可以把这些信息写到 application.yml 文件中,本文就来讲解在 Spring Boot 中项目属性的配置过程。

1. 单一服务的配置和调用

举个例子,在微服务架构中,最常见的就是某个服务需要调用其他服务来获取其提供的相关信息,那么在该服务的配置文件中需要配置被调用服务的地址。比如在当前服务里,我们需要调用订单微服务获取订单相关的信息,假设订单服务的端口号是 8002,我们可以做如下配置:

那在业务代码中,如何获取到这个配置的订单服务地址呢?我们可以使用 @Value 注解来解决。在对应的类中加上一个属性,在属性上使用 @Value 注解即可获取到配置文件中的配置信息,如下:

@Value 注解上通过 ${key} 即可获取配置文件中和 key 对应的 value 值。我们启动项目,在浏览器中输入:localhost:8080/test/config,请求服务后,可以看到控制台打印出了订单服务的地址。

=====获取的订单服务地址为:http://localhost:8002

这说明我们成功获取到了配置文件中的订单微服务地址,在实际项目中也是这样使用的。后面如果因为服务器部署的原因,需要修改某个服务的地址,只要在配置文件中修改即可。

2. 多项服务的配置和调用

这里再引申一个问题,随着业务复杂度的增加,一个项目中可能会有越来越多的微服务,某个模块可能需要调用多个微服务获取不同的信息,那么就需要在配置文件中配置多个微服务的地址。

可是,在需要调用这些微服务的代码中,如果这样一个个去使用 @Value 注解引入相应的微服务地址,太过于繁琐,也不科学。所以,在实际项目中,遇到业务繁琐、逻辑复杂的情况,需要考虑封装一个或多个配置类。

举个例子,假如在当前服务中,某个业务需要同时调用订单微服务、用户微服务和购物车微服务,分别获取订单、用户和购物车相关信息,然后对这些信息做一定的逻辑处理。那么在配置文件中,我们需要将这些微服务的地址都配置好:

也许实际业务中,远远不止这三个微服务,甚至十几个都有可能。对于这种情况,我们可以先定义一个 MicroServiceUrl 类来专门保存微服务的 URL,如下:

细心的朋友应该可以看到,使用 @ConfigurationProperties 注解并使用 prefix 指定一个前缀,那么该类中的属性名就是配置中去掉前缀后的名字,一一对应即可,即前缀名 + 属性名就是配置文件中定义的 key。同时,该类上面需要加上 @Component 注解,把该类作为组件放到 Spring 容器中,让 Spring 去管理,我们使用的时候直接注入即可。

需要注意的是,使用 @ConfigurationProperties 注解需要导入它的依赖:

到此为止,我们将配置写好了,接下来写个 Controller 测试一下。此时,不需要在代码中一个个引入这些微服务的 URL,直接通过 @Resource 注解将刚刚写好的配置类注入进来即可使用了,非常方便。如下:

再次启动项目,请求一下可以看到,控制台打印出如下信息,说明配置文件生效,同时正确获取配置文件内容:

3. 指定项目配置文件

我们知道,在实际项目中,一般有两个环境:开发环境和生产环境。开发环境中的配置和生产环境中的配置往往不同,比如环境、端口、数据库、相关地址,等等。我们不可能在开发环境调试好之后,部署到生产环境后,又要将配置信息全部修改成生产环境上的配置,这样太麻烦,也不科学。

最好的解决方法就是针对开发环境和生产环境分别创建一套配置信息,当我们在开发时,指定读取开发环境的配置,当我们将项目部署到服务器上之后,再指定去读取生产环境的配置。

我们新建两个配置文件:application-dev.yml 和 application-pro.yml,分别用来对开发环境和生产环境进行相关配置。这里为了方便,我们分别设置两个访问端口号,开发环境用 8001,生产环境用 8002。

然后在 application.yml 文件中指定读取哪个配置文件即可。比如我们在开发环境下,指定读取 applicationn-dev.yml 文件,如下:

这样就可以在开发的时候,指定读取 application-dev.yml 文件,访问的时候使用 8001 端口;部署到服务器后,只需要将 application.yml 中指定的文件改成 application-pro.yml 即可,然后使用 8002 端口访问,非常方便。

今天就分享到这,今日留言话题:Springboot项目属性配置你们学会了吗?对有价值的留言,我们都会一一回复的。如果觉得对你有一丢丢帮助,请点右下角【在看】,让更多人看到该文章。

dev项目属性按钮是灰色_Spring Boot 中的项目属性配置相关推荐

  1. java项目启动后运行方法_spring boot在启动项目之后执行的实现方法

    前言 我们在web项目启动之后有时候还会做点其它的东西(比如,导入数据脚本),下面就说说spring-boot里怎么在程序启动后加入自己要执行的东西 方法如下: 新建一个类:BeforeStartup ...

  2. Spring Boot中的一些常用配置介绍!

    这篇教程将为你介绍Spring Boot 中的一些常用配置,比如:自定义 Banner.配置日志.关闭特定的自动配置等. 自定义Banner 在 Spring Boot 启动的时候会有一个默认的启动图 ...

  3. Spring Boot中的application.properties配置简介(二)

    Spring Boot中的application.properties配置简介(二)   根据上文的介绍,我们已经对Spring Boot中的application.properties配置有了一定的 ...

  4. java 方式配置ssm,关于SSM以及Spring boot中对于Spring MVC配置的问题

    SSM中 Spring MVC配置 传统的web.xml配置 web.xml contextConfigLocation classpath*:applicationContext.xml org.s ...

  5. php中align标签属性值,html align属性是什么含义?html中的align属性设置方法介绍

    html align属性是什么含义?html中的align属性设置方法介绍都在这里,本篇文章介绍了html align属性的定义和含义,还有关于html align属性值的设置介绍 html alig ...

  6. php中align是什么意思,htmlalign属性是什么含义?html中的align属性设置方法介绍

    html align属性是什么含义?html中的align属性设置方法介绍都在这里,本篇文章介绍了html align属性的定义和含义,还有关于html align属性值的设置介绍 html alig ...

  7. dev项目属性按钮是灰色_如何当按钮处于各种交互状态时具有不同样式的按钮?...

    Axure RP 9 for Mac是一款交互式原型设计神器,使用axure rp9以最佳的方式展示您的作品,优化现代浏览器并为现代工作流程设计.同时确保您的解决方案正确完整地构建.在本篇文章中,我们 ...

  8. webbrowser中localhost和发布的地址_004、Spring Boot中的项目属性配置

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

  9. springboot学习_Spring Boot 开源学习项目代码日爆爆爆

    最新要学习 Spring Boot ,以前也用过部分的框架爱,最近试用之后便一发不可收拾的爱上它.使用 Spring Boot 来开发项目则只需要非常少的几个配置就可以搭建起来一个 Web 项目,并且 ...

最新文章

  1. 改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜
  2. 同域内测试蠕虫的一种方法
  3. python和c学习-学习 Python与C相互调用
  4. 水杯测试----误人子弟啊!
  5. 测试框架 Jest 实例教程
  6. 子串字谜substring anagrams
  7. javaweb mysql 连接池 c3p0 配置_C3P0连接池详细配置与实现(2)全局使用
  8. jquery queue ajax,如何通过jQuery和Queue发送ajax请求?
  9. 【学亮IT手记】jQuery DOM删除操作
  10. cad工具箱详细讲解_好用的cad工具箱 易桥CAD工具箱使用教程(附下载)
  11. 怎么同时给多个 Word 文档批量添加自定义的文字和图片水印
  12. ESP8266制作创意时钟(DS1302+TM1637)
  13. android安装到内存卡,android手机怎么把软件安装到内存卡里
  14. 买了智能电视之后还需要购买搭配机顶盒吗?
  15. 买服务器挂网站吗,云服务器 挂网站吗
  16. 微信IOS访问页面,返回的时候页面空白
  17. idr寄存器、_STM32中的IDR和ODR寄存器
  18. PMP项目经理求职面试常见问题汇总
  19. Hyperledger Fabric 实战(十二): Fabric 源码本地调试
  20. 关于移动支付,美国零售商能从中国这里学到什么?

热门文章

  1. (转)Some awareness before migrating from x86 to x64
  2. GWT(Google Web Tookit) Eclipse Plugin的zip下载地址(同时提供GWT Designer下载地址)
  3. AdoHelper使用MySQL存储过程示例
  4. nacos 怎么配置 里的配置ip_nacos集群配置
  5. spark mysql 交互_Spark - 直接操作数据源 MySQL
  6. linux la 的使用方法,Linux简介及常用命令使用4--linux高级命令与技巧(示例代码)
  7. 图书管理系统可行性分析报告范例_会做可行性分析报告贺州专家团队*金
  8. python如何查看有什么模块_在python中如何查看模块功能
  9. linux启动php服务_群晖docker 实现nodejs为后端的简单web服务器 并连接数据库
  10. 吴恩达《机器学习》学习笔记五——逻辑回归