Spring Boot 2.x
阅读数:149 评论数: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