spring boot 在eclipse里启动正常,但打包后启动不起来
时间:2019-06-12
本文章向大家介绍spring boot 在eclipse里启动正常,但打包后启动不起来,主要包括spring boot 在eclipse里启动正常,但打包后启动不起来使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
现象描述:
spring boot 在eclipse里启动正常,但打包后启动不起来。
错误日志如下:
D:\Project>java -jar MKKY_CMS.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.4.RELEASE) 2019-06-12 17:26:15.510 INFO 74468 --- [ main] com.mkky.SuperviseBackstageApplication : Starting SuperviseBackstageApplication v0.0.1-SNAPSHOT on DESKTOP-405G2C8 with PID 74468 (D:\Project\MKKY_CMS.jar started by dell in D:\Project) 2019-06-12 17:26:15.513 INFO 74468 --- [ main] com.mkky.SuperviseBackstageApplication : The following profiles are active: dev 2019-06-12 17:26:16.049 WARN 74468 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.mkky.SuperviseBackstageApplication]; nested exception is java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration 2019-06-12 17:26:16.059 INFO 74468 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2019-06-12 17:26:16.065 ERROR 74468 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.mkky.SuperviseBackstageApplication]; nested exception is java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:599) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.access$900(ConfigurationClassParser.java:108) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:808) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at java.util.ArrayList.forEach(ArrayList.java:1249) ~[na:1.8.0_91] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:804) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:774) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:185) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:315) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at com.mkky.SuperviseBackstageApplication.main(SuperviseBackstageApplication.java:16) [classes!/:0.0.1-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [MKKY_CMS.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [MKKY_CMS.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [MKKY_CMS.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593) [MKKY_CMS.jar:0.0.1-SNAPSHOT] Caused by: java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:64) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:218) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:361) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:263) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:589) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] ... 27 common frames omitted Caused by: java.lang.IllegalArgumentException: name at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:658) ~[na:1.8.0_91] at sun.misc.URLClassPath.findResource(URLClassPath.java:188) ~[na:1.8.0_91] at java.net.URLClassLoader$2.run(URLClassLoader.java:569) ~[na:1.8.0_91] at java.net.URLClassLoader$2.run(URLClassLoader.java:567) ~[na:1.8.0_91] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_91] at java.net.URLClassLoader.findResource(URLClassLoader.java:566) ~[na:1.8.0_91] at org.springframework.boot.loader.LaunchedURLClassLoader.findResource(LaunchedURLClassLoader.java:57) ~[MKKY_CMS.jar:0.0.1-SNAPSHOT] at java.lang.ClassLoader.getResource(ClassLoader.java:1096) ~[na:1.8.0_91] at org.springframework.core.io.ClassPathResource.resolveURL(ClassPathResource.java:155) ~[spring-core-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.core.io.ClassPathResource.exists(ClassPathResource.java:142) ~[spring-core-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.boot.autoconfigure.thymeleaf.ThymeleafTemplateAvailabilityProvider.isTemplateAvailable(ThymeleafTemplateAvailabilityProvider.java:44) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders.findProvider(TemplateAvailabilityProviders.java:158) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders.getProvider(TemplateAvailabilityProviders.java:145) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$ErrorTemplateMissingCondition.getMatchOutcome(ErrorMvcAutoConfiguration.java:195) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] ... 33 common frames omitted
问题解决路径
1. 最初怀疑是打包时缺少依赖包造成的,修改打包的方式
<build> <finalName>xxxxx</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <mainClass>com.xx</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
依赖包没有问题,还是报同样的错误。
2. 排除依赖包的问题后,怀疑是jar包冲突的问题,网上有类似的
使用dependence查了 没有不同版本的依赖,排除
3.怀疑是*config.java的配置问题,一个个移除进行测试,也排除掉了
4.根据日志怀疑是Controller里排除的异常页面有问题,排查后没有发现
5.怀疑是application_*.properties的配置问题
一项项排查,发现跟这个有关
spring.thymeleaf.prefix=static:/web/
去除这个选项后,重新打包后可以启动成功。
翻看源码ThymeleafProperties.java
/** * Properties for Thymeleaf. * * @author Stephane Nicoll * @author Brian Clozel * @author Daniel Fern谩ndez * @author Kazuki Shimizu * @since 1.2.0 */ @ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8; public static final String DEFAULT_PREFIX = "classpath:/templates/"; //1 public static final String DEFAULT_SUFFIX = ".html"; /** * Whether to check that the template exists before rendering it. */ private boolean checkTemplate = true; /** * Whether to check that the templates location exists. */ private boolean checkTemplateLocation = true; /** * Prefix that gets prepended to view names when building a URL. */ private String prefix = DEFAULT_PREFIX; /** * Suffix that gets appended to view names when building a URL. */ private String suffix = DEFAULT_SUFFIX; /** * Template mode to be applied to templates. See also Thymeleaf's TemplateMode enum. */ private String mode = "HTML"; /** * Template files encoding. */ private Charset encoding = DEFAULT_ENCODING; /** * Whether to enable template caching. */ private boolean cache = true; /** * Order of the template resolver in the chain. By default, the template resolver is * first in the chain. Order start at 1 and should only be set if you have defined * additional "TemplateResolver" beans. */ private Integer templateResolverOrder; /** * Comma-separated list of view names (patterns allowed) that can be resolved. */ private String[] viewNames; /** * Comma-separated list of view names (patterns allowed) that should be excluded from * resolution. */ private String[] excludedViewNames; /** * Enable the SpringEL compiler in SpringEL expressions. */ private boolean enableSpringElCompiler; /** * Whether hidden form inputs acting as markers for checkboxes should be rendered * before the checkbox element itself. */ private boolean renderHiddenMarkersBeforeCheckboxes = false; /** * Whether to enable Thymeleaf view resolution for Web frameworks. */ private boolean enabled = true; private final Servlet servlet = new Servlet(); private final Reactive reactive = new Reactive(); public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean isCheckTemplate() { return this.checkTemplate; } public void setCheckTemplate(boolean checkTemplate) { this.checkTemplate = checkTemplate; } public boolean isCheckTemplateLocation() { return this.checkTemplateLocation; } public void setCheckTemplateLocation(boolean checkTemplateLocation) { this.checkTemplateLocation = checkTemplateLocation; } public String getPrefix() { return this.prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getSuffix() { return this.suffix; } public void setSuffix(String suffix) { this.suffix = suffix; } public String getMode() { return this.mode; } public void setMode(String mode) { this.mode = mode; } public Charset getEncoding() { return this.encoding; } public void setEncoding(Charset encoding) { this.encoding = encoding; } public boolean isCache() { return this.cache; } public void setCache(boolean cache) { this.cache = cache; } public Integer getTemplateResolverOrder() { return this.templateResolverOrder; } public void setTemplateResolverOrder(Integer templateResolverOrder) { this.templateResolverOrder = templateResolverOrder; } public String[] getExcludedViewNames() { return this.excludedViewNames; } public void setExcludedViewNames(String[] excludedViewNames) { this.excludedViewNames = excludedViewNames; } public String[] getViewNames() { return this.viewNames; } public void setViewNames(String[] viewNames) { this.viewNames = viewNames; } public boolean isEnableSpringElCompiler() { return this.enableSpringElCompiler; } public void setEnableSpringElCompiler(boolean enableSpringElCompiler) { this.enableSpringElCompiler = enableSpringElCompiler; } public boolean isRenderHiddenMarkersBeforeCheckboxes() { return this.renderHiddenMarkersBeforeCheckboxes; } public void setRenderHiddenMarkersBeforeCheckboxes( boolean renderHiddenMarkersBeforeCheckboxes) { this.renderHiddenMarkersBeforeCheckboxes = renderHiddenMarkersBeforeCheckboxes; } public Reactive getReactive() { return this.reactive; } public Servlet getServlet() { return this.servlet; } public static class Servlet { /** * Content-Type value written to HTTP responses. */ private MimeType contentType = MimeType.valueOf("text/html"); /** * Whether Thymeleaf should start writing partial output as soon as possible or * buffer until template processing is finished. */ private boolean producePartialOutputWhileProcessing = true; public MimeType getContentType() { return this.contentType; } public void setContentType(MimeType contentType) { this.contentType = contentType; } public boolean isProducePartialOutputWhileProcessing() { return this.producePartialOutputWhileProcessing; } public void setProducePartialOutputWhileProcessing( boolean producePartialOutputWhileProcessing) { this.producePartialOutputWhileProcessing = producePartialOutputWhileProcessing; } } public static class Reactive { /** * Maximum size of data buffers used for writing to the response. Templates will * execute in CHUNKED mode by default if this is set. */ private DataSize maxChunkSize = DataSize.ofBytes(0); /** * Media types supported by the view technology. */ private List<MediaType> mediaTypes; /** * Comma-separated list of view names (patterns allowed) that should be executed * in FULL mode even if a max chunk size is set. */ private String[] fullModeViewNames; /** * Comma-separated list of view names (patterns allowed) that should be the only * ones executed in CHUNKED mode when a max chunk size is set. */ private String[] chunkedModeViewNames; public List<MediaType> getMediaTypes() { return this.mediaTypes; } public void setMediaTypes(List<MediaType> mediaTypes) { this.mediaTypes = mediaTypes; } public DataSize getMaxChunkSize() { return this.maxChunkSize; } public void setMaxChunkSize(DataSize maxChunkSize) { this.maxChunkSize = maxChunkSize; } public String[] getFullModeViewNames() { return this.fullModeViewNames; } public void setFullModeViewNames(String[] fullModeViewNames) { this.fullModeViewNames = fullModeViewNames; } public String[] getChunkedModeViewNames() { return this.chunkedModeViewNames; } public void setChunkedModeViewNames(String[] chunkedModeViewNames) { this.chunkedModeViewNames = chunkedModeViewNames; } } }
配置前缀的路径有问题。
原文地址:https://www.cnblogs.com/davidwang456/p/11011390.html
- 梯度下降优化算法综述
- 关于oracle后台启用的schedule job(r2笔记65天)
- 数据结构和算法——二叉树
- 【专业技术】谷歌浏览器实现Javascript扩展
- 数据结构和算法——二叉排序树
- 通过shell脚本生成查询表数据的sql (r2笔记63天)
- Linux C 编程——多线程
- 数据结构和算法——Huffman树和Huffman编码
- 简单易学的机器学习算法——K-Means++算法
- 梯度下降原理及Python实现
- 海量数据迁移之通过rowid切分大表(r2笔记62天)
- 简单易学的机器学习算法——K-近邻算法
- 使用Python绘制点击图、热图
- 使用shell生成状态报表(r2笔记61天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- React环境搭建
- leetcode - 旋转数组的最小数字
- 笔记101 | 文件的压缩与解压笔记
- 诸葛亮vs司马懿,排序算法大战谁能笑到最后?
- Centos密钥登陆,解决云服务器被尝试登陆问题
- Fair Scheduler到Capacity Scheduler 转换工具
- 这可能是把SpringBoot配置文件讲解的最详细的文章了
- 抛出这8个问题,检验一下你到底会不会ThreadLocal,来摸个底~
- 最近合肥降雨不断,给自己做一个天气情况微信定时推送吧
- 【适合收藏】为了多点时间陪女朋友,我向BAT大佬跪求了这15条JS技巧
- iOS文本尺寸自适应异步计算实现
- CentOS7下系统分析与排障利器sysdig简单介绍
- Faker 一个生成虚拟数据的Python模块
- ICLR 2020 Mogrifier LSTM 解析
- 优秀的程序员是如何利用工具来提升工作效率的?