【发布时间】:2019-12-17 11:16:18
【问题描述】:
我不得不在 Spring-boot maven 项目中迁移到更新版本的 Liquibase 核心,之后,我得到了一个 ArrayIndexOutOfBoundsException。
属性定义:
<property dbms="db2,derby,mysql,h2,mssql" name="autoid" value="BIGINT"/>
<property dbms="oracle" name="autoid" value="BIGINT" />
<property dbms="postgresql" name="autoid" value="SERIAL"/>
抛出异常
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [com/unymira/kfirst/application/config/DatabaseManagementConfig.class]: Invocation of init method failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1694)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:881)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.unymira.kfirst.application.ApplicationLauncher.main(ApplicationLauncher.java:55)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
at liquibase.datatype.DataTypeFactory.fromDescription(DataTypeFactory.java:251)
at liquibase.change.core.CreateTableChange.generateStatements(CreateTableChange.java:70)
at liquibase.change.AbstractChange.generateStatementsVolatile(AbstractChange.java:287)
at liquibase.change.AbstractChange.warn(AbstractChange.java:358)
at liquibase.changelog.visitor.ValidatingVisitor.visit(ValidatingVisitor.java:110)
at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:83)
at liquibase.changelog.DatabaseChangeLog.validate(DatabaseChangeLog.java:284)
at liquibase.Liquibase.update(Liquibase.java:198)
at liquibase.Liquibase.update(Liquibase.java:179)
at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:366)
at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:314)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1753)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1690)
... 21 common frames omitted
属性使用示例
<column autoIncrement="true" name="id" type="${autoid}">
<constraints nullable="false" primaryKey="true" primaryKeyName="${db_prefix}instancepk" />
</column>
我不得不提一下,这段代码是以前的代码,对于旧的 liquibase 没有任何问题。
有人对我做错了什么有建议吗?
【问题讨论】:
-
听起来可能是一个错误。您介意在liquibase.jira.com 提交更详细的错误报告(包括旧版本号和新版本号)吗?
-
嗨@SteveDonie,感谢您的回答。我即将为其创建一个 Jira 问题,其中所有内容都已指定。我在那里做了一些调试,发现问题只发生在 MySQL (MariaDB) 数据库上。我们尝试在 H2、MSSQL、Postgres 上初始化相同的数据库架构,但没有出现任何错误。
-
@SteveDonie JIRA 任务已创建 - liquibase.jira.com/browse/CORE-3546
-
您没有多个数据源吗?
-
@florin 我认为 liquibase 中存在错误。请参阅 SteveDonie 的回复。有一种解决方法。您可以在测试资源上声明测试模式并使用数据库引擎支持的原生类型。
标签: java mysql database spring liquibase