本文默认 spring 版本是 spring5
1 spring 加载 yml 文件
2 spring 加载 properties 文件
3 spring 加载 系统磁盘 文件
4 spring 加载 xml 文件
5 Java 基于 InputStream 读取 properties 配置文件
spring框架默认加载配置:
resources 下的文件名称为application的 application.yml 以及 application.properties, 默认会被spring加载到容器 Container
中,如果他们有重复的配置项,会被默认合并,并且 application.properties优先级更高. 下面的 LoadYmlTest.java 有详细解释
示例:
# application.yml user: userName: ifredom_name age: 30 # 定义了属性 age
# application.properties # 也定义了属性 ageuser.age=99user.sex=2
1.spring加载yml文件上面已经通过默认的方式演示了如何加载默认的application.yml,但是更好的写法是,将我们自定义的配置独立为一个单独的文件。
比如我们开发微信公众号,小程序开发时,就需要用到配置,此时的配置就应该独立为一个额外的文件。(此处将演示加载为 List)
一共有3步:
创建配置文件 wechat-config.yml定义配置类 LoadPropertySourceYmlConfig,用来加载yml中的数据 (指定配置类的加载器) (因为 spring 配置类的默认加载器是 PropertiesLoader加载器,所以我们需要自定义 yml加载器。可以自行查看注解 @PropertySource 源码)自定义配置类加载器 YamlSourceFactory,继承Spring提供的默认配置类构造器 DefaultPropertySourceFactory测试示例:
# main/resources/chat-config.yml
#微信小程序的appidappid: app-xxx#微信小程序的Secretsecret: secretxxx#微信小程序消息服务器配置的tokentoken: token-xxx#微信小程序消息服务器配置的EncodingAESKeyaesKey: aesKey-xxx
wx: configs: #微信小程序的appid - appid: app1 #微信小程序的Secret secret: secret1 #微信小程序消息服务器配置的token token: token1 #微信小程序消息服务器配置的EncodingAESKey aesKey: aesKey1
#微信小程序的appid - appid: appid2 #微信小程序的Secret secret: secret2 #微信小程序消息服务器配置的token token: token2 #微信小程序消息服务器配置的EncodingAESKey aesKey: aesKey2
def-my-var1: 定义配置属性var1def-my-var2: 定义配置属性var2
这里需要注意,在上面的配置文件中是 wx.configs, 因此在配置类中,也必须用同名的 configs 来接收
测试结果
2.spring 加载 properties 文件从上一步我们已经知道了, spring 默认使用 properties 文件的加载器。因此,我们可以少一步构造加载器
创建配置文件 alibaba-config.properties定义配置类 LoadPropertySourceConfig,用来加载yml中的数据测试# main/resources/alibaba-config.propertiesali-yun.username="ifredom"ali-yun.password="123456"ali-yun.blog="http://www.ifredom.com"
测试:
细心的同学应该发现了,在配置文件中定义的是ali-yun中间明明有一个短横线,读取属性的时候怎么没了?
这是因为 Spring 配置加载器类对诸如 空格,下划线,短横线,大小写都做了替空处理,也就是:配置文件是不分大小写的; 并且 下划线,短横线也会忽略: user_name -> username, pass-word -> password.因此取名你可以很随意
3.spring加载系统磁盘(properties)文件有时候我们会需要加载其他项目下的数据库,而配置文件并不在当前项目路劲下,因此需要指定文件路径。
磁盘路径可以是相对路径,绝对路径,也可以通过系统属性值指定变量相对路径,文件在应用根目录下:@PropertySource(value = {"file:project1.properties"})相对路径,文件在应用根目录下:@PropertySource(value = {"file:./project1.properties"})绝对路径,在指定的路径下:@PropertySource(value = {"file:D:\project\project1.properties"})通过系统属性值指定变量:@PropertySource(value = {"file:${user.dir}/project1.properties"})由于加载xml文件还需要对xml文件进行解析,此处不做讲解。仅仅使用 properties 文件做例子。 示例:
# 位于D盘下的配置文件 D:project1.propertiesdriverClassName=com.mysql.cj.jdbc.Driverurl="https://www.ifredom.com"username="ifredom"password="123456"
由于配置文件没有前缀,因此 配置类 必须使用@Value()进行映射
4.spring加载xml文件 创建一个xml文件:applicationContext.xml,并在其中定义一个bean通过 ApplicationContext 来加载读取xml文件不再推介使用 xml 来读取文件了,过于复杂
示例:
5.Java基于InputStream读取properties配置文件到此这篇关于Spring详解四种加载配置项的方法的文章就介绍到这了,更多相关Spring加载配置项内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!