I'm getting the following error When I try to run Liquibase diff and diffChangeLog.
The fun part is When I try to run ./gradlew update -PrunList='localEnv' It runs without any issues. The same goes for if I run the application, it runs successfully and I can do the crud operations.
The issue is specifically in diffChangeLog
Following are my configurations in build.gradle file.
plugins {
id 'maven-publish'
alias(libs.plugins.liquibase)
}
project.ext {
// Local Env DB
liquibaseLocalEnvUrl = "jdbc:postgresql://localhost:5432/demo"
liquibaseLocalEnvUsername = "postgres"
liquibaseLocalEnvPassword = "admin"
diffLogLocalEnvChangelogFile = "$projectDir/src/main/resources/config/liquibase/changelog/prod/" + new Date().format("yyyyMMddHHmmss") + "_changelog_generated.yml" as GStringImpl
}
liquibase {
activities {
localEnv {
driver "org.postgresql.Driver"
url project.ext.liquibaseLocalEnvUrl
username project.ext.liquibaseLocalEnvUsername
password project.ext.liquibaseLocalEnvPassword
changelogFile "master-prod.yml"
defaultSchemaName "demo"
logLevel "debug"
classpath "$projectDir/src/main/resources/config/liquibase/"
}
diffLogLocal {
driver 'org.postgresql.Driver'
url project.ext.liquibaseLocalEnvUrl
username project.ext.liquibaseLocalEnvUsername
password project.ext.liquibaseLocalEnvPassword
changelogFile project.ext.diffLogLocalEnvChangelogFile
referenceUrl "hibernate:spring:com.craas?hibernate.enhanced_id=true&dialect=org.hibernate.dialect.PostgreSQL95Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"
defaultSchemaName "demo"
logLevel "debug"
classpath "$buildDir/classes/java/main"
}
}
runList = project.ext.runList
}
diff.dependsOn compileJava
diffChangelog.dependsOn compileJava
generateChangelog.dependsOn compileJava
dependencies {
// Liquibase plugin config
liquibaseRuntime(libs.sdwan.core)
liquibaseRuntime(libs.sdwan.data)
liquibaseRuntime(libs.liquibase.hibernate5)
liquibaseRuntime(libs.spring.boot.starter.data.jpa)
liquibaseRuntime(libs.postgresql)
liquibaseRuntime(libs.liquibase.core)
liquibaseRuntime(libs.liquibase.groovyDsl)
liquibaseRuntime(libs.picocli)
liquibaseRuntime(libs.snakeyaml)
liquibaseRuntime(sourceSets.main.output)
}
all the dependencies are defined in catalog version file. libs.versions.toml
Toml File:
[versions]
liquibaseCore = "4.22.0"
liquibaseGroovyDsl = "3.0.3"
liquibaseHibernate5 = "4.22.0"
picocli = "4.7.3"
snakeyaml = "2.0"
.............................
[libraries]
# Liquibase
liquibase-core = { module = "org.liquibase:liquibase-core", version.ref = "liquibaseCore" }
liquibase-groovyDsl = { module = "org.liquibase:liquibase-groovy-dsl", version.ref = "liquibaseGroovyDsl" }
liquibase-hibernate5 = { module = "org.liquibase.ext:liquibase-hibernate5", version.ref = "liquibaseHibernate5" }
snakeyaml = { module = "org.yaml:snakeyaml", version.ref = "snakeyaml" }
picocli = { module = "info.picocli:picocli", version.ref = "picocli" }
postgresql = { module = "org.postgresql:postgresql", version='42.6.0'}
spring-boot-starter-data-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa"}
I have omitted some libraries to keep it simple.
Before Error Logs: DB Connection:
[2023-05-22 13:54:32] FINE [liquibase.database] Properties:
[2023-05-22 13:54:32] FINE [liquibase.database] Key:'password' Value:'**********'
[2023-05-22 13:54:32] FINE [liquibase.database] Key:'user' Value:'postgres'
[2023-05-22 13:54:32] FINE [liquibase.database] Connecting to the URL:'jdbc:postgresql://localhost:5432/demo' using driver:'org.postgresql.Driver'
[2023-05-22 13:54:32] FINE [liquibase.servicelocator] Loaded liquibase.database.DatabaseConnection instance liquibase.database.jvm.JdbcConnection
[2023-05-22 13:54:32] FINE [liquibase.database] Connection has been created
[2023-05-22 13:54:32] FINE [liquibase.database] Connected to postgres@jdbc:postgresql://localhost:5432/demo
[2023-05-22 13:54:32] FINE [liquibase.database] Setting auto commit to false from true
Hibernate Logs:
[2023-05-22 13:54:32] FINE [liquibase.command] Executing internal command referenceDbUrlConnectionCommandStep
[2023-05-22 13:54:32] FINE [liquibase.database] Properties:
[2023-05-22 13:54:32] FINE [liquibase.database] Connecting to the
URL:'hibernate:spring:com.craas? hibernate.enhanced_id=true&dialect=org.hibernate.dialect.PostgreSQL95Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy' using driver:'liquibase.ext.hibernate.database.connection.HibernateDriver'
[2023-05-22 13:54:32] FINE [liquibase.database] Connection has been created
[2023-05-22 13:54:32] FINE [liquibase.ext] Connected to null@hibernate:spring:com.craas?hibernate.enhanced_id=true&dialect=org.hibernate.dialect.PostgreSQL95Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
[2023-05-22 13:54:32] FINE [liquibase.ext] Not adjusting the auto commit mode; it is already false
[2023-05-22 13:54:32] INFO [liquibase.ext] Reading hibernate configuration hibernate:spring:com.craas?hibernate.enhanced_id=true&dialect=org.hibernate.dialect.PostgreSQL95Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
[2023-05-22 13:54:33] INFO [liquibase.ext] Found package com.craas
Full Exception
13:54:33.587 [main] ERROR com.zaxxer.hikari.HikariConfig - HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.
13:54:33.592 [main] INFO org.hibernate.service.internal.AbstractServiceRegistryImpl - HHH000369: Error stopping service [class org.hibernate.hikaricp.internal.HikariCPConnectionProvider]
java.lang.NullPointerException: Cannot invoke "com.zaxxer.hikari.HikariDataSource.close()" because "this.hds" is null
at org.hibernate.hikaricp.internal.HikariCPConnectionProvider.stop(HikariCPConnectionProvider.java:122)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.stopService(AbstractServiceRegistryImpl.java:399)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.cleanup(EntityManagerFactoryBuilderImpl.java:1449)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1508)
at liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath(HibernateEjb3Database.java:59)
at liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:143)
at liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:83)
at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:124)
at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:144)
at liquibase.command.core.helpers.AbstractDatabaseConnectionCommandStep.createDatabaseObject(AbstractDatabaseConnectionCommandStep.java:75)
at liquibase.command.core.helpers.ReferenceDbUrlConnectionCommandStep.obtainDatabase(ReferenceDbUrlConnectionCommandStep.java:80)
at liquibase.command.core.helpers.ReferenceDbUrlConnectionCommandStep.run(ReferenceDbUrlConnectionCommandStep.java:61)
at liquibase.command.CommandScope.execute(CommandScope.java:212)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:55)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:24)
at picocli.CommandLine.executeUserObject(CommandLine.java:2041)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2453)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2415)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2417)
at picocli.CommandLine.execute(CommandLine.java:2170)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$null$2(LiquibaseCommandLine.java:383)
at liquibase.Scope.child(Scope.java:203)
at liquibase.Scope.child(Scope.java:179)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$3(LiquibaseCommandLine.java:358)
at liquibase.Scope.child(Scope.java:203)
at liquibase.Scope.child(Scope.java:179)
at liquibase.integration.commandline.LiquibaseCommandLine.execute(LiquibaseCommandLine.java:356)
at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:93)
13:54:33.593 [main] DEBUG org.hibernate.service.spi.ServiceBinding - Overriding existing service binding [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
[2023-05-22 13:54:33] INFO [liquibase.command] Command execution complete
[2023-05-22 13:54:33] SEVERE [liquibase.integration] Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
- Caused by: dataSource or dataSourceClassName or jdbcUrl is required.
liquibase.exception.CommandExecutionException: liquibase.exception.DatabaseException: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at liquibase.command.CommandScope.execute(CommandScope.java:235)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:55)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:24)
at picocli.CommandLine.executeUserObject(CommandLine.java:2041)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2453)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2415)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2417)
at picocli.CommandLine.execute(CommandLine.java:2170)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$null$2(LiquibaseCommandLine.java:383)
at liquibase.Scope.child(Scope.java:203)
at liquibase.Scope.child(Scope.java:179)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$3(LiquibaseCommandLine.java:358)
at liquibase.Scope.child(Scope.java:203)
at liquibase.Scope.child(Scope.java:179)
at liquibase.integration.commandline.LiquibaseCommandLine.execute(LiquibaseCommandLine.java:356)
at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:93)
Caused by: liquibase.exception.DatabaseException: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at liquibase.command.core.helpers.AbstractDatabaseConnectionCommandStep.createDatabaseObject(AbstractDatabaseConnectionCommandStep.java:107)
at liquibase.command.core.helpers.ReferenceDbUrlConnectionCommandStep.obtainDatabase(ReferenceDbUrlConnectionCommandStep.java:80)
at liquibase.command.core.helpers.ReferenceDbUrlConnectionCommandStep.run(ReferenceDbUrlConnectionCommandStep.java:61)
at liquibase.command.CommandScope.execute(CommandScope.java:212)
... 18 more
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:284)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223)
at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:295)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:252)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494)
at liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath(HibernateEjb3Database.java:59)
at liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:143)
at liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:83)
at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:124)
at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:144)
at liquibase.command.core.helpers.AbstractDatabaseConnectionCommandStep.createDatabaseObject(AbstractDatabaseConnectionCommandStep.java:75)
... 21 more
Caused by: org.hibernate.HibernateException: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
at org.hibernate.hikaricp.internal.HikariCPConnectionProvider.configure(HikariCPConnectionProvider.java:63)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:255)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:146)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:272)
... 37 more
Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:1029)
at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:77)
at org.hibernate.hikaricp.internal.HikariCPConnectionProvider.configure(HikariCPConnectionProvider.java:59)
... 45 more