You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中JPA EntityManagerFactory自动关闭问题求助

问题描述

学习Spring Boot的JDBC与JPA内容时,运行测试出现JPA EntityManagerFactory自动关闭的情况,无法继续学习。以下是项目的pom.xml配置及控制台输出:

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>JPAandHybernate</groupId>
    <artifactId>Learn-JAP-and-hybernate</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Learn-JAP-and-hybernate</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>22</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</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-web</artifactId>
        </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>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

控制台输出

09:44:49.895 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [JPAandHybernate.LearnJAPandhybernate.LearnJapAndHybernateApplicationTests]: LearnJapAndHybernateApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
09:44:50.034 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration JPAandHybernate.LearnJAPandhybernate.LearnJapAndHybernateApplication for test class JPAandHybernate.LearnJAPandhybernate.LearnJapAndHybernateApplicationTests

  .   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

2024-04-20T09:44:50.934+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] J.L.LearnJapAndHybernateApplicationTests : Starting LearnJapAndHybernateApplicationTests using Java 22 with PID 71832 (started by harsha.umashankar in C:\Users\harsha.umashankar\Downloads\Learn-JAP-and-hybernate\Learn-JAP-and-hybernate)
2024-04-20T09:44:50.937+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] J.L.LearnJapAndHybernateApplicationTests : No active profile set, falling back to 1 default profile: "default"
2024-04-20T09:44:52.291+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2024-04-20T09:44:52.294+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
2024-04-20T09:44:52.325+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 22 ms. Found 0 JDBC repository interfaces.
2024-04-20T09:44:52.351+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2024-04-20T09:44:52.353+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-04-20T09:44:52.364+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4 ms. Found 0 JPA repository interfaces.
2024-04-20T09:44:53.124+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-04-20T09:44:53.375+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:e71046aa-9390-404f-ac0f-f9c82623e8b7 user=SA
2024-04-20T09:44:53.378+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2024-04-20T09:44:53.461+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-04-20T09:44:53.560+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.4.4.Final
2024-04-20T09:44:53.611+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled
2024-04-20T09:44:54.021+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-04-20T09:44:54.671+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-04-20T09:44:54.678+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-04-20T09:44:54.979+05:30  WARN 71832 --- [Learn-JAP-and-hybernate] [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2024-04-20T09:44:55.902+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:e71046aa-9390-404f-ac0f-f9c82623e8b7'
2024-04-20T09:44:56.008+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [           main] J.L.LearnJapAndHybernateApplicationTests : Started LearnJapAndHybernateApplicationTests in 5.714 seconds (process running for 7.321)
WARNING: A Java agent has been loaded dynamically (C:\MyRepoHarsha\net\bytebuddy\byte-buddy-agent\1.14.12\byte-buddy-agent-1.14.12.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2024-04-20T09:44:57.212+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2024-04-20T09:44:57.217+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2024-04-20T09:44:57.221+05:30  INFO 71832 --- [Learn-JAP-and-hybernate] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
解决方法

从控制台日志可以看出,测试类启动Spring容器后没有执行任何测试方法,导致容器启动完成后直接关闭,EntityManagerFactory和连接池也随之关闭。另外项目同时引入了spring-boot-starter-data-jdbc和spring-boot-starter-data-jpa,初学阶段建议分开学习,避免混淆。

步骤1:给测试类添加测试方法

打开LearnJapAndHybernateApplicationTests类,添加至少一个带@Test注解的测试方法,示例如下:

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class LearnJapAndHybernateApplicationTests {

    @Test
    void contextLoads() {
        // 空方法即可,用于保持容器运行
    }

    // 可在此添加实际要测试的JPA/JDBC逻辑代码
}

添加后测试运行时会执行该方法,容器会保持到测试方法执行完毕才关闭,你可以正常进行调试或操作。

步骤2:(可选)移除不必要的依赖

如果当前仅学习JPA,可暂时移除spring-boot-starter-data-jdbc依赖,避免Spring Data多模块的冲突提示:

<!-- 暂时注释或删除JDBC starter -->
<!--
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
-->

步骤3:如需长期保持容器运行(如测试H2控制台)

如果想启动后保持容器运行,方便访问H2控制台或调试,可在测试类上添加@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT),或者直接启动主应用类LearnJapAndHybernateApplication而非测试类。

内容的提问来源于stack exchange,提问作者HARSHA U

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:25:54