1. 基本概念
- SpringBoot 是一个可以整合 Spring, SpringMVC, data-jpa 等框架的工具集
- 整合第三方框架时,只需要导入相应的 start 依赖包,就自动整合了
- SpringBoot 工程部署时,采用的是 jar 方式,内部自动依赖 Tomcat 容器
1.1 优缺点
- Spring Boot 不是微服务技术,Spring Boot 只是一个用于加速开发 Spring 应用的基础框架(Spring Cloud 是微服务技术)
- 如果要基于 Spring Boot 做微服务,相当于需要自己开发很多微服务的基础设施,比如基于 zookeeper 来实现服务注册和发现
- 优点:
- 内嵌 Tomcat 和 Jetty 容器,不需要单独安装容器,jar 包直接运行
- 简化 Maven 配置
- 基于注解的零配置思想
- 和各种流行框架 spring web, mvc, Mybatis, Spring Cloud 无缝整合
2. SpringBoot 三种启动方式
方式一:直接运行 SpringApplication 类中的 main() 方法
方式二:maven 方式
在 SpringBoot 工程目录下运行 mvn spring-boot:run
方式三:jar包运行
首先将 springboot 项目打包为 jar, jar 放入任何地方都行,用 java -jar xxx.jar
运行
2.1 配置文件
- application.properties
-
server.port=9999
等价在外部java -jar xxx.jar --server.port=9999
-
- application.yml
- 严格遵循换行和空格
- value 值一定要有空格 (port: + 空格 + 8080)
server:
port: 8080
2.2 目录结构
- src
- main/java
- test/java
- resources
- static
- templates
3. Spring Boot 项目
3.1 启动类的注解
@SpringBootApplication(scanBasePackages = {"com.boot.train.log"})
- 是一个组合注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(...)
public @interface SpringBootApplication {}
3.2 @SpringBootConfiguration
- 代表启动类就是一个配置类
3.3 @EnableAutoConfiguration
- 实现自动装配
- SpringBoot 项目启动时,SpringFactoriesLoader 类(在 spring-core.jar)
public final class SpringFactoriesLoader {
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
public static <T> List<T> loadFactories(Class<T> factoryType, @Nullable ClassLoader classLoader) {
// ...
for (String factoryImplementationName : factoryImplementationNames) {
result.add(instantiateFactory(factoryImplementationName, factoryType, classLoaderToUse));
}
AnnotationAwareOrderComparator.sort(result);
return result;
}
}
在 spring-boot-autoconfigure.jar 的 spring.factories 文件里配置了 WebMvcAutoConfiguration
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
查看 WebMvcAutoConfiguration 类,实际是由 DispatcherServletAutoConfiguration 类实现加载
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {}
3.4 @ComponentScan
- 扫描包
4. 若工程启动失败,但未打印异常日志
使用 try-catch
public static void main(String[] args) {
try {
SpringApplication.run(BootLogApplication.class, args);
} catch (Exception e) {
e.printStackTrace();
// 不要用log, 因为此时日志打印不出来
}
}
网友评论