Spring Boot简介
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. Spring Boot来简化Spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用。
背景
J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。
解决
- “Spring全家桶”时代。
- Spring Boot —> J2EE一站式解决方案。
- Spring Cloud —> 分布式整体解决方案。
优点
- 快速创建独立运行的Spring项目以及与主流框架集成。
- 使用嵌入式的Servlet容器,应用无需打成WAR包。
- starters自动依赖于版本控制。
- 大量的自动配置,简化开发,也可修改默认值。
- 无需配置xml,无代码生成,开箱即用。
- 准生产环境的运行时应用监控。
- 与云计算的天然集成。
作用
- 简化Spring应用开发的一个框架。
- 整个Spring技术栈的一个大整合。
- J2EE开发的一站式解决方案。
微服务
- 2014年的martin fowler
- 微服务:架构风格(服务微化)
- 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
- 单体应用:ALL IN ONE
- 微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元。
- 微服务文档
环境准备
- Spring Boot现在推荐jdk1.8以上,最好使用1.8或者11的版本。
- maven3.x:本地maven或者idea中的maven。
- Spring Boot:2.3.4(一般情况下都使用RELEASE版本)
Maven设置
给maven的setting.xml配置文件添加如下(指定镜像源和jdk):
<!--镜像源nexus-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<!--指定jdk-->
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
idea整合maven
Spring Boot HelloWorld
一个功能:浏览器发送hello请求,服务器接收请求并处理,响应Hello World字符串。
- 创建一个maven工程;
导入Spring Boot相关的依赖。
<parent> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
编写一个主程序;启动Spring Boot应用。
/** * @author cai-xiansheng * @Description @SpringBootApplication用来标注一个主程序,说明这是一个Spring Boot应用 * @create 2020-10-08 11:38 */ @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { // Spring应用启动起来 SpringApplication.run(HelloWorldMainApplication.class, args); } }
编写相关的Controller、Service ```java /**
- @author cai-xiansheng
- @Description
@create 2020-10-08 11:42 */ @Controller public class HelloController {
@ResponseBody @RequestMapping(“/hello”) public String Hello() { return “Hello Spring Boot!”; }
}
8. 运行主程序测试:
1. 执行有注解@SpringBootApplication的主程序即可运行
1. 在Browser中访问localhost:8080/hello即可
9. 简化部署
```xml
<!--这个插件,可以将应用打包成一个可以执行的jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- package即可打包成功,使用java -jar的命令执行即可,然后还能再Browser中访问即可
Hello World探究
1、POM文件
1、 父文件
<parent>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<!--它的父项目是:spring-boot-dependencies。他来真正管理Spring Boot应用里面的所有依赖版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
spring-boot-dependencies也就是Spring Boot的版本仲裁中心;以后我们呢导入依赖默认是不需要写版本的;(没有在dependencis里面管理的依赖自然需要声明版本号,看下xml文件,发现里面只有spring相关的依赖版本,所以非Spring相关的,需要些完整)
2、启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web:
spring-boot-starter:Spring-Boot场景的启动器;帮助我们导入了web模块正常运行的所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用的什么功能就导入什么场景的启动器。需要什么直接在https://mvnrepository.com/中查找即可
2、主程序类,主入口类
/**
* @author cai-xiansheng
* @Description @SpringBootApplication用来标注一个主程序,说明这是一个Spring Boot应用
* @create 2020-10-08 11:38
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
- @SpringBootApplication:(Spring Boot程序)引用标注在某个类上说明这个类是Spring Boot的主配置类,Spring Boot就应该运行这个类的main方法来启动Spring Boot应用。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}
- @SpringBootConfiguration:Spring Boot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类。
- @Configuration :配置类上来标注这个注解:配置类。。。配置文件,配置类也是一个容器中的一个组件;@Component
@EnableAutoConfiguration:开启自动配置功能;以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉Spring Boot开启自动配置功能;这样自动配置才能生效。
@AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {}
- @AutoConfigurationPackage:自动配置包
- @Import(AutoConfigurationPackages.Registrar.class):Spring的底层注解@Import ,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class,将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
- @Import(AutoConfigurationImportSelector.class):给容器中导入组件:
- EnableAutoConfigurationImportSelector:导入那些组件的选择器;将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入每个场景需要的所有组件,并配置好这些组件。
- 有了自动配置类,免去了我们手动编写配置注入功能组件等工作。
- SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, classLoader);
- @AutoConfigurationPackage:自动配置包
- Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些纸作为自动装配类导入到容器中,自动装配类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;J2EE的整合解决方案和自动配置都在Spring-boot-autoconfigure-1.5.9.RELEASE.jar;
Spring Initalizer快速创建Spring Boot项目
- IDE都支持使用Spring Initializer快速创建项目
- 选择我们需要的模块,向导会联网创建一个Spring Boot项目。
- 默认生成的的SpringBoot项目:
- 主程序已经生成好了,我们只需要我们自己的逻辑。
- resources文件中目录结构:
- static:保存所有的静态资源文件:js,css,images;
- templates:保存所有的模板页面(Spring Boot默认jar包使用嵌入式Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
- application.properties:Spring Boot应用的配置文件,可以修改一些默认配置。
- 可以使用@RestController 代替@ResponseBody和@Controller