基于SpringBoot2.0版本与老版本的区别

目录
  • SpringBoot版本问题
    • 这是maven依赖
    • 一、解决方案
    • 二、解决方案

SpringBoot2.0版本新特性

以Java 8 为基准

Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。

内嵌容器包结构调整

为了支持reactive使用场景,内嵌的容器包结构被重构了的幅度有点大。EmbeddedServletContainer被重命名为WebServer,并且org.springframework.boot.context.embedded 包被重定向到了org.springframework.boot.web.embedded包下。

举个例子,如果你要使用TomcatEmbeddedServletContainerFactory回调接口来自定义内嵌Tomcat容器,你现在应该使用TomcatServletWebServerFactory。

Servlet-specific 的server properties调整

大量的Servlet专属的server.* properties被移到了server.servlet下:


Old property


New property


server.context-parameters.*


server.servlet.context-parameters.*


server.context-path


server.servlet.context-path


server.jsp.class-name


server.servlet.jsp.class-name


server.jsp.init-parameters.*


server.servlet.jsp.init-parameters.*


server.jsp.registered


server.servlet.jsp.registered


server.servlet-path


server.servlet.path

由此可以看出一些端倪,那就是server不再是只有servlet了,还有其他的要加入。

Actuator 默认映射

ctuator的端点(endpoint)现在默认映射到/application,比如,/info 端点现在就是在/application/info。但你可以使用management.context-path来覆盖此默认值。

Spring Loaded不再支持

由于Spring Loaded项目已被移到了attic了,所以不再支持Spring Loaded了。现在建议你去使用Devtools。Spring Loaded不再支持了。

支持Quartz Scheduler

Spring Boot 2 针对Quartz调度器提供了支持。你可以加入spring-boot-starter-quartz starter来启用。而且支持基于内存和基于jdbc两种存储。

OAuth 2.0 支持

Spring Security OAuth 项目中的功能将会迁移到Spring Security中。将会OAuth 2.0。

支持Spring WebFlux

WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。该模块中包含了对反应式 HTTP、服务器推送事件和 WebSocket 的客户端和服务器端的支持。

对于开发人员来说,比较重要的是服务器端的开发,这也是本文的重点。

在服务器端,WebFlux 支持两种不同的编程模型:第一种是 Spring MVC 中使用的基于 Java 注解的方式;第二种是基于 Java 8 的 lambda 表达式的函数式编程模型。这两种编程模型只是在代码编写方式上存在不同。

它们运行在同样的反应式底层架构之上,因此在运行时是相同的。

WebFlux 需要底层提供运行时的支持,WebFlux 可以运行在支持 Servlet 3.1 非阻塞 IO API 的 Servlet 容器上,或是其他异步运行时环境,如 Netty 和 Undertow。

版本要求

  • Jetty

    • 要求Jetty最低版本为9.4。
  • Tomcat
    • 要求Tomcat最低版本为8.5。
  • Hibernate
    • 要求Hibernate最低版本为5.2。
  • Gradle
    • 要求Gradle最低版本为3.4。
  • SendGrid
    • SendGrid最低支持版本是3.2。为了支持这次升级,username和password已经被干掉了。因为API key现在是唯一支持的认证方式。

SpringBoot版本问题

IDEA创建springboot中启动问题

Exception in thread “main” java.lang.AbstractMethodError:

org.springframework.boot.context.config.ConfigFileApplicationListener.supportsSourceType(Ljava/lang/Class;)Z

大家度知道这是一个springboot的启动类

这是maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>spring-context</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

看起来万事俱备,也很符合springboot启动需要,那就启动吧

Exception in thread "main" java.lang.AbstractMethodError:

org.springframework.boot.context.config.ConfigFileApplicationListener.supportsSourceType(Ljava/lang/Class;)Z

结果给你抛出这样的异常

此时不慌,原因有两个(我所能想到的,不喜勿喷)

  • jar冲突
  • springboot的版本问题

一、解决方案

IDEA中下载maven helper插件,方便排查jar冲突,

重启后的点击pom会出现Dependency Analyzer

排查冲突后再次运行程序,出现如下情况

二、解决方案

像魔鬼一样还是没有解决,这时候疯狂的上百度搜,依然没有找到办法解决,最后在拉屎的瞬间想到springboot 有一个 1.5.6的版本,出于好奇将2.1.3版本修改为1.5.6版本如下

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

看到下面的图,恭喜你,springboot启动成功

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • spring boot和spring cloud之间的版本关系

    什么是Spring Boot Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的.产品级别的Spring应用. Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始.多数Spring Boot应用只需要很少的Spring配置. Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的

  • spring boot2.0总结介绍

    从这篇文章开始以spring boot2为主要版本进行使用介绍. Spring boot 2特性 spring boot2在如下的部分有所变化和增强,相关特性在后续逐步展开. 特性增强 基础组件升级: JDK1.8+ tomcat 8+ Thymeleaf 3 Hibernate 5.2 spring framework 5 Reactive Spring Functional API Kotlin支持 Metrics Security 使用变化 配置属性变化 Gradle插件 Actuator

  • Spring和SpringBoot有哪些区别

    概述 对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,相信对于用了 SpringBoot很久的同学来说,还不是很理解 SpringBoot到底和 Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法! 什么是Spring 作为 Java开发人员,大家都 Spring都不陌生,简而言之, Spring框架为开发 Java应用程序提供了全面的基础

  • Spring和SpringBoot比较及区别解惑

    1.概述: 对于 Spring 和 SpringBoot 到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot 的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,我相信对于用了 SpringBoot 很久的开发人员来说,有绝大部分还不是很理解 SpringBoot 到底和 Spring 有什么区别,看完文章中的比较,或许你有了不同的答案和看法! 2.什么是Spring呢? 先来聊一聊 Spring 作为 Java 开发人员,大家都 Spring 可不陌

  • 基于SpringBoot2.0默认使用Redis连接池的配置操作

    SpringBoot2.0默认采用Lettuce客户端来连接Redis服务端的 默认是不使用连接池的,只有配置 redis.lettuce.pool下的属性的时候才可以使用到redis连接池 redis: cluster: nodes: ${redis.host.cluster} password: ${redis.password} lettuce: shutdown-timeout: 100 # 关闭超时时间 pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制

  • 基于SpringBoot2.0版本与老版本的区别

    目录 SpringBoot版本问题 这是maven依赖 一.解决方案 二.解决方案 SpringBoot2.0版本新特性 以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了的幅度有点大.EmbeddedServletContainer被重命名为WebServer,并且org.springframework.boot.context.embedded

  • 基于Springboot2.0构建ES的多客户端

    有时候我们操作es的时候会有一些特殊的需求,例如需要操作的index使用了不同的es服务器.用户名.密码.参数等,这个时候我们需要使用不同的es的客户端进行操作,但是我们又不希望拆分成多个项目进行使用,这个时候我们就需要在我们的配置中自己构建一套ES的多客户端了. 文章目录 pom.xml ElasticsearchConfig.java ElasticsearchRestClient.java 最终 pom.xml 首先是我们的pom.xml: <dependencies> <depe

  • Android Studio 3.0 gradle提示版本太老

    很多朋友在用Android Studio 3.0 gradle提示一下内容: The android gradle plugin version 3.0.0-alpha1 is too old, please update to the latest version. To override this check from the command line please set the ANDROID_DAILY_OVERRIDE environment variable to "d27b293

  • Python3.0与2.X版本的区别实例分析

    本文通过列举出一些常见的实例来分析Python3.0与2.X版本的区别,是作者经验的总结,对于Python程序设计人员来说有不错的参考价值.具体如下: 做为一个前端开发的码农,最近通过阅读最新版的<A byte of Python>并与老版本的<A byte of Python>做对比后,发现Python3.0在某些地方还是有些改变的.之后再查阅官方网站的文档,总结出一下区别: 1. 如果你下载的是最新版的Python,就会发现所有书中的Hello World例子将不再正确. Py

  • PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析

    本文实例分析了PHP5.0~5.6 各版本兼容性cURL文件上传功能.分享给大家供大家参考,具体如下: 最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件.踩坑若干,够一篇文章了. 重要警告 没事不要读PHP的官方中文文档!版本跟不上坑死你! 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cURL支持通

  • 详解vite2.0配置学习(typescript版本)

    介绍 尤于溪的原话. vite与 Vue CLI 类似,vite 也是一个提供基本项目脚手架和开发服务器的构建工具. vite基于浏览器原生ES imports的开发服务器.跳过打包这个概念,服务端按需编译返回. vite速度比webpack快10+倍,支持热跟新, 但是出于处于测试阶段. 配置文件也支持热跟新!!! 创建 执行npm init @vitejs/app ,我这里选择的是vue-ts 版本 "vite": "^2.0.0-beta.48" alias别

  • Springboot2.6.x高版本与Swagger2版本冲突问题解决方法

    目录 问题: 原因 完整解决方案: 问题: Spring Boot 2.6.x版本引入依赖 springfox-boot-starter (Swagger 3.0) 后,启动容器会报错: Failed to start bean ‘ documentationPluginsBootstrapper ‘ ; nested exception… 原因 Springfox 假设 Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Boot 2.6.x版本的默认匹

  • sql server 2008安装失败的解决办法 彻底卸载老版本!

    有很多人在装sql server的时候,稍有不慎就安装失败.sql server 2008应该是用的比较多的,很多人都遇到了安装失败的问题,什么原因造成的呢?小编这里简单的总结了下,并为大家带来解决办法,不妨试试哦! 如图:安装失败都是因为以前的老版本未卸载干净造成的! 怎么解决? 1.停止所有跟Sql相关的服务:控制面板-〉管理工具-〉服务 2.在控制面板中卸载所有和SQL有关的一切程序或者组建 3.注册表清理(): 3.1彻底删除SQL Server: hkey_local_machine\

  • 新老版本juqery获取radio对象的方法

    新版本(目前1.3.2): $("[name='radio_name'][checked]").val(),或者$("input[name='radio_name']:checked").val() 老版本: $("[@name='radio_name'][checked]").val(),或者$("[@name='radio_name']:checked").val() 不同之处在于老版本多了一个@符号

随机推荐