我正在尝试使用cassandra db将shedlock集成到我的春靴项目中。
但我在应用程序启动时收到以下错误。
2022-11-18 17:35:29,162 [main] ERRR o.s.boot.SpringApplication - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lockProvider'
Caused by: java.lang.NullPointerException: table can not be null
at java.base/java.util.Objects.requireNonNull(Objects.java:233)
at net.javacrumbs.shedlock.provider.cassandra.CassandraLockProvider$Configuration.<init>(CassandraLockProvider.java:69)
at net.javacrumbs.shedlock.provider.cassandra.CassandraLockProvider$Configuration$Builder.build(CassandraLockProvider.java:157)
应用程序.yml文件
server:
port: 8080
data:
cassandra:
port: ${CASSANDRA_PORT:9042}
username: ${CASSANDRA_USERNAME:cassandra}
password: ${CASSANDRA_PASSWORD:cassandra}
keyspace-name: ${CASSANDRA_KEYSPACE_NAME:my_keyspace}
schema-action: recreate
local-datacenter: ${CASSANDRA_LOCAL_DATACENTER:datacenter123}
contact-points: ${CASSANDRA_HOST:localhost}
配置类
import com.datastax.oss.driver.api.core.CqlSession;
import net.javacrumbs.shedlock.provider.cassandra.CassandraLockProvider;
import net.javacrumbs.shedlock.provider.cassandra.CassandraLockProvider.Configuration;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
@org.springframework.context.annotation.Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "10m")
public class MyAppSchedulerConfiguration {
@Bean
public CassandraLockProvider lockProvider(CqlSession cqlSession) {
return new CassandraLockProvider(Configuration.builder().withCqlSession(cqlSession).build());
}
}
pom.xml文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<shedlock.version>4.42.0</shedlock.version>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>${shedlock.version}</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-cassandra</artifactId>
<version>${shedlock.version}</version>
</dependency>
Cassandra脚本已执行
CREATE KEYSPACE shedlock with replication={'class':'SimpleStrategy', 'replication_factor':1} and durable_writes=true;
CREATE TABLE shedlock.lock (name text PRIMARY KEY, lockUntil timestamp, lockedAt timestamp, lockedBy text);
我已经通过cqlsh验证了锁表是在cassandra中创建的。
到目前为止,我认为的问题是,由于某种原因,CqlSession bean不可用,而且应该是可用的。
我已经尝试了官方文档页面中提到的配置。
我尝试过将Springboot和shedlock的版本降级,但是没有用。Springboot版本更改2.5.x(相同错误)2.2.13.RELEASE(相同错误)2.3.x(相同错误)
1条答案
按热度按时间6bc51xsx1#
我认为必须如下指定tableName
使用配置生成器时似乎未设置默认表名。