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

2aa9547c3038f5f90f84f64e54c8abad.gif

阅读本文约需要5分钟

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

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

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

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

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

040fff6c804d8cdaedfe9e543b5164fa.png

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

3114746a8d73a298d6a78733e07aa9c6.png

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

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

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

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

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

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

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

e6a2920065fe5b73f49903f35863de59.png

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

04ddafb05ab50051f512a90da0c97b15.png

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

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

70ad36de17386191467166177d05bb34.png

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

9ed85eb12c31526ff2360139ef328048.png

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

1bcf192626279372b06f7327bfc54b5f.png

3. 指定项目配置文件

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

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

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

65555073d3419b292d6f0d7caf0a1ed3.png

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

15897ef687b060afb2ecbcba32bebf79.png

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

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

8626e5ca95810f1f269943ae45305664.gif

2c6c0fe4af8ef86eeab44bf6a196cc2d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

diskgenius扩容c盘重启电脑卡住_电脑开机显示:reboot and select proper boot device怎么办?...

今天就碰到有一个知友问,自己电脑开机就提示:reboot and select proper boot device,整个人都懵了,不知道怎么办?其实对于电脑出现问题,大家不要着急,坚哥就来为大家分析下原因以及试着去解决。第一种原因…

2019年1月份GitHub上最热门的Java开源项目

相信大多数程序猿们都回归工作岗位啦,不知道是否调整好心态了呢?1月份GitHub上最热门的Java开源项目新鲜出炉,还是一起来看看都有哪些项目上榜吧: 1JavaGuide https://github.com/Snailclimb/JavaGuide Star 22668 【Java学习面试…

大并发下程序出错_Python并发编程理论篇

前言其实关于Python的并发编程是比较难写的一章,因为涉及到的知识很复杂并且理论偏多,所以在这里我尽量的用一些非常简明的语言来尽可能的将它描述清楚,在学习之前首先要记住一个点: 并发编程永远的宗旨就是提高程序的运行效率&am…

2020 idea 查看内存消耗_idea内存如何设置

更具自己硬件环境做出相应的调整.在这里简单说一下这些参数作用以及参考更改参数-Xms768m-Xmx768m-XX:MaxPermSize250m-XX:ReservedCodeCacheSize64m-server-XX:NewSize128m-XX:UseParNewGC-XX:ParallelGCThreads8-XX:UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction60-…

月薪30K程序员花了一个小时,用c++做出经典扫雷游戏 !

上次发过一个俄罗斯方块的游戏源码,由于是通过Easy X实现的,但是很多和我一样的新手,一开始不知道Easy X是什么,到时源码拿过去之后,运行报错,我这次发的扫雷, 也是通过Easy X实现,…

用python写web网页_从零开始,使用python快速开发web站点(1) | 学步园

环境:ubuntu 12.04 python版本: 2.73 ok,首先,既然是从零开始,我们需要的是一台可以运行的python的计算机环境,并且假设你已经安装好了python, 然后,既然是快速开发,必不可少的需要用到框架,py…

修改so_货代、海运操作、船务操作还分不清?船公司SO文件看不懂?

货代是货物代理(freight forwarding agent)的简称,是指经营受他人委托,为其提供代办运输手续,代提、代发、代运货物服务的业务。货物代理,有些是中间商就是自己没有船或者飞机的或者船公司、航空公司&#…

一行代码蒸发64亿人民币!黑客盯上区块链漏洞!Python真的变态!

此前认为,区块链技术由于分布存储、加密算法等技术的应用,拥有了不可篡改、可追溯等被认为是“万无一失”的特性。然而,该特性主要针对存储在区块中的信息来说,以文中开头的案例为例,区块链技术保障了可以追溯到这64亿…

太吾绘卷第一世攻略_建平中学高二数学周练卷(2020.09)

试卷图片仅供学习交流使用,答案仅供参考【往期内容】高一是坎, 高二是坡, 高三是峰! 最全学习攻略新高一数学教材必修第一册第一章习题答案往年高中9月开学考月考数学试卷汇总2020上海高考复交综评录取率top202020北京大学强基计划数学试题2020上海16区零志愿、名额…

用python编写最简单的记事本_Python使用字典实现的简单记事本功能示例

本文实例讲述了Python使用字典实现的简单记事本功能。分享给大家供大家参考,具体如下: from time import sleep, strftime user "Cytus" calendar {} def welcome(): print "Welcome to use this calendar. %s" % user print &quo…

多线程百度网盘爬虫Python完整源码

#coding: utf8import re #正则表达式模块import urllib2 #获取URLs的组件import timefrom Queue import Queueimport threading, errno, datetimeimport jsonimport requests #Requests is an Apache2 Licensed HTTP libraryimport MySQLdb as mdbDB_HOST 127.0.0.1DB_USER r…

自动补足算法是什么_数据、算法岗的几点经验分享!

learners | 作者Datawhale | 来源目录有哪些好的秋招经验分享?机器学习中常用的最优化方法有哪些?想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题)有哪些好的秋招经验分享?1李玲 - 携程算法工程师(…

python支持中文路径_打开python遍历中文目录得到的文件路径报错

各位朋友们好,我是一名python新手,现在遇到一个问题,恳请各位朋友们能指点一下我。 我的环境是:ubuntu14.04系统,python2.7 用python遍历一个目录,目录层次结构如下: 这是主目录: /home/chaoma/superboard/mydata/input/productio…

我精心珍藏的Python代码技巧

01.****简洁的表达式 image 点评:Python因为简洁高效而出名,就是因为语法非常简单,而且内置了很多强大的数据结构: 比如我们可以大量用推导列表来生成很多简洁的代码 比如我们可以用if else组合,本来需要2-3行代码写…

平移刚体上各点的加速度和速度_大物学习笔记(一)——刚体力学

第一次写笔记,或多或少都会有很多的不足。疫情期间一直都是网课的学习,书本也没有带回来,经常都是在草稿本上随手推导一下公式,隔几天翻了几页,自己推导的东西就不见了。所以总想着来总结一下,把学的东西稍…

python函数和类的区别_Python中类中的方法还有区别?

上一篇,我们讲到Python类中的属性是有区别的,爱思考的小伙伴们可能就会问了,Python中的方法是不是也有区别呢?是的,而且Python中的方法区别更大,让我们来看看吧~ Python类中的三种方法 Python中的方法可以分…

腾讯云服务器性能测试心得经验总结

前言 回顾几年前,做性能测试,尤其是服务器性能测试难度比较大,一是测试人员本身技术不足,二是测试的生态环境 不够完善(参考资料少、实用案例少、工具选型少),然而在这两年随着测试环境的生态逐…

python 获取昨天的日期_利用Python来实现报表的自动发送,解放你时间去做更有意思的事情...

前言在日常工作中你可能因为每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让…

大数据 深度 分页_机器学习、深度学习、大数据 ?傻傻分不清楚?

提起机器学习四个字,不知你的脑海中是否会有一丝印象?毕竟身处信息时代,在日常生活中,无论通过什么媒介,接触到这个名词概念的机会还是挺大的。与之类似,还有以下这些名词概念:数据分析、数据挖…

jieba结巴分词--关键词抽取_结巴中文分词原理分析2

作者:白宁超,工学硕士,现工作于四川省计算机研究院,著有《自然语言处理理论与实战》一书,作者公众号:机器学习和自然语言处理(公众号ID:datathinks)结巴分词详解1中文分词介绍中文分词特点词是最…