SpringBoot项目中,可以在很多地方来配置项目中的配置项,那这里我主要说两个方面:一个是配置文件,一个是外部配置。
在springboot项目中,支持三类配置文件,分别是:application,properties、application.ymlapplication.yaml。而这二类配置文件的优先级最高的是 application.properties,其次是application.yml,最后是 application.yaml.
而外部配置呢,常用的有两种配置形式,一种是java系统属性,比如:-Dserverport=9001;另一种是命令行参数,比如:--server:port=10010。而命令行参数的优先级要高于java系统属性而整体上,外部配置的优先级要高于项目内部的配置文件中的配置,所以整体来说配置文件的优先级由高到低的顺序为:
命令行参数>java系统属性>application.properties>application.yml>application.yam
SpringBoot自动配置的原理是什么?
嗯,好的,它是这样的。
其实SpringBoot自动配置的核心,是引导类上加的注解@SpringBootApplication 底层封装的一个注解,叫@EnableAutoConfiguration,这个注解才是实现自动化配置的核心注解。
该注解通过@lmport注解导入对应的配置选择器,导入了一个mportSelector接囗的实现类。而在这个类的内部呢,读取了该项目和该项目引用的Jar包中的classpath路径下META-INF/spring.factories文件中的所配置的类的
全类名。
在这些配置类中所定义的Bean,会根据条件注解@Condition系列注解所指定的条件来决定是否需要将其导入到Spring容器中。
股条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用:
但是这里要说明一点哈,就是刚才提到的系统配置类声明的配置文件 META-INF/spring.factories,在springboot3.0版本之后,就已经废除了,不会在这个文件中配置自动配置类了,替换成了一份新的配置文件,配置文件名比较长,记不住,后缀名为:XXxxSpringAutoConfguration.imports。