#spring-data-jpa #shedlock
Вопрос:
Я добавил блокировку в свой проект, чтобы предотвратить выполнение запланированного задания более одного раза. Я настроил его, как показано ниже, но я получаю
«org.postgresql.util.PSQLException: ОШИБКА: связь «блокировка» не существует» ошибка.
Это 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 для выполнения операций с базой данных и использую эти свойства:
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
Комментарии:
1. Создайте таблицу блокировки вручную. Подробности github.com/lukas-krecan/ShedLock#jdbctemplate
Ответ №1:
Вы должны создать таблицу, как описано в документации.