Spring Boot集成ShedLock报PostgreSQL错误relation "shedlock"不存在如何解决
ShedLock表不存在错误解决步骤
1. 检查依赖完整性
首先确认项目中引入了两个必须的ShedLock依赖:
- Spring集成核心包:
shedlock-spring - JDBC适配包:
shedlock-provider-jdbc-template
2. 手动创建shedlock锁表
ShedLock默认不会自动生成锁表,需要你手动在对应PostgreSQL数据库中执行建表语句:
CREATE TABLE IF NOT EXISTS shedlock ( name VARCHAR(64) NOT NULL, lock_until TIMESTAMP NOT NULL, locked_at TIMESTAMP NOT NULL, locked_by VARCHAR(255) NOT NULL, PRIMARY KEY (name) );
注意:执行建表语句时,必须切换到你JDBC URL中配置的
schemeName对应的schema下执行,不要默认建到publicschema中,否则会出现表找不到的问题。
3. 显式指定锁表的schema路径
如果建表后仍报错,可以在LockProvider配置中明确指定锁表的全路径,修改配置如下:
@Bean public LockProvider lockProvider(DataSource dataSource) { return new JdbcTemplateLockProvider( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(new JdbcTemplate(dataSource)) .withTableName("schemeName.shedlock") // 替换为实际的schema名+表名 .usingDbTime() .build() ); }
4. 可选:开发环境开启自动建表
开发环境可以开启自动建表配置,省略手动建表步骤,在application.properties中添加如下配置即可:
spring.shedlock.jdbc.auto-create-schema=true
注意:生产环境建议关闭该配置,避免权限不足导致的启动异常。
额外排查点
- 确认配置的数据库账号拥有
schemeNameschema的读写权限,避免表存在但无权限访问的问题。
内容的提问来源于stack exchange,提问作者İlkay Gunel
相关产品推荐
相关产品推荐

