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 连接的主要内容,如果未能解决你的问题,请参考以下文章