本篇博客纯粹讲我遇到这个问题的解决以及思考,如果你想知道解决方法,可以直接看正确解决方案部分。因为是前端写的,所以可能有些明显的内容很容易就看出来了。

  首先:升级后更新其他依赖,以及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的更多相关文章

  1. 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 ...

  2. SpringCloud报错:Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

    今天启动用eureka的服务消费者时,一直出现问题. SpringCloud报错: Caused by: org.springframework.context.ApplicationContextE ...

  3. 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 ...

  4. Activity 中的Toast在Activity销毁后报错,解决方法,把context改成应用的

    ToastUtil.showShort(context, R.string.connection_fail); 改成 ToastUtil.showShort(BusinesslinkApplicati ...

  5. Android 加了自定义Application后报错 Unable to instantiate activity ComponentInfo ClassNotFoundException

    在Android自定义一个类继承集成Application后,并在AndroidManifest.xml里面配置了application的name属性为该类名称后报错: Unable to insta ...

  6. springboot启动报错:Cannot determine embedded database driver class for database type NONE.

    package cn.zb.test; import org.springframework.boot.SpringApplication; import org.springframework.bo ...

  7. zabbix安装unixODBC配置完之后报错

    zabbix安装unixODBC配置完之后报错 libmysqlclient_16 not defined in file libmysqlclient_r.so.16 分析 我没有使用centos6 ...

  8. 我用VS2012在Nuget中安装Signalr之后报错

    我用VS2012在Nuget中安装Signalr之后报错 “/”应用程序中的服务器错误. The following errors occurred while attempting to load ...

  9. 服务器的SVN项目版本较低,check out 下来后报错

    check out下来后报错提示: svn: E155036: Please see the 'svn upgrade' commandsvn: E155036: Working copy '/hom ...

随机推荐

  1. eclipse右下角总显示自动下载xml和jar,如何关闭

    windows->preference->查找download-选择Models->右侧下方Enable auto-download去掉 2.Automatic Updates-&g ...

  2. android:scrollbar的一些属性

    1. activity_maim.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  3. 基于faro SDK 读取fls原始文件

    #define _SCL_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #include <iostream> //#include ...

  4. wifi认证Portal开发系列(二):FreeRadius的安装和测试、关联Mysql

    注:本次安装是基于FreeRadius 3版本进行安装配置的,在配置Mysql的过程中,与2版本有些不同.操作系统是CentOS 7 一.准备工作 工具的安装 #安装rz.sz命令用于文件上传 yum ...

  5. Web大文件(夹)上传(断点续传)控件-Xproer.HttpUploader6

    版权所有 2009-2017荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  6. 【PyCharm编辑器】之引用selenium包提示错误:Unresolved reference 'selenium' less... (Ctrl+F1)

    一.现象还原: 当新建.py文件时,需要引用selenium中的方法时,报错,提示红波浪线: Unresolved reference 'selenium' less... (Ctrl+F1) Thi ...

  7. TP 上传excel

    <?php class ExcelAction extends Action{ public function read($filename,$encode='utf-8'){ vendor(' ...

  8. 架构 -- java

    @.sql写在dao层 原文:http://blog.csdn.net/y_dzaichirou/article/details/53673528 @.Java Web项目需要掌握的技能 原文:htt ...

  9. sql 时间转换格式

    convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_time,121)CONVERT为日期转换函数,一般就是在时间类型(datetime, ...

  10. EasyDSS RTMP流媒体解决方案之Windows服务安装方案

    Windows服务安装 EasyDSS_Solution流媒体解决方案,可以通过start一键启动.在实际应用中,我们希望可以设置成系统服务,那么下面我将会介绍,如何在windows中将流媒体解决方案 ...