Spring Boot项目JPA EntityManagerFactory意外关闭问题求助
问题原因分析
从日志里的c.a.rest.SpringBootRestApplicationTests可以看出,你当前启动的是测试类,而非Spring Boot的主应用启动类。测试类执行完测试逻辑后,会自动关闭Spring上下文,连带关闭JPA EntityManagerFactory和数据库连接池,导致应用进程直接退出(exit code 0),自然无法用Postman访问接口。
解决方案
1. 运行正确的主启动类
找到项目中带有@SpringBootApplication注解的主类(通常命名为SpringBootRestApplication),运行这个类而非测试类。主启动类启动后会维持Web容器运行,不会自动关闭上下文。
示例主启动类代码:
@SpringBootApplication public class SpringBootRestApplication { public static void main(String[] args) { SpringApplication.run(SpringBootRestApplication.class, args); } }
2. 确认Web依赖是否正确引入
检查pom.xml(Maven)或build.gradle(Gradle),确保引入spring-boot-starter-web依赖——这是启动Web容器的必要条件:
Maven配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Gradle配置:
implementation 'org.springframework.boot:spring-boot-starter-web'
如果缺少该依赖,即使运行主启动类,应用也会因无Web容器需要维持而立即关闭。
3. 若需通过测试类临时启动应用(可选)
如果确实需要通过测试类启动应用供Postman测试,可以修改测试类,设置Web环境并阻止上下文自动关闭:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) public class SpringBootRestApplicationTests { @Test public void keepApplicationRunning() throws InterruptedException { // 让测试线程保持运行,不自动关闭上下文 Thread.sleep(Long.MAX_VALUE); } }
但这种方式仅为临时方案,日常开发或测试仍推荐运行主启动类。
额外检查
你的application.properties配置无明显问题,正常的数据库连接与Hibernate设置,只要应用正常启动,就能建立数据库连接。
内容的提问来源于stack exchange,提问作者Deivie Jaimes
相关产品推荐
相关产品推荐

