目前我正在为我的 Spring Boot 项目使用 liquibase -> 4.3.2 和 mysql -> 8.0.22。我正在尝试通过 liquibase 创建表。它第一次被执行。它默认创建2个数据库。 1. databasechangelog 和 2. databasechangeloglock 。但是当我尝试再次运行时,它给了我以下错误:
**Caused by: java.lang.ClassCastException: class java.time.LocalDateTime cannot be cast to class java.lang.String (java.time.LocalDateTime and java.lang.String are in module java.base of loader 'bootstrap')**
我的 db.changelog-1.0.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.8.xsd">
<changeSet id="1" author="auth1">
<sql>
CREATE TABLE user (
id BIGINT NOT NULL AUTO_INCREMENT,
fname VARCHAR(255) NOT NULL,
lname VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
number BIGINT NOT NULL,
password VARCHAR(255) NOT NULL,
role VARCHAR(255) NOT NULL,
CONSTRAINT PK_id PRIMARY KEY (id)
);
</sql>
<rollback>
DROP TABLE user;
</rollback>
</changeSet>
<changeSet id="2" author="auth1">
<sql>
CREATE TABLE plant (
plantname VARCHAR(50)
)
</sql>
<rollback>
DROP TABLE plant;
</rollback>
</changeSet>
</databaseChangeLog>
db.changelog-master.xml 的代码:
<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.8.xsd">
<include file="/db/changelog/db.changelog-1.0.xml"></include>
</databaseChangeLog>
应用程序属性
spring.application.name = Cleandrop-Backend
spring.datasource.url = jdbc:mysql://localhost:3306/cleandrop?useUnicode=true&userLegacyDatetimeCode=false&serverTimezone=UTC&createDatabaseIfNotExist=true&allowPublicKeyRetrieval=true&useSSL=true
spring.datasource.username = root
spring.datasource.password = 1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=none
spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
serverTimeZone=user-defined-time-zone
我也尝试更改mysql版本仍然相同。我该如何解决这个问题?
用户
mohiitg
评论说更改为liquibase版本4.3.1解决了该问题。
截至2021年5月3日,版本4.3.5可用。更新到此版本解决了我的错误。
https://mvnrepository.com/artifact/org.liquibase/liquibase-core/4.3.5
这只是 liquibase 和 MySQL 之间的版本控制问题。
对我来说,当我使用 Spring Boot v: 2.4.0 时发生了这种情况 尝试使用 Spring boot 2.3.0.RELEASE 或更早版本
如果您在本地测试,则无需更改版本,只需删除使用databasechangelog、databasechangeloglock创建的表,然后尝试使用此cmd liquibase --url=" " --changeLogFile=" " --classpath="mysql-connector-j-8.0.32.jar" --username=root --password=root update 就会更新成功