SpringBoot 版本升级后报错 Cannot instantiate interface org.springframework.context.ApplicationContextInitializer
本篇博客纯粹讲我遇到这个问题的解决以及思考,如果你想知道解决方法,可以直接看正确解决方案部分。因为是前端写的,所以可能有些明显的内容很容易就看出来了。
首先:升级后更新其他依赖,以及Application.yml的配置,去除旧的内容就不说了,比较简单。
遇到这个问题,是因为 SpringBoot 升级 后导致的,程序不能运行,至于原因,则是因为我们 前端写后台代码,大部分是根据之前项目 配置,所以版本过低,而需要升级。
写这篇文章是记录一下自己的思考,以及其中的周折,也帮助其他人快速找到问题的根源。也许会有人问,你们后台呢。他们没有这么升级过,给的建议是直接一步步导入到一个新的项目中。。而我觉得,问题既然产生,定然是有原因的,若没找到,导入也不一定好转,反而错过了踩坑的机会。
错误内容:
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer
Cannot instantiate interface org.springframework.context.ApplicationContextInitializer
第二句已经写出来了,是springframework 上下文内容问题,启动时报错。第一句搜索基本不是相关问题,第二句得到一个答案:升级 springframework.version 为 2.0以上,但是仍然会报错。
下面产生我的第一个思路:
检查导入的依赖,果然发现有一个 org.springframework.boot 版本为 1.3.6, 果断更新,到官网查找后发现2.0.3版本,在项目引入,版本依然是1.3.6,因为 SpringBoot 2.0后移除了这个依赖。但由于 Application 启动,并不必须 SpringBootServletInitializer, 果断删除。 在.xml 中移除依赖。
结果打包成功!但在tomcat访问产生404。。
下面产生第二个思路:(这个思路其实是无理的,可以节省的)
看到SpringBoot 官网文档说,2.0以后导出war包必须要有SpringBootServletInitializer,但在我加上后导入依赖仍然是1.3.6, 我就抱着侥幸的心里,导入了2.0.3版本的 org.springframework.boot ,侥幸的想着,可能运行不了,但打的包可以用,然后打完war包,再返回来去掉,运行代码。这哪里符合简洁的标准!!!接着跟着网上配置了一波 xml, 打了一系列包,在tomcat中都启动失败。
下面产生第三个思路:
我为何不新建一个SpringBoot 2.0的项目,测试打包是否可行!!想到就做,这里说以SpringBoot 项目新建完后需要导入spring-boot-starter-web,spring-boot-starter-tomcat两个依赖。然后引入 SpringBootServletInitializer ,发现并没有让我导入依赖。至此,发现差异。回头解决。其实完全不需要导入org.springframework.boot 依赖,而是直接导入org.springframework.boot.web.servlet.support.SpringBootServletInitializer;即可。
接着clean,运行打包,放入tomcat。go ok!
正确解决方案:
首先继承 SpringBootServletInitializer , 但不要导入 org.springframework.boot 。 导入org.springframework.boot.web.servlet.support.SpringBootServletInitializer;即可。
@SpringBootApplication
public class Application extends SpringBootServletInitializer { @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
} public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
} }
修改pom.xml, clean 项目,重新打包即可。
<packaging>war</packaging> <dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
随感
其实这个显然从到到尾并不是很难的问题,一切都要按照合理的思路思考,并且不烦躁,应该会解决的更快一些。可能因为马上要放高温假了,就想着赶快把一切处理好,多加备用方案。所以有些急了,急显然会让一些简单的东西从眼皮下面溜走。。
哇,我是前端呀!!!不要觉得这个coder要走后台了,正因为对后台不了解,才能发这些简单的,但又让自己绕弯的内容。。但对于前端,见到的越多,理解的越深,越发现不知道的越多,不了解的越多。只能求知若渴,不敢提笔妄谈。希望有天有所认知,可以分享给大家。
SpringBoot 版本升级后报错 Cannot instantiate interface org.springframework.context.ApplicationContextInitializer的更多相关文章
- springboot 启动报错"No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available"
1.问题 springboot启动报错 "D:\Program Files\Java\jdk-11\bin\java.exe" -XX:TieredStopAtLevel=1 -n ...
- SpringCloud报错:Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
今天启动用eureka的服务消费者时,一直出现问题. SpringCloud报错: Caused by: org.springframework.context.ApplicationContextE ...
- Springboot启动后报错【This application has no explicit mapping for /error, so you are seeing this as a fallback····】
This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Dec 1 ...
- Activity 中的Toast在Activity销毁后报错,解决方法,把context改成应用的
ToastUtil.showShort(context, R.string.connection_fail); 改成 ToastUtil.showShort(BusinesslinkApplicati ...
- Android 加了自定义Application后报错 Unable to instantiate activity ComponentInfo ClassNotFoundException
在Android自定义一个类继承集成Application后,并在AndroidManifest.xml里面配置了application的name属性为该类名称后报错: Unable to insta ...
- springboot启动报错:Cannot determine embedded database driver class for database type NONE.
package cn.zb.test; import org.springframework.boot.SpringApplication; import org.springframework.bo ...
- zabbix安装unixODBC配置完之后报错
zabbix安装unixODBC配置完之后报错 libmysqlclient_16 not defined in file libmysqlclient_r.so.16 分析 我没有使用centos6 ...
- 我用VS2012在Nuget中安装Signalr之后报错
我用VS2012在Nuget中安装Signalr之后报错 “/”应用程序中的服务器错误. The following errors occurred while attempting to load ...
- 服务器的SVN项目版本较低,check out 下来后报错
check out下来后报错提示: svn: E155036: Please see the 'svn upgrade' commandsvn: E155036: Working copy '/hom ...
随机推荐
- SQLSERVER聚集索引和主键(Primary Key)的误区认识
引用别人的,供以后学习使用,谢谢! 很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西.这个概念是非常错误的. 主键是一个约束(constraint),他依附在一个索引上,这个 ...
- 用递归法将一个整数n转换成字符串。
用递归法将一个整数n转换成字符串. 比如,输入483,应输出字符串"483".n的位数不确定,能够是随意位数的整数. #include "stdafx.h" # ...
- 在windows下安装apidocjs
1. 下载Node.js官方Windows版程序: https://nodejs.org/download/ 从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.M ...
- Spring中的scope配置和@scope注解
Scope,也称作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围.在 Spring IoC 容器中具有以下几种作用域:基本作用域(single ...
- 数据挖掘之pandas
sdata={'语文':89,'数学':96,'音乐':39,'英语':78,'化学':88} #字典向Series转化 @@ >>> studata=Series(sdata) & ...
- 精彩回顾 HUAWEI HiAI 亮相华为北研所
从普通照片变成艺术品,仅需3秒: 从随手拍下的讲解胶片到生成规整清晰的ppt,只要瞬间…… 5月25日在华为北京研究所举办的HUAWEI HiAI技术合作交流会上,伴随着一声声惊叹,数款接入HUA ...
- PHPExcel简易使用教程
在企业里使用PHP进行开发,不可避免总会遇到读/写Excel的需求,遇到这种需求,一般使用PHPExcel类库进行开发. PHPExcel现在最新版本是1.8.0,最低需要PHP5.2版本,支持读取x ...
- WPF SDK研究 之 数据绑定
这一章介绍数据绑定.本章共计27个示例,全都在VS2008下.NET3.5测试通过,点击这里下载:ConnectedData.rar 1.ShowDataWithoutBinding注: <?M ...
- wpf 获取datagrid 模板列中的控件
目前采用的 方法 (网上提供的一款) public static DataGridRow GetRow(DataGrid datagrid, int columnIndex) { ...
- Windows下Nginx+Web.py+FastCGI服务搭建
在搭建之前,有必要了解下什么是fastcgi,但鉴于我自己也不大了解,这里就不搬门弄斧了,请参考各种百科和官网资料. 1.资源下载 python下载地址:戳这里webpy下载地址:戳这里flup下载地 ...