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

1. 直接获取方式

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

server:  port: 8001# 配置微服务的地址url:  # 自收银微服务的地址  payUrl: http://localhost:8007

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

package com.bowen.controller;import com.bowen.config.MicroServiceUrl;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;import javax.annotation.Resource;/** * 

springboot-study

 * 

配置类Controller

 * @author : zhang.bw * @date : 2020-07-17 21:37 **/@RestController@RequestMapping("/micro")public class ConfigController {    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigController.class);    @Value("${url.payUrl}")    private String payUrl;    @RequestMapping("/config")    public String testConfig() {        // 直接获取        LOGGER.info("获取的自收银服务地址为:{}", payUrl);        return "success";    }}

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

浏览器请求

控制台结果

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

2. 使用配置类来获取

但是,随着业务复杂度的增加,一个项目中可能会有越来越多的微服务,某个模块可能需要调用多个微服务获取不同的信息,那么就需要在配置文件中配置多个微服务的地址。可是,在需要调用这些微服务的代码中,如果这样一个个去使用 @Value 注解引入相应的微服务地址的话,太过于繁琐,也不科学。

所以,在实际项目中,业务繁琐,逻辑复杂的情况下,需要考虑封装一个或多个配置类。举个例子:假如在当前服务中,某个业务需要同时调用自收银微服务、店铺微服务和购物车微服务,分别获取付款、店铺和购物车相关信息,然后对这些信息做一定的逻辑处理。那么在配置文件中,我们需要将这些微服务的地址都配置好:

# 配置微服务的地址url:  # 自收银微服务的地址  payUrl: http://localhost:8007  # 店铺微服务的地址  shopUrl: http://localhost:8008  # 购物车微服务的地址  shoppingUrl: http://localhost:8009

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

package com.bowen.config;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;/** * 

springboot-study

 * 

配置类

 * @author : zhang.bw * @date : 2020-07-24 21:37 **/@Component@ConfigurationProperties(prefix = "url")public class MicroServiceUrl {    /**     * 自收银url     */    private String payUrl;    /**     * 店铺url     */    private String shopUrl;    /**     * 购物车url     */    private String shoppingUrl;    public String getPayUrl() {        return payUrl;    }    public void setPayUrl(String payUrl) {        this.payUrl = payUrl;    }    public String getShopUrl() {        return shopUrl;    }    public void setShopUrl(String shopUrl) {        this.shopUrl = shopUrl;    }    public String getShoppingUrl() {        return shoppingUrl;    }    public void setShoppingUrl(String shoppingUrl) {        this.shoppingUrl = shoppingUrl;    }}

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

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

    org.springframework.boot    spring-boot-configuration-processor    true

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

package com.bowen.controller;import com.bowen.config.MicroServiceUrl;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;import javax.annotation.Resource;/** * 

springboot-study

 * 

配置类Controller

 * @author : zhang.bw * @date : 2020-07-17 21:37 **/@RestController@RequestMapping("/micro")public class ConfigController {    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigController.class);    @Resource    private MicroServiceUrl microServiceUrl;    @RequestMapping("/config")    public String testConfig() {        // 使用配置类来获取        LOGGER.info("获取的自收银服务地址为:{}", microServiceUrl.getPayUrl());        LOGGER.info("获取的店铺服务地址为:{}", microServiceUrl.getShopUrl());        LOGGER.info("获取的购物车服务地址为:{}", microServiceUrl.getShoppingUrl());        return "success";    }}

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

浏览器请求

3. 指定项目配置文件

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

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

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

# 开发环境配置文件server:  port: 8001
# 生产环境配置文件server:  port: 8002

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

# 指定读取配置文件:dev(开发环境),prd(生产环境)spring:  profiles:    active:    - dev

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

4. 总结

本节课程主要介绍了Spring Boot 项目属性配置,包括直接获取方式、使用配置类来获取、指定项目配置文件等,均进行了详细的讲解,相信大家经过此次课程学习后,对如何进行属性配置有了清楚的了解。

5. 源码获取

我是猿人,一个在互联网打拼的工具人,Java研究猿,感谢各位点赞、收藏和评论,我们下期见!
文章持续更新,可以 私信 001 免费获取源码和文档!

requestmapping配置页面后_第004课:Spring Boot 项目属性配置相关推荐

  1. requestmapping配置页面后_@RequestMapping使用须知

    ----------------------siwuxie095 @RequestMapping 使用须知 使用 @RequestMapping 注解映射请求路径 即 你可以使用 @RequestMa ...

  2. requestmapping配置页面后_@RequestMapping接口及页面乱码问题

    老师 对接口及乱码问题请教 接口问题 @RequestMapping("upload.do") @ResponseBody public ServerResponse upload ...

  3. IDEA右键快捷创建Xml文件模板 IDEA如何创建xml文件 Spring boot项目xml配置类模板

    可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如 ...

  4. security面试_精选41 道 Spring Boot 面试题,附答案!

    今天跟大家分享下SpringBoot 常见面试题的知识. 1 什么是springboot ? 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件 ...

  5. Spring Boot的自动化配置原理

    转载自 Spring Boot的自动化配置原理 随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得格外笨重.繁多的配置.低下的开发效率.复杂的部署流程以及第三方技术集成难度大等问 ...

  6. springboot 获取application参数_(最新 9000 字 )Spring Boot 配置特性解析

    一.概述 目前Spring Boot版本: 2.3.4.RELEASE,这更新的速度也是嗖嗖的了,随着新版本的发布,也一步步针对公司基础组件进行了升级改造,其中很重要的一块就是配置文件的更新(虽然目前 ...

  7. springboot生成包含特定数字_面试必问 —— Spring Boot 是如何实现自动配置的?

    什么是@Conditional? AutoConfigure源码分析 自动配置类中的条件注解 <Netty 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 ...

  8. springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题

    如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15  14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) ​ 针对图中所示的 ...

  9. springboot导入项目依赖报错_最详细的 Spring Boot 多模块开发与排坑指南

    来源于公众未读代码 , 作者达西呀 创建项目 创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提.你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创 ...

最新文章

  1. laravel mysql like_Laravel数据库查询中对 like 的值进行转义
  2. linux ppp拨号 socket,请问GPRS模块ppp拨号不成功是什么原因
  3. oracle递归查询子节点
  4. PHP生成静态HTML的源代码及用法
  5. 极客Python进阶训练学习手册
  6. 使用CreateFile读写文件
  7. Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)
  8. Separate Query from Modifier(分离查询和修改)
  9. php负载均衡原理_负载均衡的原理(通俗理解)
  10. dry的原理_速干面料的原理
  11. 数据库-mysql概述
  12. oracle10g 如何打开,oracle10g  oem无法打开解决方法
  13. Java 面向对象 之 封装方法
  14. mysql unsigend_创建表 查询数据
  15. 计算机图标制作教程,电脑主题ICO图标制作方法 详细教程你一学就会
  16. 由我国科学家研制的计算机,由我国科学家研制的系列超级计算机综合技术处于国际领先水平,2015年11月,全球超级计算机...
  17. gmp php study,[技术干货] USP中文翻译连载 | 产品生命周期的包装密封性检查 (1、2之3)...
  18. 红手指云手机屏蔽方案
  19. 清华大学2020年“姚班”“智班”报考指南及选拔方案发布!
  20. 35Java抽象类与抽象方法

热门文章

  1. 经典线程同步 互斥量Mutex的使用分析
  2. Rpc远程调用框架的设计与实现(2)
  3. 使用jsoncpp解析json文件
  4. mysql 临时表 事务_MySQL学习笔记十:游标/动态SQL/临时表/事务
  5. vue 多点触控手势_移动端手势事件(多指操作)
  6. 传感器怎么获取障碍物的宽度信息_机器人感知 -- 测距传感器
  7. python链表值讲解_python数据结构之链表的实例讲解
  8. pandownload网页服务器维护,PanDownload
  9. Mac使用ssh公钥免密登录服务器
  10. ThinkPHP链接 PgSQL