spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...

news/2024/5/19 2:49:38/文章来源:https://blog.csdn.net/weixin_39844942/article/details/111039134

13cc5457fdf6bba1f24ac5021a2e595f.png

SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件

一、概述

Spring Boot允许多种配置来源,官网是这样说的:

Spring Boot使用一种非常特殊的PropertySource顺序,旨在允许合理地覆盖值。按以下顺序考虑属性(优先级从高到低):

  1. Devtools 主目录上的全局设置属性(~/.spring-boot-devtools.properties当devtools处于活动状态时)。
  2. @TestPropertySource 你的测试注释。
  3. properties属性测试。可 用于测试特定应用程序片段@SpringBootTest的 测试注释。
  4. 命令行参数。
  5. 来自SPRING_APPLICATION_JSON(嵌入在环境变量或系统属性中的内联JSON)的属性。
  6. ServletConfig init参数。
  7. ServletContext init参数。
  8. JNDI属性来自java:comp/env。
  9. Java系统属性(System.getProperties())。
  10. OS环境变量。
  11. RandomValuePropertySource,只有在拥有random.*属性。
  12. 特定于配置文件的应用程序属性在打包的jar(application-{profile}.properties和YAML变体)之外。
  13. 打包在jar中的特定于配置文件的应用程序属性(application-{profile}.properties 以及YAML变体)。
  14. 打包jar之外的应用程序属性(application.properties以及YAML变体)。
  15. 打包在jar中的应用程序属性(application.properties和YAML变体)。
  16. @PropertySource 在@Configuration类上的注释。
  17. 默认属性(由设置指定SpringApplication.setDefaultProperties)。

事实上,这个地方还少了一个,那就是配置中心,配置中心的优先级是最高的,还可以动态刷新,可以参考《SpringCloud技术指南系列(八)配置管理之Consul配置中心》配置中心的使用。

而且,我们常用的,一般有命令行参数、application-{profile}.properties和application.properties。自定义配置文件用的也不多,但是还是有人用的。

本篇着重讲述下常用的配置方式。

首发地址: 品茗IT-同步发布

如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以加入我们的java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习中遇到的难题。

二、命令行参数

默认情况下,SpringApplication将任何命令行选项参数(即,以--开头的参数,如--server.port=9000)转化为property,并将它们添加到spring Environment。如前所述,命令行属性始终优先于其他属性源。

如果您不希望将命令行属性添加到Environment,则可以使用禁用它们SpringApplication.setAddCommandLineProperties(false)。

三、主配置文件

3.1 主配置常用配置

SpringApplication从application.properties以下位置的文件加载属性并将它们添加到Spring Environment:(优先级从高往低)

  1. Jar包同级目录/config
  2. Jar包同级目录
  3. classpath 下的/config
  4. classpath根路径 /

如果你不喜欢properties文件,可以使用YAML替代properties文件,加载顺序什么都是一样的,只不过写法不一样。 下面是两种写法的不同:

properties文件:

server.port=8858
spring.profiles.active=loc

yaml文件

server:port: 8812
spring:profiles:active: loc

yaml文件看起来简洁明了,properties文件看起来一坨一坨的,但是我更喜欢properties文件,因为yaml文件对语法要求严格,tab键和空格键入的内容都不一样,很容易出错。

3.2 主配置替换

这种配置方法很少使用,可以说基本上没人用。

如果您不喜欢application.properties配置文件名,可以通过指定spring.config.name环境属性切换到另一个文件名。您还可以使用spring.config.location属性(以逗号分隔的目录位置或文件路径列表)来引用显式位置。spring.config.additional-location来指定额外配置文件。

spring.config.name的作用就是给application.properties换个名。

spring.config.location就是指定了加载配置文件的路径。就是不再从上面说的那个路径取配置文件。

spring.config.additional-location就是指定了额外配置文件的加载路径。除了在上面的在默认位置搜索配置文件,还搜索这个配置指定的位置的配置文件。而且优先级最高。

这三个配置都不能写在应用里,因为它是在应用启动前就确定的,需要在环境变量或者命令行参数确定。

四、其他配置文件

如果我们在application.properties中写入了太多配置,想用其他配置文件来写配置时,就需要考虑下如何加载这些配置文件。

4.1 指定配置文件加载

指定配置文件加载,就是指application-{profile}.properties和YAML变体 这种形式。

一直以来,我一直对这种形式存在误解,以为它只能区分环境,后来才发现,自己错了,这个只是纯粹的指向新的配置文件,你指了哪个,哪个就能加载。下面说下它分别怎么用。

区分环境:

  • 比如有三个环境的配置文件application-loc.properties,application-dev.properties,application-prod.properties,没有固定位置,只要放在Spring能加载的位置即可,一般放在application.properties的低一级目录,方便区分,比如application.properties放在classpath下,这些配置文件可以放在config/目录下。
  • 在命令行参数,或者application.properties中,使用spring.profiles.active=loc指定要来指定加载application-loc.properties配置文件。其他雷同。

区分应用:

  • 比如我们有用到redis,我们想把redis的配置单独出去,不想放在application.properties里面变一坨。就可以单独新建配置文件application-redis.properties,放在Spring能加载的位置。
  • application.properties中(这个就没必要放命令行参数了,因为我们应用里面肯定要用到的),使用spring.profiles.active=loc,redis指定要来指定加载application-redis.properties配置文件。
  • 如果使用命令行参数传递的spring.profiles.active=loc,可能会覆盖掉配置文件中的redis配置,这时候,我们可以使用spring.profiles.include配置,叠加激活profile,如果配置spring.profiles.include=redis,指定spring.profiles.active=loc,就可以同时激活loc,redis,等同于spring.profiles.active=loc,redis。

4.2 自定义配置文件加载

自定义配置文件,就是定义的配置文件命名规范不再遵循Spring boot的要求,自由加载。需要使用@PropertySource注解加载配置文件。

  1. 先在classpath下建个配置文件,如user.properties。

user.properties:

user.username=cff
user.realName=大爷
user.mobile=23333
hello.message=sssssssssssssssssssaasa
  1. 使用@PropertySource("classpath:user.properties")加载配置,同时使用@ConfigurationProperties自动绑定属性,当然也可以使用@Value来注入配置。

代码示例:

package cn.pomit.springbootwork.consulclient.service;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;@Configuration
@ConfigurationProperties(prefix="user")
@PropertySource("classpath:user.properties")
public class UserConfig {private String userName;private String realName;private Integer mobile;private String message;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getRealName() {return realName;}public void setRealName(String realName) {this.realName = realName;}public Integer getMobile() {return mobile;}public void setMobile(Integer mobile) {this.mobile = mobile;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return "UserConfig [userName=" + userName + ", realName=" + realName + ", mobile=" + mobile + ", message="+ message + "]";}}

这样就可以直接使用user.properties配置文件中的配置,这里有注意事项:

  • 只有@PropertySource,是不能加载配置的。
  • @ConfigurationProperties(prefix="user") 只绑定了user.开头的属性。
  • @Value 可以注入任何属性。
  • @ConfigurationProperties和@Value的不同是,@ConfigurationProperties支持属性绑定,@Value不行,但是@Value支持el表达式,@ConfigurationProperties不支持。

五、Jar包外的配置文件

  1. Spring boot默认读取jar包当前目录下的application.properties配置文件,以及config下的application.properties文件。
  2. 也可以使用spring.config.location替换加载配置文件的路径。
  3. 也可以使用spring.config.additional-location来指定了额外配置文件的加载路径。
  4. 使用@PropertySource(value={"file:D:/test/user.properties"}) 这种形式,指定文件是D:/test目录下的user.properties文件。也可以把D:/test/写在配置文件中,如用out.profile.path=D:/test 指定,然后使用@PropertySource(value={"file:${out.profile.path}/user.properties"}) 来指定外部配置文件。

品茗IT-博客专题:https://www.pomit.cn/lecture.html汇总了Spring专题、Springboot专题、SpringCloud专题、web基础配置专题。

快速构建项目

Spring组件化构建

SpringBoot组件化构建

SpringCloud服务化构建

喜欢这篇文章么,喜欢就加入我们一起讨论SpringBoot使用吧!

1afc53037137a0034af59d00c2e8be7d.png

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

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

相关文章

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件,这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面,该网页如下:实现代码如下: import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件,这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面,该网页如下:实现代码如下: import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义

一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义 在第一章节,你将内容页重置为网站定义。重置母版页到网站定义也没有什么不同。你丢失了在页面上做出的自定义,包括任何静态文本、图片、控件或Web部件。SPD…

拥抱单页网站! jQuery全屏滚动插件fullPage.js

不知道从什么时候开始,单页网站就悄悄走进人们的视线,尤其是国外的网站,更是钟爱单页网站.制作一个全屏滚动的效果,然后每个滚动页弄一个好看的背景色,配上一些描述性的文字,大家都喜欢这么弄,仿佛逼格瞬间可以爆表似的.当然,不得不承认,介绍产品的页面用单页网站似乎确实高大上…

如何实现网站文件动静分离

背景 传统动静不分离的产品架构,随着访问量在增长,性能会成为瓶颈。以一个常见的Web站点为例。www.acar.com是一个刚建立汽车资讯车友交流网站,主站用Php搭建,有10GB的图片素材,部分JS文件。目前购买一台ECS放置所有程…

自学python推荐书籍同时找哪些来实践-Python学习路上有这些论坛、网站、书籍与你同行...

Python学习路上有这些论坛、网站、书籍与你同行 2019-05-03 18:24:41 613点赞 9508收藏 164评论 创作立场声明:希望我的一些经验可以给你少走一些弯路,但人总得走点弯路才可以成长。别怕,在学习python的路上有我陪着你。人生苦短,…

java用nat123_「网速123」使用nat123怎样解决网速慢的问题? - seo实验室

网速123许多人在使用Nat123时会遇到网速慢的问题,下面就来说说相关的解决方法。1、cname正确指向。cname指向的唯一性。使用自己的域名时,如设置cname指向nat123的,确保cname的唯一性,不对应的cname指向解析慢或其他不可预知的问题…

怎么在python下载网站内容-分析某网站,并利用python自动登陆该网站,下载网站内容...

本帖最后由 愤怒的小车 于 2019-5-8 09:41 编辑 一:本代码是我研究了好久才写出来,七功能主要有自动登陆、自动识别验证码、以及自动识别下载格式进行判断下载! 首先,搬上我们的主角网址,http://lavteam.org/&#xff…

python爬虫怎么爬同一个网站的多页数据-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面…

高性能网站原则

https://blog.csdn.net/u011650048/article/details/51754423 1、图片压缩: 静态页面验收时,检查每张图片不能超过200K,每个页面不能超过2.5M CMS后台上传图片,检查每张图片不能超过200K,尽量不要使用原图,…

python从入门到入土表情包-Python开发个人专属表情包网站,表情在手,天下我有...

"表情包”是一种利用图片来表示感情的一种方式。表情包是在社交软件活跃之后,形成的一种流行文化,表情包流行于互联网上面,基本人人都会发表情。 曾经你是否也有过找不到表情包去应对别人的时候。 今天小编分享如何用Python开发个人专属…

让你的网站在IE8的兼容模式下运行

众所周知,微软的Internet Explorer团队一直在致力于将IE8打造为最符合业内标准的浏览器,所不幸的是,当前并非所有的网站都认同这些标准。如果你担心你的网站在IE8的标准模式下不能正常工作的话,下面这些方法也许对你有所帮助&…

某个网站打不开,其他网站正常的原因及解决办法

检测网站是否适应了cdn加速,可以在命令行中输入nslookup ip地址(nslookup http://www.360doc.com)如果address的值是多个,就证明使用了cdn加速。 可以使用cdn检测工具检测各地使用cdn加速后网络情况。同时如果全国不同地区访问节点…

技术文章精美配图模板网站推荐-创客贴

最近上海的风景很好,有清晨的微风、有蓝天白云,小编被大好河山迷住了,只顾着欣赏美景佳人,今天开始上班,把思绪和心情收回来,得花一些时间来写写东西,记录记录生活。 我经常逛知乎,也…

网站后台管理界面设计的一些想法

一、最常见的网站后台管理的界面布局 1.头部 2.菜单 3.主要工作区域 4.底部 二、工作区的交互设计 后台操作管理的主要工作区域在图示的区域3,古老的网站后台管理程序中,区域3被设计成一次只能展示一个页面。而现在的流行做法是区域3是多Tab的&#xff0…

legend3---阿里云如何多个域名指向同一个网站

legend3---阿里云如何多个域名指向同一个网站 一、总结 一句话总结: 先寻求资料及文档,没有找到的话自己摸索一下就好 结论:多个域名都需要备案 二、阿里云如何多个域名指向同一个网站 当前情况 一个域名(fanrenyi.com&#xff09…

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件,这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面,该网页如下:实现代码如下: import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件,这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面,该网页如下:实现代码如下: import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

Slog64_项目上线之ArthurSlog个人网站上线3

ArthurSlogSLog-64Year1GuangzhouChinaSeptember 9th 2018ArthurSlog PageGitHubNPM Package Page掘金主页简书主页segmentfault多言数穷 不如守中 开发环境MacOS(High Sierra 10.13.5) 需要的信息和信息源: 开始编码 本篇配置服务端环境网站的源码已经传送至服务器…

几个值得收藏的国外有关Vue.js网站

鄙人瞎逛瞎搞,轻轻地收藏几个有关Vue.js的网站; 这暂且不是最好的也不是最全的网站采集处。 往后会慢慢健全起来的 ~^o^~ (^-^) (^o^) 。 想了解更多 戳我试试 (^ิ∀^ิ) (๑˜้ีз˜้ี) (((΄◞ิ(΄◞ิ(΄◞ิ౪◟ิ‘)◟ิ‘)◟ิ‘))) 一、Vu…