我将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
4条答案
按热度按时间gr8qqesn1#
您必须按照文档中的描述创建表。
vecaoik12#
也许这就是你所缺少的:
如果需要指定模式,可以使用常用的点表示法new JdbcTemplateLockProvider(datasource,“my_schema.shedlock”)
z18hc3ub3#
即使shedlock表已经创建,我也面临这个问题。
解决方法是
1.使用
ALTER ROLE YourPgUser SET search_path TO ...
设置pg的用户默认模式,或1.在LockProvider bean上指定shedlock架构
或其他风格
ars1skjm4#
如果This在服务器中,则需要修改对表的权限。联系BD团队