SpringBoot版本升级后报错Cannotinstantiateinterfaceor。。。  本篇博客纯粹讲我遇到这个问题的解决以及思考,如果你想知道解决⽅法,可以直接看正确解决⽅案部分。因为是前端写的,所以可能有些明显的内容很容易就看出来了。
  ⾸先:升级后更新其他依赖,以及l的配置,去除旧的内容就不说了,⽐较简单。
  遇到这个问题,是因为 SpringBoot 升级后导致的,程序不能运⾏,⾄于原因,则是因为我们前端写后台代码,⼤部分是根据之前项⽬配置,所以版本过低,⽽需要升级。
  写这篇⽂章是记录⼀下⾃⼰的思考,以及其中的周折,也帮助其他⼈快速到问题的根源。也许会有⼈问,你们后台呢。他们没有这么升级过,给的建议是直接⼀步步导⼊到⼀个新的项⽬中。。⽽我觉得,问题既然产⽣,定然是有原因的,若没到,导⼊也不⼀定好转,反⽽错过了踩坑的机会。
  错误内容:
    org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer
    Cannot instantiate interface t.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);
}
}
  修改l, clean 项⽬,重新打包即可。
<packaging>war</packaging>
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>springboot中文
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
  随感
  其实这个显然从到到尾并不是很难的问题,⼀切都要按照合理的思路思考,并且不烦躁,应该会解决的更快⼀些。可能因为马上要放⾼温假了,就想着赶快把⼀切处理好,多加备⽤⽅案。所以有些急了,急显然会让⼀些简单的东西从眼⽪下⾯溜⾛。。
  哇,我是前端呀不要觉得这个coder要⾛后台了,正因为对后台不了解,才能发这些简单的,但⼜让⾃⼰绕弯的内容。。但对于前端,见到的越多,理解的越深,越发现不知道的越多,不了解的越多。只能求知若渴,不敢提笔妄谈。希望有天有所认知,可以分享给⼤家。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。