首页天道酬勤如何看spring源码,application.yml详解

如何看spring源码,application.yml详解

张世龙 05-06 09:04 120次浏览

文章目录简介SpringBoot源代码分析添加一个支持在Spring中将yml用作配置文件的库(可选)将properties文件转换为yml文件)

前言

在项目中,建议将yml文件用作配置文件。 yml可以配置对象,也可以在单个文件中配置多个环境。 传统的属性需要多个文件来配置多个环境。

这是一种非常有用的格式,因为YML是JSON的超集。 这是所有编程语言人性化数据序列化的标准。 YML易于阅读,有助于读取/写入开发人员的配置文件。

YML设计目标:

YAML是人类容易阅读的。 YML数据可以在编程语言之间移植。 YML匹配敏捷语言的本机数据结构。 YML具有支持通用工具的一致模型。 YAML支持单程处理。 YAML具有表现力和扩展性。 YAML易于实现和使用。 SpringBoot源代码分析介绍了如何在SpringBoot启动时加载application.yml配置文件

@EnableAutoConfiguration :是一个实现自动配置的类,启动SpringBoot项目时,它会运行名为SpringFactoriesLoader的类,即meta-INF/spring . XxxProperties :封装配置文件的相关属性:并为组件指定值。 每个XxxAutoConfiguration类都包含许多组件bean,它们在条件成立时加载到容器中。 此组件的属性来自XxxProperties类,XxxProperties类中每个属性的值绑定到properties。

在Spring中如何使用yml作为配置文件,因为Spring从4.1版开始提供YAML支持,所以从Spring4.1开始使用yml作为配置文件很简单。 具体操作步骤如下。

添加支持YAML分析的库! -- SpringBoot是指使用SnakeYAML库进行YAML支持--dependencygroupidorg.YAML/groupidartifactidsnakeyaml/artifaction 虽然versiion dependency不知道为什么可以不导入此库,但Spring提供的YamlPropertiesFactoryBean和YamlMapFactoryBean是Spring提供的YAML procency

2 .使用“Convert YAML and Properties File”插件将properties文件转换为yml文件,或将yml文件转换为properties文件

要首先安装此插件,请搜索settings---- plugins---- convertyamlandpropertiesfile----安装。 (这是成功安装的屏幕截图。)

然后选择要转换的文件,右键单击-- convert。

自动转换。

部署用于分析application.yml文件的propertysourcesplaceholderconfigurer :有两种方法

方法1 (在spring核心配置类中配置(/webapplicationinitializer # getrootconfigclasses ) )中声明此类是spring核心配置类,其中@Configuration @ configuration @ components can (base packages={ ' com.pxl.MVC ' },useDefaultFilters=true不需要添加exclude filters=classes={ controller.class } }//@ property source (' class path : application.properties ' ) publicclassrootconfig { @ beanpublicstaticpropertysourcesplaceholderconfigurerproperties } { propertysourcesplaceholderconfigurties }

propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer(); YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean(); yamlPropertiesFactoryBean.setResources(new ClassPathResource("application.yml")); propertySourcesPlaceholderConfigurer.setProperties(yamlPropertiesFactoryBean.getObject()); return propertySourcesPlaceholderConfigurer;}}

注意:不能直接写为@PropertySource(“classpath:application.yml”),若这样写,结果是每一行被解析为一个k-v,因为该注解对应的解析器并不支持解析yml语法。

方式二:在spring.xml的<context:property-placeholder />中配置 <context:annotation-config/><bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean"> <property name="resources" value="classpath:application.yml"/></bean><context:property-placeholder properties-ref="yamlProperties"/> PropertySourcesPlaceholderConfigurer的作用 什么时候会创建propertySourcesPlaceholderConfigurer-bean? // 从ContextLoaderListener#contextInitialized()开始分析contextInitialized:107, ContextLoaderListener (org.springframework.web.context)initWebApplicationContext:326, ContextLoader (org.springframework.web.context)configureAndRefreshWebApplicationContext:444, ContextLoader (org.springframework.web.context)refresh:41010, AbstractApplicationContext (org.springframework.context.support)__refresh:523, AbstractApplicationContext (org.springframework.context.support)invokeBeanFactoryPostProcessors:681, AbstractApplicationContext (org.springframework.context.support)invokeBeanFactoryPostProcessors:154, PostProcessorRegistrationDelegate (org.springframework.context.support)getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)doGetBean:302, AbstractBeanFactory (org.springframework.beans.factory.support)getSingleton:230, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)getObject:306, AbstractBeanFactory$1 (org.springframework.beans.factory.support)createBean:482, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)doCreateBean:510, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)createBeanInstance:1023, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)instantiateUsingFactoryMethod:1128, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)instantiateUsingFactoryMethod:588, ConstructorResolver (org.springframework.beans.factory.support)instantiate:162, SimpleInstantiationStrategy (org.springframework.beans.factory.support)invoke:498, Method (java.lang.reflect)invoke:43, DelegatingMethodAccessorImpl (sun.reflect)invoke:62, NativeMethodAccessorImpl (sun.reflect)invoke0:-1, NativeMethodAccessorImpl (sun.reflect)//创建propertySourcesPlaceholderConfigurer-beanproperties:31, RootConfig (com.pxl.mvc.config) 哪里会使用到我们注册的propertySourcesPlaceholderConfigurer-bean进行解析applicaiton.yml?
(待续…)

YamlPropertiesFactoryBean将加载YAML做为Properties和YamlMapFactoryBean将加载YAML做为Map,详情可参考Spring Boot Features

maven-compiler-plugin报错,clone的用法