由于缺少 ServletWebServerFactory bean,Spring Boot jar 无法启动 Web 服务器
Posted
技术标签:
【中文标题】由于缺少 ServletWebServerFactory bean,Spring Boot jar 无法启动 Web 服务器【英文标题】:Spring Boot jar Unable to start web server due to missing ServletWebServerFactory bean 【发布时间】:2019-12-03 20:25:21 【问题描述】:我已经使用 Spring Boot 和 Kotlin 和 Gradle 创建了 REST 后端系统。 从 IDE 运行时一切正常。 但是当我创建 jar 文件并使用控制台运行它时 java -jar app.jar 我收到此错误:
错误 org.springframework.boot.SpringApplication - 应用程序运行失败 org.springframework.context.ApplicationContextException:无法启动网络服务器;嵌套异常是 org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean。
我尝试了多种解决方案,但我在网上找到的似乎都没有帮助。我是 Spring Boot 的新手,所以我可能缺少一些东西。
我使用 Intellij 和 Spring Initializr 模板。
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins
id("org.springframework.boot") version "2.1.6.RELEASE"
id("io.spring.dependency-management") version "1.0.7.RELEASE"
id("org.jetbrains.kotlin.plugin.jpa") version "1.3.41"
kotlin("jvm") version "1.3.41"
kotlin("plugin.spring") version "1.3.41"
group = "sk.demo"
version = "0.1.1"
java.sourceCompatibility = JavaVersion.VERSION_1_8
val developmentOnly by configurations.creating
configurations
runtimeClasspath
extendsFrom(developmentOnly)
repositories
mavenCentral()
dependencies
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
developmentOnly("org.springframework.boot:spring-boot-devtools")
runtimeOnly("mysql:mysql-connector-java")
testImplementation("org.springframework.boot:spring-boot-starter-test")
tasks.withType<KotlinCompile>
kotlinOptions
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
DemoBeApplication.kt
package sk.demo.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class DemoBeApplication
fun main(args: Array<String>)
runApplication<DemoBeApplication>(*args)
DemoBeApplication.kt 我试过的另一个版本
package sk.demo.demo
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
@SpringBootApplication
class DemoBeApplication : SpringBootServletInitializer()
fun main(args: Array<String>)
SpringApplication.run(DemoBeApplication::class.java, *args)
【问题讨论】:
您使用哪个命令来创建app.jar
?
我已经使用项目选项创建了工件,它包含所有模块,它是完整的,tomcat 在列表中。它还包括带有主类信息的manifect。然后我使用选项来构建工件。
【参考方案1】:
我建议阅读更多关于Spring Boot Gradle Plugin 的信息。听起来您想使用bootJar
任务。这些步骤对我有用:
./gradlew bootJar
# ...
# BUILD SUCCESSFUL in 56s
# 3 actionable tasks: 3 executed
java -jar build/libs/demo-0.0.1-SNAPSHOT.jar
# . ____ _ __ _ _
# /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
# ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
# \\/ ___)| |_)| | | | | || (_| | ) ) ) )
# ' |____| .__|_| |_|_| |_\__, | / / / /
# =========|_|==============|___/=/_/_/_/
# :: Spring Boot :: (v2.1.6.RELEASE)
#
# 2019-07-25 08:54:05.197 INFO 12021 --- [ main] com.example.demo.DemoApplicationKt : Starting DemoApplicationKt
# 2019-07-25 08:54:05.200 INFO 12021 --- [ main] com.example.demo.DemoApplicationKt : No active profile set, falling back to default profiles: default
# 2019-07-25 08:54:05.851 INFO 12021 --- [ main] com.example.demo.DemoApplicationKt : Started DemoApplicationKt in 1.01 seconds (JVM running for 1.449)
【讨论】:
以上是关于由于缺少 ServletWebServerFactory bean,Spring Boot jar 无法启动 Web 服务器的主要内容,如果未能解决你的问题,请参考以下文章