使用SBT运行SpringBoot项目为何启动后自动终止?
问题分析与解决方案
你的SpringBoot Scala项目启动后直接终止,核心原因是主线程执行完启动逻辑后未保持阻塞,导致整个进程退出。结合日志与配置,给出以下修复步骤:
1. 修正SpringBoot应用入口类
确保你有标准的SpringBoot启动类,而非仅在package object中定义main方法:
package com.secondave import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication @SpringBootApplication class Application object Application { def main(args: Array[String]): Unit = { // 传入带@SpringBootApplication注解的类对象启动Spring上下文 SpringApplication.run(classOf[Application], args) } }
若此前用package object作为入口,Spring上下文启动后主线程会直接结束;上述写法中SpringApplication.run会阻塞主线程,维持Tomcat服务运行状态。
2. 在build.sbt中开启fork模式
在build.sbt中添加以下配置,让SBT fork独立进程运行应用,避免SBT主线程结束导致应用终止:
fork := true
添加后的完整build.sbt示例:
scalaVersion := "3.2.2" organization := "..." name := "CalBackend" version := "0.0.1-SNAPSHOT" description := "Backend service for my scheduling system" organizationHomepage := ... // 开启fork模式,保证应用进程独立运行 fork := true libraryDependencies ++= Seq( "org.springframework.boot" % "spring-boot-starter-web" % "3.0.6", "org.springframework.boot" % "spring-boot-starter-security" % "3.0.6", "com.auth0" % "auth0" % "2.1.0", "com.auth0" % "java-jwt" % "4.4.0", )
验证修复
重新执行sbt run,Tomcat启动后进程将保持运行,持续监听8080端口。
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

