0

嗨,我正在尝试将 Shedlock 用于 Spring Boot Mongo。文档说它需要 Mongo JAva 3.7.0。我目前正在使用 Spring spring-boot-starter-parent v 2.0.4,它有一个旧版本的驱动程序,所以升级到版本 2.1.0。

下面是我有地方启动锁的代码:

@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "1m")
public class ApplicationConfiguration {

@Bean
public LockProvider lockProvider(MongoClient mongo) {
    return new MongoLockProvider(mongo.getDatabase("hmrccalculation"));
}
}

然后我的代码是:

@Scheduled(cron = "I 0 0/5 * * * *")
@SchedulerLock(name = "lock", lockAtLeastFor = "1m")
public void process() {
    LockAssert.assertLocked();

我得到的错误是:

"message":"Unexpected error occurred in scheduled 
task.","stack":"org.bson.codecs.configuration.CodecConfigurationException: Can\'t find a 
codec for class java.time.Instant.\nat 
org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)\nat 
org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)\nat 
org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37)\nat 
com.mongodb.client.model.BuildersHelper.encodeValue(BuildersHelper.java:35)\nat 
com.mongodb.client.model.Updates$SimpleUpdate.toBsonDocument(Updates.java:442)\nat 
com.mongodb.client.model.Updates$CompositeUpdate.toBsonDocument(Updates.java:605)\nat 
com.mongodb.MongoCollectionImpl.toBsonDocument(MongoCollectionImpl.java:1074)\nat 
com.mongodb.MongoCollectionImpl.executeFindOneAndUpdate(MongoCollectionImpl.java:766)\nat 
com.mongodb.MongoCollectionImpl.findOneAndUpdate(MongoCollectionImpl.java:748)\nat 
4

1 回答 1

0

您必须升级到 mongo-java-driver 3.7.0。Spring Boot 2.1.0 包含旧版本。您不必升级整个 Spring Boot,只需升级一个依赖项。

于 2020-07-03T05:48:14.950 回答