SpringBoot是一个开源框架,它可用于创建可执行的Spring应用程序,采用了习惯优于配置的方法。
此框架的神奇之处在于@EnableAutoConfiguration注解,此注释自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。
1、核心功能
- Springboot项目为独立运行的spring项目,java -jar xx.jar即可运行
- 内嵌servlet容器(可以选择内嵌: tomcat ,jetty等服务器)
- 提供了starter的pom 配置 简化了 maven的配置
- 自动配置spring容器中的bean.当不满足实际开发场景,可自定义bean的自动化配置
- 准生产的应用监控(基于: ssh , http , telnet 对服务器运行的项目进行监控)
- SpringBoot无需做出xml配置,也不是通过代码生成来实现(通过条件注解)
2、什么是SpringBoot
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。用来简化spring应用的初始搭建以及开发过程使用特定的方式来进行配置,创建独立的spring引用程序 main方法运行,嵌入的Tomcat 无需部署war文件,简化maven配置。
3、SpringBoot 的优点
快速创建独立运行的spring项目与主流框架集成;使用嵌入式的servlet容器,应用无需打包成war包;starters自动依赖与版本控制;大量的自动配置,简化开发,也可修改默认值;准生产环境的运行应用监控;与云计算的天然集成。
4、SpringBoot 热部署
这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。
Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。
开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。
这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
5、SpringBoot 中的监视器
Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。
6、SpringBoot 的核心注解
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
1)@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
2)@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。自动装配利用SpringFactoriesLoader来加载META-INF/spring.factoires文件里所有配置的EnableAutoConfgruation,它会经过exclude和filter等操作,最终确定要装配的类,实现自动装配主要是 ((AbstractApplicationContext) applicationContext).refresh()。会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean。
3)@ComponentScan:Spring组件扫描,是一个包扫描注解,由于没有指定扫描范围,所以它会扫描同级包目录下的所有类。
7、SpringBoot三大特性
1)SpringBoot内置了servlet容器,项目可以直接打包成jar形式,使用java -jar命令运行,而不必像以前打包成war包形式放到tomcat下运行。正因为这个机制,结合Jenkins、Docker自动化运维得以实现。
2)SpringBoot提供的actuator插件提供了大量的生产级特性,可以帮助监控和管理SpringBoot应用,比如健康检查、审计、统计和HTTP追踪。这在微服务中,可以通过actutor提供的端点与外部应用监控系统进行整合,比如Prometheus、DataDog来进行服务监控。
3)SpringBoot能很方便的使用第三方包,只需做简单的配置即可使用,例如:jdbc、web-mvc等。
8、你如何理解 SpringBoot 中的 Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
9、SpringBoot 的几种读取配置的方式
Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量
1)读取application文件
在application.yml或者properties文件中添加:
info.address=CHINA
// @Value注解读取方式
@Component
public class InfoConfig{
@Value("${info.address}")
private String address;
}
// @ConfigurationProperties注解读取方式
@Component
@ConfigurationProperties(prefix="info")
public class InfoConfig{
private String address;
}
2)读取指定文件
资源目录下建立config/db-config.properties:
db.username=root
// @PropertySource+@Value注解读取方式
// 注意:@PropertySource不支持yml文件读取。
@Component
@PropertySource(value={"config/db-config.properties"})
public class DBConfig{
@Value("${db.username}")
private String username;
}
// @PropertySource+@ConfigurationProperties注解读取方式
@Component
@ConfigurationProperties(prefix= "db")
@PropertySource(value={"config/db-config.properties"})
public class DBConfig{
private String username;
}
// Environment读取方式
// 以上所有加载出来的配置都可以通过Environment注入获取到
@Autowired private Environment env;
// 获取参数
String getProperty(String key);
10、SpringBoot 支持的日志框架以及推荐和默认的日志框架
Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。
spring-boot-starter启动器包含spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。
具体请看这篇文章:《Spring Boot日志集成》
11、SpringBoot 配置加载顺序
在 Spring Boot 里面,可以使用以下几种方式来加载配置。
- properties文件;
- YAML文件;
- 系统环境变量;
- 命令行参数;
具体请看这篇文章:《Spring Boot 配置加载顺序详解》
12、SpringBoot 2.X 有什么新特性?与 1.X 有什么区别?
- 配置变更
- JDK 版本升级
- 第三方类库升级
- 响应式 Spring 编程支持
- HTTP/2 支持
- 配置属性绑定
- 更多改进与加强
具体请看这篇文章:《Spring Boot 2.x 新特性总结及迁移指南》
13、SpringBoot 可以兼容老 Spring
使用 @ImportResource
注解导入老 Spring 项目配置文件。
集成老项目spring框架的容器配置文件即可
spring-boot一般提倡零配置.但是如果需要配置,也可增加
@ImportResource({"classpath:spring1.xml" , "classpath:spring2.xml"})
注意:resources/spring1.xml位置