首次使用H2内存数据库测试应用遇Schema 'WORKING'不存在错误求助
排查H2内存数据库"WORKING" Schema不存在问题
1. 核对application.properties配置
确保H2数据库URL的INIT语法正确,重点注意分号转义与默认Schema指定:
spring.datasource.url=jdbc:h2:mem:testdb;INIT=CREATE SCHEMA IF NOT EXISTS WORKING\\;SET SCHEMA WORKING;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=
注意:分号需要用\\转义,SET SCHEMA WORKING会强制连接默认使用该Schema
同时检查Flyway相关配置是否指定目标Schema:
spring.flyway.enabled=true spring.flyway.schemas=WORKING
2. 验证Flyway迁移脚本
- 脚本命名必须符合Flyway规范:
V<版本号>__<描述>.sql(如V1__create_user_table.sql) - 脚本开头需明确指定Schema,避免默认Schema不匹配:
CREATE SCHEMA IF NOT EXISTS WORKING; USE WORKING; CREATE TABLE USER ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE );
或者创建表时直接指定Schema:CREATE TABLE WORKING.USER (...)
3. 检查UserEntity实体类配置
确认实体类通过@Table注解指定了目标Schema:
@Entity @Table(name = "USER", schema = "WORKING") public class UserEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; // Getters & Setters }
同时确保实体类所在包被Spring扫描到(@SpringBootApplication的扫描路径需覆盖实体类包)
4. 测试类上下文配置检查
确保UserServiceTest正确加载Spring上下文,未自定义冲突的数据源配置:
@SpringBootTest class UserServiceTest { @Autowired private UserService userService; // 测试方法 }
如果测试类中存在自定义数据源Bean,需同步添加INIT创建Schema的逻辑
5. 用H2控制台直接验证
开启H2控制台,实时查看Schema状态:
spring.h2.console.enabled=true
启动测试后访问http://localhost:8080/h2-console,使用配置中的数据库URL连接,检查是否存在WORKINGSchema及对应表。
内容的提问来源于stack exchange,提问作者Cross
相关产品推荐
相关产品推荐

