上海金工建设集团有限公司网站,云南专业做网站多少钱,图文素材库免费,建设工程扣分查询网站一、介绍
是不是经常用Value注解#xff1f;用过springboot的都知道它是从application.properties文件中引入某个变量的值#xff0c;是不是已经灰常熟悉了#xff1f; 默认在springboot启动后#xff0c;加载application.properties文件#xff0c;通过Value(${}Value注解用过springboot的都知道它是从application.properties文件中引入某个变量的值是不是已经灰常熟悉了 默认在springboot启动后加载application.properties文件通过Value(${})即可获取到对应的值使用非常方便。
当然使用久了发现太多的变量配置到application.properties文件中就会想到配置一个自定义参数文件让Value(${})这样的方式取值不要再从application.properties中获取而从自定义的参数文件中获取。
二、理解
实现方法即重新对PropertyPlaceholderConfigurer类的setLocations()方法重新指定配置文件路径就可以了。 通过PropertyPlaceholderConfigurer可以实现将上下文属性信息放在一个properties文件中同时还可以通过System.setProperty(key, value)这种方式给容器传递其他参数。
三、方法
1、加配置类
配置方法和spring一样都是通过加配置类当然springboot只需要加一个这样的配置类
import org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;/*** 重新修改Value注解注入的路径*/
Configuration
public class ValueConfig {Beanpublic PreferencesPlaceholderConfigurer getPreferencesPlaceholderConfigurer(){PreferencesPlaceholderConfigurer configurer new PreferencesPlaceholderConfigurer();Resource resource new ClassPathResource(/data.properties);configurer.setLocation(resource);return configurer;}
}其中上边的data.properties即是新的配置文件路径。
2、加参数文件
然后在resources下加一个data.properties文件即可。 最后就可以在data.properties文件里配置自己的参数。
spring.file.uploadpathc:/upload/wfvideo3、使用
使用没有变化还是使用最方便的Value(${spring.file.uploadpath})方式即可你会发现配置内容都是从data.prooperties文件来了实现了与application.properties的分离。
四、问题
又回到开始为什么Value注解读配置文件时会默认从application.properties来获取呢它是如何知道它呢
个人理解
我还没看源码看不懂~~首先application.properties文件在springboot启动后会加载到容器中里边的配置参数已经进入到spring上下文维护进一个地方并且以map那种形式keyvalue键值对存储。
这时候你通过对PropertyPlaceholderConfigurer类的setLocations()方法重新指定配置文件并写了一个data.properties文件这时候data.properties里也相当于加入到spring前边维护配置信息的map中但是map的特性都知道如果有重名的key那肯定以后者为主。
所以这么看来并不是Value注解开始就认识application.properties文件而是它压根不是从application.properties文件中获取东西也不认识application,而是从它们共同的老板spring上下文维护的一个配置类中类似刚才说到的一个map的东西中找东西而里边的东西默认是application.properties文件中填进去的而已。
个人感觉可能是这么回事可能不对~~~欢迎评论指导