spring-boot - Tomcat 9 部署 Spring Boot WAR 失败
问题描述
我正在尝试从我的基本 Spring Boot 应用程序构建一个战争文件。该应用程序将使用 成功构建 WAR mvn package
,但是,当我将其部署到我的 Tomcat 9 服务器时,我收到以下消息:
FAIL - Application at context path [/kevthedev] could not be started
FAIL - Encountered exception [org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/kevthedev]]]
目标是构建一个基本的 Spring Boot 应用程序并将其部署到 Tomcat 9 服务器。spring boot 应用程序将没有嵌入式 Tomcat 服务器,而是使用我构建的外部 Tomcat 服务器 9。
下面是我的POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.kev.developer</groupId>
<artifactId>kevthedev</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>kevthedev</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我的主应用程序的类文件如下:
package com.kev.developer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class KevthedevApplication extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
SpringApplication.run(KevthedevApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(KevthedevApplication.class);
}
}
附上我的日志
2018-10-09 16:03:51.353 INFO 798 --- [o-8080-exec-114] com.zaxxer.hikari.HikariDataSource : HikariPool-12 - Starting...
2018-10-09 16:03:51.566 INFO 798 --- [o-8080-exec-114] com.zaxxer.hikari.HikariDataSource : HikariPool-12 - Start completed.
2018-10-09 16:03:51.627 INFO 798 --- [o-8080-exec-114] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2018-10-09 16:03:51.652 INFO 798 --- [o-8080-exec-114] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
2018-10-09 16:03:51.813 INFO 798 --- [o-8080-exec-114] org.hibernate.Version : HHH000412: Hibernate Core {5.2.17.Final}
2018-10-09 16:03:51.814 INFO 798 --- [o-8080-exec-114] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2018-10-09 16:03:51.842 WARN 798 --- [o-8080-exec-114] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
2018-10-09 16:03:51.842 INFO 798 --- [o-8080-exec-114] com.zaxxer.hikari.HikariDataSource : HikariPool-12 - Shutdown initiated...
2018-10-09 16:03:51.869 INFO 798 --- [o-8080-exec-114] com.zaxxer.hikari.HikariDataSource : HikariPool-12 - Shutdown completed.
2018-10-09 16:03:51.921 INFO 798 --- [o-8080-exec-114] ConditionEvaluationReportLoggingListener :
2018-10-09 16:03:51.926 ERROR 798 --- [o-8080-exec-114] o.s.boot.SpringApplication : Application run failed
解决方案
我需要包含一个依赖项。所有说明都说你可以只配置包到战争,添加 tomcat 依赖,然后更新你的主类以覆盖。然而,这不是唯一的事情。
我需要将以下依赖项添加到我的 pom.xml
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
catalina 的错误是:
grep "^$(date -I)" /opt/tomcat/logs/catalina.out
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
推荐阅读
- php - 通过安全登录网站 ex(Curl) php 抓取数据
- python - 在 np.nan 之后将 DataFrame 转换回整数?
- java - PostgreSQL 手动插入记录 vs Spring JPA Save with sequence
- groovy - 如何在另一个 groovy 文件中包含一个 groovy 脚本(带有类、函数)?
- windows - 更新windows服务环境变量
- c# - 捕获全屏游戏时性能低下
- django - 姜戈。如何减少每次使用后的优惠券总数
- c++ - 共享指针的序列化导致错误
- python - TensorFlow,tensorflow_datasets.load() 究竟返回了什么?
- asp.net-mvc - 如何创建一个令牌,然后访问 mvc 中的操作方法?