自动配置的原理:
1)、SpringBoot启动的时候加载主配置类,开启了自动配置@EnableAutoConfiguration
2)@EnableAutoConfiguration作用:
利用@Import({AutoConfigurationImportSelector.class})选择器导入组件。
SpringFactoriesLoader这个类会扫描所有jar包类路径下 META-INF/spring.factories
将扫描内容包装成properties类对象,从properties中获取到类名并将它们添加在容器中。
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\ org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\ org.springframework.boot.autoconfigure.cloud.CloudServiceConnectorsAutoConfiguration,\ org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfigu
前面说到了配置文件的拆分,这里继续说配置文件。
配置文件是有加载顺序的,内部配置文件加载顺序在SpringBoot启动的时候按照高到低的优先级扫描以下位置的默认配置文件并作为SpringBoot的默认配置文件
1、项目路径下的config目录中的配置文件;
2、项目根目录下的配置文件;
3、classpath下的config目录中的配置文件;
4、classpath根目录下的配置文件;
如果扫描目录下都有配置文件,其中的配置都会加载,会根据优先级的高优先级配置文件中的配置会覆盖低优先级的。
如果想要改变默认配置文件,在打包好的项目文件,命令行参数可以通过spring.config.location来改变默认配置 --spring.config.location={配置文件绝对路径}
接着再说一下外部文件的加载顺序,由于外部文件加载的位置比较多,就直接套用官方的文档说明了。
其实,这个配置文件加载,一般用的并不是很多,所以一笔带过,如果需要的时候翻翻文档就可以了。
接着再讲一个Profile文件。
多Profile配置文件指的是什么呢?
多profile文件,profile用于Spring做多环境切换支持,可以使application-{profile}.properties/yaml:例如:--application-dev.properties、application-test.properties
激活的时候可以在主配置文件中使用spring.profiles.active=dev
当然,如果在开发环境,可以使用命令行参数带入--spring.profiles.active={profile},当然,这个参数也可以在maven打包完成以后运行的时候带入参数。
除此之外,也可以在虚拟机参数中带入,-Dspring.profiles.active={profile}。
其实说这么多不如演示一下,首先还是pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
前面讲到了拆分配置文件,这里继续讲配置文件,主要是配置文件中的占位符。
老样子,pom.xml先粘贴上。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
上次讲到了如何注入属性的值,如果将所有需要注入容器的值全部放入一个配置文件中,是否会让这个配置文件过于臃肿呢?
那么,就使用@PropertySource这个注解来拆分配置文件,改注解的作用是告诉Spring Boot需要导入的配置文件的位置。
老样子,先上pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cc_acme</groupId> <artifactId>springboot-split-properties</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-split-properties</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependenc
首先简单说一下两个注解之前的区别。
@Configurationproperties | @Value | |
功能 | 批量注入配置文件中的属性 | 每个属性单独注入 |
松散语法 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
首先说一下功能上面,@Configurationpr
上面讲到了yaml来配置属性,也提到了properties,所以这里便用properties来配置属性。
其实和上面没有什么太大的不同,代码再来添加一遍,和前面的代码大同小异。
首先pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"