Spring Boot 2.x

阅读数:106 评论数:0

跳转到新版页面

分类

python/Java

正文

从SSH(Structs/Spring/Hibernate)到SSM(SpringMVC/Spring/MyBatis),到现在一个S(Spring)就够的年代,可见Spring越来越重要了。

Spring Boot是用来简化Spring应用的搭建到开发的过程,只需要通过java -jar或tomcat或maven插件run或shell脚本就可以启动项目。因为SpringBoot是“约定优于配置”,所以只要很少的Spring配置文件。

上图是Spring Boot 2.0的架构图,Spring Boot 2.0是基于Spring 5 Framework,提供了异步非阻塞IO的响应式Stream、非阻塞式Reactive Web框架Spring WebFlux。

开发环境要求:

 (1)JDK1.8环境及以版本

(2)Spring Framework 5.0及以上版本

(3)Maven 3.2+/Gradle 1.12+

这种模式很适合Spring Boot来开发,View使用JSP或其他模板引擎(默认支持FreeMarker、Groovy、Thymeleaf、Mustache)。

传统模式比如获取用户,是从用户view层发送获取用户请求到Spring Boot提供的用户控制层,然后获取数据封装进Model,最后将model返回到view。

因为Spring Boot基于Spring,所以Spring能做的,Spring就能做到,而且更方便。

这种架构,免不了的是API文档作为中间的桥梁,Spring很方便的开发REST API,前端通过调用REST API获取数据,数据形式可能是JSON或者XML等。

然后进行视图渲染,这里的前端也有对应的前端模板引擎。

Spring WebFlux是基于Reactive Streams API和Servlet 3.1+容器设计的。

先理解Stream流是什么?流是序列,是生产者生产,一个或多个消费者消费的元素序列。对应发布订阅设计模式,常见的流处理机制是pull或push模式。其中背压是一种常用策略,就是消费者需要多少,生产者就生产多少。

Reactive Streams(响应式流)是提供处理非阻塞背压异步流的一种标准,主要针对运行时环境(JVM和JS)和网络。同样,JDK 9 java.util.concurrent包提供了两个主要的API来处理响应流:

(1)Flow

(2)SubmissionPublisher

而在3.1 规范中一个新特性是异步处理支持,即Servlet线程不需要一直阻塞,即不需要业务处理完毕再输出响应,然后结束Servlet线程。异步处理的作用是在接收到请求之后,Servlet线程可以将耗时的操作委派给另一个线程来完成,在不生成响应的情况下返回至容器。

左侧是传统的基于Servlet的Spring Web MVC框架,右侧是5.0版本引入的基于Reactive Streams的Spring WebFlux框架。

(1)Router Functions:提供一套函数风格的API,用于创建Router、Handler、Filter。

(2)WebFlux:核心组件,协调上下游各个组件提供响应式编程支持。

(3)Reactive Streams:一种支持背压的异步数据流处理标准,主流实现有RxJava和Reactor,Spring WebFlux默认集成的是Reactor。

在Web容器的选择上,Spring WebFlux即支持像Tomcat、Jetty这样的传统容器(前提是支持Servlet 3.1 Non-Blocking API),又支持像Netty、Undertow那样的异步容器,不管是何种容器,Spring WebFlux都会将其输入输出流适配成Flux<DataBuffer>格式,以便进行统一处理。

除了新的Router Functions接口, Spring WebFlux同时支持使用老的Spring MVC注解声明Reactive Controller,和传统的MVC Controller不同,Reactive Controller操作是非阻塞的ServerHttpRequest的ServerHttpResponse,而不是HttpServletRequest和HttpServletResponse。

1、jar中没有主清单属性

jar包中包含三个文件夹:Boot-inf , meta-inf, org,在meta-inf文件夹下有一个manifest.mf文件,该文件指明了程序的入口以及版本信息等。

main-class代表了spring boot中启动的jar包的程序。

start-class属性就代表了spring boot程序的入口类,这个类中应该有一个main方法。

spring-boot-classes代表了类的路径,所有编译后的class文件,以及配置文件,都存储在该路径 下。

spring-boot-lib表示依赖的jar包存储的位置。

这些值都是springboot打包插件都会默认生成的,如果没有这些属性,springboot程序自然不能运行,就会报错:jar 中没有主清单属性。

解决方法,在pom中添加一个springboot的构建的插件,

 

最后欢迎大家访问我的个人网站:1024s




相关推荐

一、概述 springboot中有两种方式使用kafka时,直接使用kafka-client连接kafka服务;另一种是使用spring-kafka框架来连接kafka。 1、版本兼容 使用时要注意版

当然可以自己写redis的工具类,或者使用第三方开源jar包或代码,这里使用spring boot的集成类。 一、pom依赖 <dependency> <gro

websocket协议基于tcp的网络协议,它实现浏览器与器全双工通信。 spring boot2 +websocket 1、添加依赖 <pre clas

背景: 之前用spring boot+mybatis+oracle,现在要改成spring boot_mybatis+postgresql。 为了想让一套代码即可

共同点 都是用来表示Spring某个类是否可以接收HTTP请求。 不同点 @Controller标识一个spring类是Spring MVC c

系统异常捕获 参见:spring boot 2 全局异常处理 @ControllerAdvice(annotations = {RestController.class}) public class

@ConditionalOnMissingBean只能在@Bean注解的方法上使用。 可以给该注解传入参数例如@ConditionOnMissingBean(name = "exa

2.4版本之前 在之前,我们在yaml配置文件中,使用spring.profiles来定义不同环境的标识,比如下面这样: <pre class="language-ma

在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。   同时,SpringBoot也支持Undertow容器,Undert

一、配置 <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter</