springboot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的yaml的文件配置。
以设置应用端口为例
properties文件示例(application.properties):
rver.port=80
yaml文件示例(application.yml):
rver: port: 80
在properties和yml/yaml配置文件同时存在的情况下, 在同一目录下,properties配置优先级 > yaml(yml)配置优先级
springboot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。
可放置目录(优先级从高到低)
./config/ (当前项目路径config目录下);./ (当前项目路径下);classpath:/config/ (类路径config目录下);classpath:/ (类路径config下).
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
springboot会从这四个位置全部加载配置文件并互补配置;
我们可以从configfileapplicationlistener这类便可看出,其中default_arch_locations属性设置了加载的目录:
private static final string default_arch_locations = "classpath:/,classpath:/config/,file:./,file:./config/";
接着getarchlocations方法中去逗号解析成t,其中内部类loader负责这一配置文件的加载过程,
包括加载profile指定环境的配置,以application+’-’+name格式的拼接加载。
多种目录配置同时存在情况
接下来还是以端口配置为例
在resources/目录下配置文件设置端口为8888;在resources/config目录下配置文件设置端口为9999;在项目路径下配置文件设置端口为6666;在项目路径config目录下配置文件设置端口为7777;
]
最终运行结果:
tomcat started on port(s): 7777 (http) with context path ‘/beedo’
started beedoapplication in 4.544 conds (jvm running for 5.335)
通过控制变量法得以论证
其优先级由高到底,高优先级的配置会覆盖低优先级的配置
springboot提供了许多的配置,但通常情况我们需要自定义自己的配置应用自己的系统中,如你需要配置一个默认的用户名密码做为系统的登录用。
首先创建一个实体类,作为配置注入用,并使用@configurationproperties注解进行批量注入, 也可以使用spring底层注解@value(“${ur.urname}”)的方式一个一个注入达到同意的效果
@component@configurationproperties(prefix = "ur")public class login{ private string urname; private string password; ...}
或者@value写法
@componentpublic class login{ private string urname; private string password; ...}
配置文件写法
# yml文件写法ur: urname: admin password: 123# properties写法login.urname=adminlogin.password=123
编写一个junit测试用例,看看配置的值是否正常注入:
@runwith(springrunner.class)@springboottestpublic class deployapplicationtests { @autowired private login login; @test public void contextloads() { system.out.println(login); }}
从输出结果上看,值已正常注入
login{urname=‘admin’, password=‘123’}
@configurationproperties与@value两种注解对比
松散绑定:驼峰命名(urname)、横干拼接(ur-name)、下划线(ur_name)之间可以互相识别绑定称为做松散绑定
jsr303:通过@email,@nullable,@digits 等等注解进行邮箱、判空、数字格式等等数据的校验,更多相关内容请参考ibm的中文文档:/d/file/titlepic/ />@configurationproperties通常用于将配置全量注入某个类中;
@value通常用于注入某一些特定配置值中;
使用@configurationproperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供t方法才可以,而使用@value注解修饰的字段不需要提供t方法
在编写配置时,你会发现自定义配置没有提示,让你在使用自定义配置时变的很麻烦,其实springboot早已为我们准备好了提示的需要,只需要用引入相关依赖即可有提示。
在没有加入依赖时idea会有如下提示:
添加依赖,该idea提示便消失,编写自定义配置时也有相应提示:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-configuration-processor</artifactid> <optional>true</optional></dependency>
需要运行一下
通常情况下我们将配置配置在application开头的主配置文件中,这样随着项目的增大配置项的增多会使文件变得非常臃肿,其实springboot早已考虑到了该问题,springboot提供了@propertysource和@importresource两个注解用于加载外部配置文件使用。
@propertysource通常用于属性加载配置文件,注意@propertysource注解不支持加载yaml文件,支持properties文件。@importresource通常用于加载spring的xml配置文件装配properties配置文件
在sources/config下创建一个yaml文件命名为ur.properties内容与上方ur的配置一样
login类可如下写法
@propertysource(value = {"classpath:config/ur.properties"})@component@configurationproperties(prefix = "ur")public class login{ private string urname; private密云旅游景点大全排名 string password; ...}
运行一下,同样能达到加载配置效果
同时加载多个配置问题
细心的你,会发现@propertysource注解中属性value为一个数组,如果同时加载多个配置文件,并且不同配置文件中对同一个属性设置了不同的值,那么spring会识别哪一个呢?
带着疑问,我们可以通过控制变量法进行测试,具体过程再在赘述。
@propertysource(value = {"classpath:config/ur1.properties","classpath:config/ur2.properties"})
结论:spring加载顺序为从左到右顺序加载,后加载的会覆盖先加载的属性值。
如果你有强迫症,一定想加载yaml配置文件,那么可以通过propertysourcesplaceholderconfigurer类来加载yaml文件场景作文,将原来的ur.properties改成ur.yaml,bean配置类中加入如下代码,login配置类和一开始的方式一致。
@beanpublic static propertysourcesplaceholderconfigurer loadproperties() { propertysourcesplaceholderconfigurer configurer = new propertysourcesplaceholderconfigurer中国体育明星(); yamlpropertiesfactorybean yaml = new yamlpropertiesfactorybean(); //yaml.tresources(new filesystemresource("classpath:config/ur.yml"));//file路径引入 yaml.tresources(new classpathresource("config/ur.yml"));//class路径引入 configurer.tproperties(yam你是爱我的歌词l.getobject()); return configurer;}
运行一下,仍然可以能达到加载配置效果的
springboot提出零xml的配置,因此springboot默认情况下时不会识别项目中spring的xml配置文件。为了能够加载xml的配置文件,springboot提供了@importresource注解该注解可以加载spring的xml配置文件,通常加于启动类上。
@importresource(value = {"classpath:/beans.xml"})@springbootapplication(scanbapackages = {"team.agull.client"})public class deployapplication { public static void main(string[] args) { springapplication.run(deployapplication.class, args); }}
idea使用.properties文件出现中文乱码问题?
idea对.properties默认编码为gbk,通常我们项目为utf-8编码,这样程序在读取时就会出现乱码问题;
解决方法:idea 中 打开如下选项file->sttings->editor->fileencodings
将gbk修改为utf-8并勾选
transparent native-to ascill conversion(在运行的时候转换成ascii码)
到此这篇关于springboot读取外部配置文件的方法的文章就介绍到这四大名刹了,更多相关springboot读取外部配置文件内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 23:06:08,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/4df6e4a2a8c52df51f5328448e9f6663.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:SpringBoot读取外部配置文件的方法.doc
本文 PDF 下载地址:SpringBoot读取外部配置文件的方法.pdf
留言与评论(共有 0 条评论) |