liquibaseDiffChangelog gradle 任务因 java.lang.UnsupportedOperationException 出错:应用程序必须提供 JDBC 连接

Posted

技术标签:

【中文标题】liquibaseDiffChangelog gradle 任务因 java.lang.UnsupportedOperationException 出错:应用程序必须提供 JDBC 连接【英文标题】:liquibaseDiffChangelog gradle task erring out with java.lang.UnsupportedOperationException: The application must supply JDBC connections 【发布时间】:2021-08-05 01:50:10 【问题描述】:

我正在尝试为带有嵌入式 postgressql 后端(基于磁盘)的 Spring Boot 微服务生成 liquibase 更改日志。下面的命令

./gradlew -PexcludeLog4j=true liquibaseDiffChangelog -PrunList=diffLog -PliquibaseTimestamp=1620929423 -Purl="jdbc:h2:mem:~/workspace/test/testms/build/h2db"

总是犯错

java.lang.UnsupportedOperationException:应用程序必须提供 JDBC 连接 在 org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:44) 在 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) 在 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) 在 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) 在 org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) 在 org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) 在 org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:176) 在 org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) 在 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) 在 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) 在 liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath(HibernateEjb3Database.java:59) 在 liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:143) 在 liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:83) 在 liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:121) 在 liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:141) 在 liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:96) 在 liquibase.integration.commandline.Main.createReferenceDatabaseFromCommandParams(Main.java:2107) 在 liquibase.integration.commandline.Main.doMigration(Main.java:1511) 在 liquibase.integration.commandline.Main$1.lambda$run$0(Main.java:367) 在 liquibase.Scope.lambda$child$0(Scope.java:160) 在 liquibase.Scope.child(Scope.java:169) 在 liquibase.Scope.child(Scope.java:159) 在 liquibase.Scope.child(Scope.java:138) 在 liquibase.integration.commandline.Main$1.run(Main.java:366) 在 liquibase.integration.commandline.Main$1.run(Main.java:196) 在 liquibase.Scope.child(Scope.java:169) 在 liquibase.Scope.child(Scope.java:145) 在 liquibase.integration.commandline.Main.run(Main.java:196) 在 liquibase.integration.commandline.Main.main(Main.java:158) 最佳实践:由生成的变更日志 应该检查 diffChangeLog/generateChangeLog 的正确性 和部署前的完整性。 Liquibase 命令 'diffChangeLog' 已成功执行。

有什么想法吗?

【问题讨论】:

【参考方案1】:

为了生成增量差异,我们需要先运行任务liquibaseUpdate,然后再运行liquibaseDiffChangelog

添加了以下扩展

task generateLiquibaseChangelog 
    dependsOn 'clean'
    dependsOn 'liquibaseUpdate'
    dependsOn 'liquibaseDiffChangeLog'

    tasks.findByName('liquibaseUpdate').mustRunAfter 'clean'
    tasks.findByName('liquibaseDiffChangeLog').mustRunAfter 'liquibaseUpdate'

    project.ext."excludeLog4j"="true"
    project.ext."runList"="diffLog"
    project.ext."liquibaseTimestamp"=getTimestamp()


def getTimestamp() 
    return new Date().format('yyyyMdHHms')

【讨论】:

以上是关于liquibaseDiffChangelog gradle 任务因 java.lang.UnsupportedOperationException 出错:应用程序必须提供 JDBC 连接的主要内容,如果未能解决你的问题,请参考以下文章

SAP MM GR-based IV, 无GR不能IV?

使用弹性搜索查询查找多个精确值

Oracle 10gR2 触发错误

在11gR2 GI中怎么改变时区?

无法根据语言环境“el-GR”解析十进制数[关闭]

学习笔记月末操作-GR/IR重组