Spring Data Jpa Sping Boot ShedLock“关系“shedlock”不存在”

olmpazwi  于 2023-04-30  发布在  Spring
关注(0)|答案(4)|浏览(187)

我将ShedLock添加到我的项目中,以防止计划作业的工作超过一次。我像下面这样配置它,但我得到了
“org.postgresql.util.PSQLException:错误:关系“shedlock”不存在”错误。
这是lockProviderBean:

@Bean
    public LockProvider lockProvider(DataSource dataSource) {
        return new JdbcTemplateLockProvider(
                JdbcTemplateLockProvider.Configuration.builder()
                        .withJdbcTemplate(new JdbcTemplate(dataSource))
                        .usingDbTime() 
                        .build()
        );
    }

这是计划作业:

@Scheduled(cron = "${cronProperty:0 00 23 * * *}")
@SchedulerLock(name = "schedulerLockName")
public void scheduledJob() {
       ..............
}

我将这些符号添加到包含schduledJob方法的类中:

@EnableScheduling
@Component
@Configuration
@EnableSchedulerLock(defaultLockAtMostFor = "2m")

我使用Spring Data来执行数据库操作,并使用这些属性:

spring.datasource.url = jdbc:postgresql://ip:port/databaseName?currentSchema=schemeName
spring.datasource.driver-class-name = org.postgresql.Driver
spring.jpa.database = postgresql
spring.datasource.platform = postgresql
spring.datasource.hikari.maximum-pool-size=5
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.username = username
spring.datasource.password = password
gr8qqesn

gr8qqesn1#

您必须按照文档中的描述创建表。

vecaoik1

vecaoik12#

也许这就是你所缺少的:
如果需要指定模式,可以使用常用的点表示法new JdbcTemplateLockProvider(datasource,“my_schema.shedlock”)

z18hc3ub

z18hc3ub3#

即使shedlock表已经创建,我也面临这个问题。
解决方法是
1.使用ALTER ROLE YourPgUser SET search_path TO ...设置pg的用户默认模式,或
1.在LockProvider bean上指定shedlock架构

@Bean
    public LockProvider getLockProvider(@Autowired JdbcTemplate jdbcTemplate) {
        jdbcTemplate.execute("SET search_path TO domaindbschema");
        return new JdbcTemplateLockProvider(jdbcTemplate);
    }

或其他风格

@Bean
    public LockProvider getLockProvider(@Autowired JdbcTemplate jdbcTemplate) {
        return new JdbcTemplateLockProvider(jdbcTemplate, "domaindbschema.shedlock");
    }
ars1skjm

ars1skjm4#

如果This在服务器中,则需要修改对表的权限。联系BD团队

相关问题