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,整个人都懵了,不知道怎么办?其实对于电脑出现问题,大家不要着急,坚哥就来为大家分析下原因以及试着去解决。第一种原因…

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

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

月薪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区零志愿、名额…

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

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

我精心珍藏的Python代码技巧

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

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

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

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

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

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

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

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

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

cad动态块制作翻转_定制橱柜家具中CAD门型动态块制作方式图文讲解加视频

在定制橱柜家具中,我们用CAD我们经常会用一些门型放置到绘图当中,来展示CAD图纸的美观性,如下图:那么这些门型要是一点点画却是麻烦,所以我们可以把门型做成动态快的形式,对门型进行任意拉伸,方…

python json库安装_python怎么安装requests库

requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多 因为是第三方库,所以使用前需要cmd安装pip install requests 安装完成后import一下,正常则说明可以开始使用了。 基本用法: requests.get()用于请求目标网站&am…

32获取外部中断状态_Linux中断一网打尽(1) — 中断及其初始化

1中断是什么既然叫中断, 那我们首先就会想到这个中断是中断谁?想一想计算机最核心的部分是什么?没错, CPU, 计算机上绝大部分的计算都在CPU中完成,因此这个中断也就是中断CPU当前的运行,让CPU转而先处理这个…

文件夹_【教程】创建透明文件夹(非隐藏文件夹哦)

Hello 今天 不夜君 来教大家如何创建 一个 透明的 文件夹 效果类似这样哦~~是不是什么都看不到呢 大家不要慌 下面来看一下选中后的样子呀~~怎么样 是不是十分的酷炫呢其实这个方法的原理 我也不是很懂 所以就不献丑了 直接附上教程吧!!当然 有多种实现方…

山东栋梁机器人比赛_谁是最强“移动机器人”?来深技师这场全国大赛一决高下!...

9月24日第一届全国技能大赛世赛移动机器人项目全国机械行业选拔赛在深圳技师学院闭幕!为期三天的赛程中来自全国职业院校、机械行业相关企业的40支参赛队伍、130多名选手和专家教练相聚在深技师美丽的鹤鸣湖畔展开了激烈的比拼~点击边框调出视频工具条 ▲ 点击视频&…

python办公自动化excel_python办公自动化:Excel操作入门

1.安装 pip install xlsxwriter or easy_install xlsxwriter or tar -zxvf xlsxwriter-*.*.*.tar.gz python setup.py install 2.操作一个简单的Excel文档 操作注释及代码: # 引入依赖模块 import xlsxwriter # 数据准备 datas ( [Rent, 1000], [Gas, 100 ], [Food…

c++回到起点旅行商问题_不要犯同样的错,提C型房车回渝上牌长途旅行的心路历程...

视频版看这里➡️ 第一次驾驶三吨重房车到成功在村道脱险,这段旅程值得回顾我们俩房车旅行近两年,为了更好的迎接新一年的到来,我们来简单回顾一下这一年多的房车旅程。我们俩的旅行口号是:奔跑的影视工作室,行走的房车…