0

我正在将 Shedlock 与 oracle DB 一起使用,我遵循了此文档https://github.com/lukas-krecan/ShedLock 我还在异常后将第 5 列“现在 TIMESTAMP(3) NULL”添加到表中。它是当前运行的唯一实例。

这是我的配置

@Scheduled(fixedRateString = "${schedules}" )
@SchedulerLock(name = "Milmes08",lockAtLeastForString  = "PT70S", lockAtMostForString = "PT70S")
@GetMapping
public TransferAllOut transferAll() throws Exception {
//code      
}

这是配置好的bean

@Bean
public LockProvider lockProvider(@Qualifier("oracleDataSource") DataSource dataSource) {
    return new JdbcTemplateLockProvider(dataSource);
}

这是表

CREATE TABLE shedlock(
name VARCHAR(64), 
lock_until TIMESTAMP(3) NULL, 
locked_at TIMESTAMP(3) NULL, 
locked_by  VARCHAR(255), 
now TIMESTAMP(3) NULL,
PRIMARY KEY (name)

)

和调度的启用

@EnableScheduling
@SpringBootApplication
@EnableSchedulerLock(defaultLockAtMostFor = "PT5M")
public class JswMilme08ApiApplication {

public static void main(String[] args) {
    SpringApplication.run(JswMilme08ApiApplication.class, args);

}

这是例外

scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler 2021-03-03 13:52:29 - Unexpected error occurred 
in scheduled task
java.lang.NoClassDefFoundError: net/javacrumbs/shedlock/core/ClockProvider
at 
net.javacrumbs.shedlock.provider.jdbctemplate.SqlStatementsSource.params(SqlStatementsSource.java:86)
at net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateStorageAccessor.params(JdbcTemplateStorageAccessor.java:117)
at net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateStorageAccessor.lambda$insertRecord$0(JdbcTemplateStorageAccessor.java:65)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateStorageAccessor.insertRecord(JdbcTemplateStorageAccessor.java:64)
at net.javacrumbs.shedlock.support.StorageBasedLockProvider.doLock(StorageBasedLockProvider.java:77)
at net.javacrumbs.shedlock.support.StorageBasedLockProvider.lock(StorageBasedLockProvider.java:61)
at net.javacrumbs.shedlock.core.DefaultLockingTaskExecutor.executeWithLock(DefaultLockingTaskExecutor.java:50)
at net.javacrumbs.shedlock.core.DefaultLockingTaskExecutor.executeWithLock(DefaultLockingTaskExecutor.java:39)
at net.javacrumbs.shedlock.core.DefaultLockManager.executeWithLock(DefaultLockManager.java:51)
at net.javacrumbs.shedlock.core.LockableRunnable.run(LockableRunnable.java:35)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ClassNotFoundException: net.javacrumbs.shedlock.core.ClockProvider
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 18 common frames omitted
4

1 回答 1

0

NoClassDefFoundError 通常是由您的依赖项的某些问题引起的。在这种情况下,我猜你的类路径中有旧版本的 shedlock-core。

于 2021-03-04T07:20:26.873 回答