Spring Boot集成测试:H2数据库无法自动从@Entity建表问题
Spring Boot集成测试H2数据库表自动创建失败解决办法
运行集成测试时,H2数据库未自动创建BO_DEPARTMENT表,抛出异常:
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "BO_DEPARTMENT" not found (this database is empty);
以下是针对性解决步骤:
检查实体类扫描范围
确保BoDepartmentEntity所在包被Spring Boot扫描到。若实体类不在主应用类(带@SpringBootApplication的类)的同级或子包下,需在测试类添加@EntityScan指定扫描路径:@ActiveProfiles("test") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @EntityScan(basePackages = "com.your.project.entity") // 替换为实际实体类包路径 public class DepartmentsTest { // ... }优化JPA配置
保留spring.jpa.hibernate.ddl-auto=create-drop即可,移除spring.jpa.generate-ddl=true——两者功能重叠可能导致冲突,create-drop已足够控制启动时建表、关闭时删表的逻辑。调整H2数据库URL
内存H2默认会在连接关闭时销毁数据库,添加参数防止提前销毁:spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE确认上下文加载正确性
若测试类与主应用类不在同一包结构下,需在@SpringBootTest中指定主类:@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = YourMainApplication.class)启用日志排查
添加日志配置到application-test.properties,查看DDL生成细节:logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.tool.hbm2ddl=DEBUG运行测试后检查日志,若未出现
create table bo_department (...)语句,说明实体类未被扫描或配置未生效。
内容的提问来源于stack exchange,提问作者KaTevIet
相关产品推荐
相关产品推荐

