Spring Boot 是 Spring 开源组织下的子项目,
是 Spring 组件一站式解决方案,主要是简化
了使用 Spring 的难度,简省了繁重 xml 的配
置,提供了各种启动器,在运行过程中自定
配置,,开发者能快速上手
① 独立运行
② 简化配置
③ 自动配置
④ 无代码生成和 XML 配置
⑤ 无需部署 war 文件
Spring Boot 的核心配置文件是 application
和 bootstrap 配置文件
主要用于 Spring Boot 项目的自动化配置
有以下几个应用场景:
① 使用 SpringCloudConfig 配置中心时,
这时需要在 bootstrap 配置文件中添加
连接到配置中心的配置属性来加载外部
配置中心的配置信息;
② 一些固定的不能被覆盖的属性;
③ 一些加密/解密的场景;
.properties 和 .yml,它们的区别主要是书
写格式不同
app.user.name = javastack
app:
user:
name: javastack
另外,.yml 格式不支持 @PropertySource
注解导入配置
启动类上面的注解是 @SpringBootApplication,
它也是 SpringBoot 的核心注解
主要组合包含了以下 3 个注解:
① @SpringBootConfiguration:组合了
@Configuration 注解,实现配置文件
的功能
② @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配
置的选项,如关闭数据源自动配置功能:
@SpringBootApplication(exclude =
{ DataSourceAutoConfiguration.class })
③ @ComponentScan:Spring 组件扫描
① 继承 spring-boot-starter-parent 项目
② 导入 spring-boot-dependencies 项目依
赖
可以不需要,内置了 Tomcat/ Jetty 等容器
① 打包用命令或者放到容器中运行
② 用 Maven/ Gradle 插件运行
③ 直接执行 main 方法运行
注解 @EnableAutoConfiguration,,
@Configuration,@ConditionalOnClass
就是自动配置的核心,首先它得是一个配
置文件,其次根据类路径下是否有这个类
去自动配置
Spring Boot 的自动配置注解是
@EnableAutoConfiguration, 从上面的
@Import 的类可以找到下面自动加载自动
配置的映射
org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Class>, ClassLoader)
public static List loadFactoryNames(Class> factoryClass,
ClassLoader classLoader) {
String factoryClassName = factoryClass.getName();
try {
Enumeration urls = (classLoader != null ?
classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
lassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
List result = new ArrayList();
while (urls.hasMoreElements()) {
URL url = urls.nextElement();
Properties properties = PropertiesLoaderUtils.loadProperties(
new UrlResource(url));
String factoryClassNames = properties.getProperty(factoryClassName);
result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(
factoryClassNames)));
}
return result;
}
catch (IOException ex) {
throw new IllegalArgumentException("Unable to load ["
+ factoryClass.getName() +
"] factories from location ["
+ FACTORIES_RESOURCE_LOCATION + "]", ex);
}
}
这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。
/**
* The location to look for factories.
* Can be present in multiple JAR files.
*/
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
查看Spring Boot自带的自动配置的包: spring-boot-autoconfigure-1.5.6.RELEASE.jar,
打开其中的META-INF/spring.factories文件会找到自动配置的映射
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.CloudAutoConfiguration,\
...
再来看看数据源自动配置的实现注解
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class })
public class DataSourceAutoConfiguration {
...
@Configuration,@ConditionalOnClass就是自动配置的核心,首先它得是一个配置文件,其次根据类
Starters 可以理解为启动器,它包含了一
系列可以集成到应用里面的依赖包,你可
以一站式集成 Spring 及其他技术,而不
需要到处找示例代码和依赖包
如果想使用 Spring JPA 访问数据库,只
要加入 spring-boot-starter-data-jpa 启动
器依赖就能使用了