如果 Liquibase 因更改集迁移失败而失败,我的 csv 数据有什么问题...原因:java.lang.NullPointerException
What is wrong with my csv data if Liquibase fails with Migration failed for change set ... Reason: java.lang.NullPointerException
堆栈跟踪是:
Caused by: liquibase.exception.MigrationFailedException: Migration failed for change set config/liquibase/changelog/20190425094054_added_entity_Kindergarten.xml::20190425094054-1::jhipster:
mental-app_1 | Reason: java.lang.NullPointerException
mental-app_1 | at liquibase.changelog.ChangeSet.execute(ChangeSet.java:637)
mental-app_1 | at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:53)
mental-app_1 | at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:83)
mental-app_1 | at liquibase.Liquibase.update(Liquibase.java:202)
mental-app_1 | at liquibase.Liquibase.update(Liquibase.java:179)
mental-app_1 | at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:353)
mental-app_1 | at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:305)
mental-app_1 | at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.initDb(AsyncSpringLiquibase.java:119)
mental-app_1 | at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.afterPropertiesSet(AsyncSpringLiquibase.java:104)
mental-app_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837)
mental-app_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774)
mental-app_1 | ... 107 common frames omitted
mental-app_1 | Caused by: java.lang.NullPointerException: null
mental-app_1 | at liquibase.change.core.LoadDataChange.retrieveMissingColumnLoadTypes(LoadDataChange.java:628)
mental-app_1 | at liquibase.change.core.LoadDataChange.generateStatements(LoadDataChange.java:283)
mental-app_1 | at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1209)
mental-app_1 | at liquibase.changelog.ChangeSet.execute(ChangeSet.java:600)
mental-app_1 | ... 117 common frames omitted
数据由此设置加载到变更集中:
<loadData
file="config/liquibase/data/kindergarten.csv"
separator=";"
tableName="kindergarten"/>
数据本身是:
1,4,xxx yyy 2 ,7 905 555-70-29,"rose place, 11г",john doe
2,7,103,"555-68-72, 555-68-73","address xxx 5, ",emett brown
3,2,34,555-28-49,"z street, 72",""
我已将所有空 ,,
更新为 ,"",
以在其中包含空字符串而不是空值。
所以最后的问题是如何启用 liquibase 调试来定义数据中的哪一行包含空指针问题?现在我必须手动显示有问题的原始文件
在您的变更集配置中,值 separator
设置为 ;
,但您的 CSV 文件使用 ,
作为分隔符。更正变更集配置中的值。
所以,上述异常是由于缺少csv的header部分造成的!我在 csv
的第一行错过了 id;district_id;name;phones;address;director
是的,以下情况也会发生类似的异常:如果 loadData
的 tableName=""
属性指向错误的 table 另一个结构
堆栈跟踪是:
Caused by: liquibase.exception.MigrationFailedException: Migration failed for change set config/liquibase/changelog/20190425094054_added_entity_Kindergarten.xml::20190425094054-1::jhipster:
mental-app_1 | Reason: java.lang.NullPointerException
mental-app_1 | at liquibase.changelog.ChangeSet.execute(ChangeSet.java:637)
mental-app_1 | at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:53)
mental-app_1 | at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:83)
mental-app_1 | at liquibase.Liquibase.update(Liquibase.java:202)
mental-app_1 | at liquibase.Liquibase.update(Liquibase.java:179)
mental-app_1 | at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:353)
mental-app_1 | at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:305)
mental-app_1 | at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.initDb(AsyncSpringLiquibase.java:119)
mental-app_1 | at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.afterPropertiesSet(AsyncSpringLiquibase.java:104)
mental-app_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837)
mental-app_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774)
mental-app_1 | ... 107 common frames omitted
mental-app_1 | Caused by: java.lang.NullPointerException: null
mental-app_1 | at liquibase.change.core.LoadDataChange.retrieveMissingColumnLoadTypes(LoadDataChange.java:628)
mental-app_1 | at liquibase.change.core.LoadDataChange.generateStatements(LoadDataChange.java:283)
mental-app_1 | at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1209)
mental-app_1 | at liquibase.changelog.ChangeSet.execute(ChangeSet.java:600)
mental-app_1 | ... 117 common frames omitted
数据由此设置加载到变更集中:
<loadData
file="config/liquibase/data/kindergarten.csv"
separator=";"
tableName="kindergarten"/>
数据本身是:
1,4,xxx yyy 2 ,7 905 555-70-29,"rose place, 11г",john doe
2,7,103,"555-68-72, 555-68-73","address xxx 5, ",emett brown
3,2,34,555-28-49,"z street, 72",""
我已将所有空 ,,
更新为 ,"",
以在其中包含空字符串而不是空值。
所以最后的问题是如何启用 liquibase 调试来定义数据中的哪一行包含空指针问题?现在我必须手动显示有问题的原始文件
在您的变更集配置中,值 separator
设置为 ;
,但您的 CSV 文件使用 ,
作为分隔符。更正变更集配置中的值。
所以,上述异常是由于缺少csv的header部分造成的!我在 csv
的第一行错过了id;district_id;name;phones;address;director
是的,以下情况也会发生类似的异常:如果 loadData
的 tableName=""
属性指向错误的 table 另一个结构