目录
Spring Boot 概述
HelloWorld 快速入门
spring-boot-maven-plugin 插件简化部署
spring-boot-starter-parent 组件
spring-boot-starter-web 组件
@SpringBootApplication 启动类
Spring Initializer 快速创建 Spring Boot 应用
1、Spring Boot 用来简化 Spring 应用开发,约定大于配置,去繁从简,just run 就能创建一个独立的,产品级别的应用.
2、产生背景:J2EE 笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。
3、解决方法:Spring Boot 为 J2EE 提供一站式解决方案;Spring Cloud 为分布式提供解决方案
4、Spring Boot 就是整个Spring 技术栈的一个大整合:
Spring Boot官网地址:https://spring.io/projects/spring-boot
Spring Boot 在 GitHub 上的开源地址为:https://github.com/spring-projects/spring-boot
Spring Boot 官方所有开源示例:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples
5、Spring Boot 优点:
1、快速创建独立运行的 Spring 项目以及与主流框架集成
2、使用嵌入式的 Servlet 容器,应用无需打成 WAR 包
3、starters 启动器自动依赖与版本控制
4、大量的自动配置,简化开发,也可修改默认值
5、无需配置 XML,无代码生成,开箱即用
6、生产环境的运行时应用监控
7、与云计算的天然集成
Spring Boot :用于快速开发微服务中的各个功能/小型服务
Spring Cloud :用于将各个功能/小型服务连接起来
Spring Cloud Data Flow :用于处理服务之间的数据
1、环境使用:Maven 3.5.2、Java JDK1.8、IDEA 14、Spring Boot 2.1.3.RELEASE
2、为了体现循序渐进,本文新建 Maven 项目,暂时不使用 Spring 初始化器创建。
3、pom.xml 依赖添加如下:
4.0.0
www.wmx.com
helloWorld
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-maven-plugin
4、新建 MianApp.java 作为做整个应用的启动入口类,同时添加 @SpringBootApplication 注解,表示当前类为主程序类,且这是一个 Spring Boot 应用。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author wangmaoxiong
* @version 1.0
* @SpringBootApplication : 表示当前类为主程序类,这是一个 Spring Boot 应用
* @date 2020/4/28 17:00
* 其它 Spring 组件都必须放在应用 @SpringBootApplication 注解所在类的同包或者其子包下面
*/
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
/** 启动 Spring 应用,写法是约定的,就像启动Java FX应用一样 */
SpringApplication.run(MainApp.class, args);
}
}
所有其它 Spring 组件(如Controller层、Service层、Dao层、定时器等)都必须放在应用 @SpringBootApplication 注解所在类的同包或者其子包下面,因为应用从启动类开始启动,然后会扫描启动类同包及其子包下面的组件,如果放在其它地方则会因为扫描不到而是要不了。
5、新建一个控制层,用于从浏览器访问:
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author wangmaoxiong
* @version 1.0
* @date 2020/4/28 17:02
*/
@Controller
public class HelloWorldController {
/**
* http://localhost:8080/hello
* @return
* @RequestMapping 表示浏览器地址请求的路径
* @ResponseBody 表示不是做页面跳转,而是直接返回内容到页面
*/
@ResponseBody
@RequestMapping("/hello")
public String hello() {
JsonNodeFactory nodeFactory = JsonNodeFactory.instance;
ObjectNode objectNode = nodeFactory.objectNode();
objectNode.put("code", 200);
objectNode.put("meg", "成功");
objectNode.put("data", "");
return objectNode.toString();
}
}
6、启动运行:
1)从输出信息中可以看到,并没有手动配置 Tomcat 服务器,但是仍然启动了一个,而且端口是 8080,这是因为 Spring Boot 自己将 Tomcat 嵌入在内部,且默认使用 8080 端口。
2)路径 "/hello" 访问成功,因为没有配置过应用名,所以默认为空。
1、Spring Boot 提供了如下插件可以将整个 Spring Boot 应用(即使是普通的 Java Web 应用)打包成一个可执行 Jar 文件,于是以后可以直接双击就能运行,简化了 web 应用部署。
org.springframework.boot
spring-boot-maven-plugin
2、可以运行 "package" 将应用打包到 IDEA 工作目录下,也可以运行 "install" 将应用打包到 Maven 本地仓库下
3、运行方式一:直接双击可执行 jar 包 "helloWorld-1.0-SNAPSHOT.jar" 运行应用程序,此时在任务管理器可以看到 "javaw.exe" 的进程,结束此进程即可关闭应用程序。
4、运行方式二:命令行使用 "java -jar ****.jar" 运行应用程序。此时可以看到应用启动信息,也可以看到应用输出的所有信息,就相当于 Tomcat 的启动小黑窗口,关闭命令行窗口即可关闭应用程序。
5、应用中自己编写的类以及所有依赖的 jar 包全部打包到了下面的 "helloWorld-1.0-SNAPSHOT.jar" 中,其中就包括了集成的Tomcat 服务器
1、自己的 Spring Boot 项目需要继承 spring-boot-starter-parent 项目,因为 spring-boot-starter-parent 项目继承了 spring‐boot‐dependencies。
org.springframework.boot
spring-boot-dependencies
2.1.3.RELEASE
../../spring-boot-dependencies
2、spring‐boot‐dependencies 真正管理 Spring Boot 应用里面的所有版本依赖关系,它的 pom.xml 文件也是最大的,是 Spring Boot 的版本仲裁中心;
1、spring-boot-starter-web 是 spring-boot 场景启动器(spring-boot-starter)之一,集成了 web 应用开发的常用 API ;
2、Spring Boot 将所有的功能场景都抽取出来,做成一个个starters(启动器),只需要在项目里面引入这些 starter,相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器。
3、官网 Starters 可以看到所有的启动器,这些 starters 几乎涵盖了 java ee 所有常用场景,Spring Boot 对这些场景依赖的 jar 也做了严格的测试与版本控制。
4、Spring Boot 所有版本的官方文档:https://docs.spring.io/spring-boot/docs/
1、@SpringBootApplication:标注在某个类上说明这个类是 SpringBoot 的主配置类,SpringBoot 就会运行这个类的 main 方法来启动 SpringBoot 应用;
2、@SpringBootApplication 注解内容如下所示:
@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 {
1)@SpringBootConfiguration:是 Spring Boot 的配置类,标注在某个类上,表示这是一个Spring Boot的配置类;
2)@EnableAutoConfiguration:开启自动配置功能,以前需要手动配置的东西,现在Spring Boot帮我们自动进行配置;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
@Configuration :标识配置类、配置文件;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
String value() default "";
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
1、@Import:导入所有的自动配置场景
2、@AutoConfigurationPackage:定义默认的包扫描规则,程序启动扫描加载主程序类所在的包以及下面所有子包的组件;
3、EnableAutoConfigurationImportSelector:导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
4、Spring Boot 在启动的时候从类路径下的 META-INF/spring.factories 中获取 EnableAutoConfiguration 指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要手动配置的东西,自动配置类都帮我们配置好,J2EE 的整体整合解决方案和自动配置都在spring-boot-autoconfigure-x.x.x.RELEASE.jar 中;
1、虽然可以创建 Maven 应用,然后通过追加依赖与注解的方式改为 Spring Boot 应用,但是实际生产中都是通过 Spring Initializr. 进行快速创建。
2、IDEA 中也集成了 Spring 初始化器来进行快速构建项目 File -> New Project :
1、https://start.spring.io/ 是 Spring Boot 官网提供的快速构建项目的地址,开发人员可以直接去官网进行构建 Spring Boot 项目然后下载,最后导入到 IDEA 中。
2、如果 https://start.spring.io/ 访问慢,则可以将 https 改成 http 试试。
1、src/main/java:源码目录,主程序 "HelloWorldQuick" 已经生成好了,只需要写我们自己的逻辑业务代码,注意Spring 组件默认必须在主程序同包或者其子包下面。
2、src/main/resources :资源目录;
2.1)static:保存所有的静态资源,如 以前的 js、css、images、音视频文件等;
2.2)templates:保存所有的模板页面,注意 Spring Boot 默认 jar 包使用嵌入式的 Tomcat,默认不支持JSP页面);但可以使用模板引擎,如 freemarker、thymeleaf;
2.3)application.properties:Spring Boot 应用的配置文件,用来修改Spring Boot 的默认设置,如Tomcat的默认端口号等;3、src/test:Maven 的测试目录。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by Administrator on 2018/7/10 0010.
*
* @ResponseBody 写在方法上时,说明对应方法直接返回内容给浏览器;
* 写在类上时,表示整个类中的方法都直接返回内容给浏览器
*/
@ResponseBody
@Controller
public class HelloWorldController {
@RequestMapping("hello")
public String hello() {
return "Hello World quick !";
}
}
4、可以修改 Spring Boot 内置的 Tomcat 服务器端口号: