Spring Boot的properties配置文件读取

2025-05-29 0 28

我在自己写点东西玩的时候需要读配置文件,又不想引包,于是打算扣点spring boot读取配置文件的代码出来,当然只是读配置文件没必要这么麻烦,不过反正闲着也是闲着,扣着玩了。

具体启动过程以前的博客写过spring boot启动过程(一),这次入口在springapplication类中:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
private configurableenvironment prepareenvironment(

springapplicationrunlisteners listeners,

applicationarguments applicationarguments) {

// create and configure the environment

configurableenvironment environment = getorcreateenvironment();

configureenvironment(environment, applicationarguments.getsourceargs());

  //此处读取

listeners.environmentprepared(environment);

if (iswebenvironment(environment)

&& this.webapplicationtype == webapplicationtype.none) {

environment = converttostandardenvironment(environment);

}

return environment;

}

关于监听器的过程在开头说的那篇的一系列中也说的挺细的,这里不介绍了:

Spring Boot的properties配置文件读取

都是监听器相关的部分,略了,springapplicationrunlisteners类中:

?

1

2

3

4

5
public void environmentprepared(configurableenvironment environment) {

for (springapplicationrunlistener listener : this.listeners) {

listener.environmentprepared(environment);

}

}

eventpublishingrunlistener:

Spring Boot的properties配置文件读取

onapplicationenvironmentpreparedevent事件触发org\\springframework\\boot\\spring-boot\\2.0.0.build-snapshot\\spring-boot-2.0.0.build-20170421.122111-547-sources.jar!\\org\\springframework\\boot\\context\\config\\configfileapplicationlistener.java监听器执行:

Spring Boot的properties配置文件读取

Spring Boot的properties配置文件读取

现在这个postprocessors中包含json之类其他的监听器,不过我现在只想扣出properties的代码,别的先略过,反正其实也没什么,本来也是想看看它的思路,扣着玩,不要太在意。

Spring Boot的properties配置文件读取

?

1

2

3

4

5
protected void addpropertysources(configurableenvironment environment,

resourceloader resourceloader) {

randomvaluepropertysource.addtoenvironment(environment);

new loader(environment, resourceloader).load();

}

Spring Boot的properties配置文件读取

?

1

2

3

4

5
loader(configurableenvironment environment, resourceloader resourceloader) {

this.environment = environment;

this.resourceloader = resourceloader == null ? new defaultresourceloader()

: resourceloader;

}

?

1

2
this.classloader = classutils.getdefaultclassloader();

//其实也就是thread.currentthread().getcontextclassloader();

下面就是真正加载了配置文件的load方法了,先是初始化propertysourcesloader和一些临时的集合:

?

1

2

3

4

5

6

7

8

9

10
this.propertiesloader = new propertysourcesloader();

this.activatedprofiles = false;

this.profiles = collections.aslifoqueue(new linkedlist<profile>());

this.processedprofiles = new linkedlist<>();

// pre-existing active profiles set via environment.setactiveprofiles()

// are additional profiles and config files are allowed to add more if

// they want to, so don't call addactiveprofiles() here.

set<profile> initialactiveprofiles = initializeactiveprofiles();

this.profiles.addall(getunprocessedactiveprofiles(initialactiveprofiles));

这些集合其实如果没配置profile基本是没用的,这东西现在已经很少用到了,这个环境当然是没配的:

Spring Boot的properties配置文件读取

主要是下面这部分:

?

1

2

3

4

5

6

7

8

9

10

11

12
for (string location : getsearchlocations()) {

if (!location.endswith("/")) {

// location is a filename already, so don't search for more

// filenames

load(location, null, profile);

}

else {

for (string name : getsearchnames()) {

load(location, name, profile);

}

}

}

就是去指定目录下去找各种以application为名字的指定类型的配置文件

Spring Boot的properties配置文件读取

Spring Boot的properties配置文件读取

我只关心application.properties,它是上面循环中的一次,走进了doloadintogroup方法的下面那句:

Spring Boot的properties配置文件读取

Spring Boot的properties配置文件读取

Spring Boot的properties配置文件读取

?

1

2

3

4

5

6

7
private map<string, ?> loadproperties(resource resource) throws ioexception {

string filename = resource.getfilename();

if (filename != null && filename.endswith(xml_file_extension)) {

return (map) propertiesloaderutils.loadproperties(resource);

}

return new origintrackedpropertiesloader(resource).load();

}

这个resource其实只是封装了一下inputstream,具体的读取。。。反正也没啥特别的读法:

Spring Boot的properties配置文件读取

读出的key和value放在map<string, origintrackedvalue>:

?

1

2

3

4

5

6
private void put(map<string, origintrackedvalue> result, string key,

origintrackedvalue value) {

if (!key.isempty()) {

result.put(key, value);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/saaav/p/6937602.html?utm_source=tuicool&utm_medium=referral

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Spring Boot的properties配置文件读取 https://www.kuaiidc.com/116120.html

相关文章

发表评论
暂无评论