Spring Boot 2.4.13集成Cassandra与Liquibase无生效问题求助
Spring Boot 2.4.13 + Cassandra + Liquibase集成问题排查
我尝试将Spring Boot 2.4.13与Apache Cassandra、Liquibase集成,目标是在应用启动时自动执行数据库变更。查阅大量示例教程后,未找到匹配当前配置的方案。目前Liquibase完全不工作:日志无相关输出,数据库也未产生任何变更。请求帮忙排查配置或操作中的问题。
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.13</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>Cassandra</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Cassandra</name> <description>Cassandra</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-cassandra</artifactId> </dependency> <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.11.3</version> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency> <dependency> <groupId>org.liquibase.ext</groupId> <artifactId>liquibase-cassandra</artifactId> <version>3.10.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
application.properties配置
spring.data.cassandra.keyspace-name=test spring.data.cassandra.port=9042 spring.data.cassandra.password=cassandra spring.data.cassandra.username=cassandra spring.data.cassandra.contact-points=127.0.0.1 spring.data.cassandra.local-datacenter=datacenter1 spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
changelog-master.xml配置
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.10.xsd"> <changeSet id="202010211812" author="test"> <createTable tableName="testtt"> <column name="tableone" type="BOOLEAN"/> </createTable> </changeSet> </databaseChangeLog>
项目结构

排查修复方案
补充Liquibase Cassandra专属数据源配置
Spring Boot默认依赖JDBC数据源,但Cassandra使用CQL驱动,需显式指定Liquibase的Cassandra连接信息,在application.properties中添加:spring.liquibase.url=cassandra://127.0.0.1:9042/test spring.liquibase.user=cassandra spring.liquibase.password=cassandra spring.liquibase.driver-class-name=com.datastax.driver.core.Cluster修复依赖版本兼容性
Spring Boot 2.4.13默认集成的liquibase-core版本为4.3.5,你使用的liquibase-cassandra 3.10.2版本过低,存在兼容性问题。建议升级到匹配版本,比如:<dependency> <groupId>org.liquibase.ext</groupId> <artifactId>liquibase-cassandra</artifactId> <version>4.3.5</version> </dependency>开启Liquibase调试日志
添加日志配置查看执行细节,排查隐藏错误:logging.level.liquibase=DEBUG确保目标Keyspace已创建
Liquibase不会自动创建Cassandra Keyspace,需提前通过CQL命令创建test库:CREATE KEYSPACE test WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};修正变更集语法
Cassandra要求表必须包含主键,修改你的变更集:<changeSet id="202010211812" author="test"> <createTable tableName="testtt"> <column name="id" type="UUID" constraints="primaryKey"/> <column name="tableone" type="BOOLEAN"/> </createTable> </changeSet>
内容的提问来源于stack exchange,提问作者Kacu
相关产品推荐
相关产品推荐

