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 ...
随机推荐
- Git小玩
早就听说了GitHub的强大. 一直没有机会去看, 在公司实习的几个月里也没机会接触SVN和Git, 可是抱着对Linus大神的崇敬, 和开源的崇敬之情. 趁着不忙的几天, 来学习一下Git. 希 ...
- the Determine in June
今天是6月10号,周三. 自己做的CSDN博客端(仿小巫博客,ps:里边的框架和代码优化都是自己又一次用新框架做的或者自己又一次实现)也已经有三天了.进度还差非常多--- 结合了上次投简历的经验和期末 ...
- android开发系列之使用xml自定义控件
在android开发的过程中,有的时候面对多个Activity里面一些相同的布局,我们需要写多次相同的代码,同时这种方法给我们的项目维护也带来了很大不便.那么有没有一种可行的办法能够将Activity ...
- 有关SQL注入的知识
SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西.不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是 ...
- erlang中的图片下载
问题如题,这是在一个群里问的一个的问题.其实就是http的Server的上传下载的功能. ibrowse:start().ibrowse:send_req("http://img1.gti ...
- linux环境tomcat配置及hadoop 2.6伪分布模式安装配置
一.ubuntu 15.04.openjdk1.7.tomcat7环境配置 1. 配置openjdk1.7,输入命令: -jdk 2. 查看java是否安装成功,输入命令: envjava -vers ...
- diy文件系统上创建文件的流程
[0]README 0.1) source code are from orange's implemention of a os , and for complete code , please v ...
- 关于EF输出sql的执行日志
sqlserver中可以使用sql profiler:但是mysql当中无法查看:只能借助于组件: ADO.NET Entity Framework CodeFirst 如何输出日志(EF4.3) 用 ...
- cmake是什么
1 cmake是什么 cmake是一个管理软件build过程的工具.它并不会直接build处软件可执行文件本身,而是build出可以build出软件本身的全部工程文件,比如makefiles.xcod ...
- Nested Classes
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html package priceton; /* * Copyright (c) ...