Home > Net >  Why does liquibase not start when the spring boot application starts?
Why does liquibase not start when the spring boot application starts?

Time:07-08

I am trying to create a basic database structure when starting a spring boot application. I need that when starting the task :bootRun was run by liquibase.

It starts without errors, a connection to the database is created, but liquibase does not start. It does not give errors, there is no information in the log about it.

Why doesn't it start automatically with spring boot?

build.gradle

plugins {
    id 'org.springframework.boot' version '3.0.0-SNAPSHOT'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'spring.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/milestone' }
    maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.0.M1'
    implementation group: 'org.liquibase', name: 'liquibase-core', version: '4.12.0'
    runtimeOnly'org.postgresql:postgresql'

    annotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'

    compileOnly 'org.projectlombok:lombok'
}

tasks.named('test') {
    useJUnitPlatform()
}

application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/db
spring.datasource.username=username
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=none

spring.liquibase.change-log=classpath:db/changelog/db.changelog-root.yaml

src/db/changelog/db.changelog-root.yaml

databaseChangeLog:
  - logicalFilePath: db/changelog/db.changelog-root.yaml
  - changeSet:
    id: create-a-structure
    author: your_liquibase_username
    changes:
      - createTable:
          tableName: app_user
          columns:
            - column:
                name: id
                type: BIGINT
                autoIncrement: true
                constraints:
                  primaryKey: true
                  nullable: false
            - column:
                name: username
                type: varchar(254)
                constraints:
                  unique: true
                  nullable: false
            - column:
                name: password
                type: varchar(64)
                constraints:
                  nullable: false
            - column:
                name: first_name
                type: varchar(50)
                  nullable: false
            - column:
                name: last_name
                type: varchar(50)
                  nullable: false

CodePudding user response:

I believe the spring property for the changelog file should not have the classpath reference:

spring.liquibase.change-log=db/...

instead of

spring.liquibase.change-log=classpath:db/...

CodePudding user response:

Just noticed that you've put the liquibase yaml in: src/db/changelog/db.changelog-root.yaml. Since the specified value is: spring.liquibase.change-log=classpath:db/changelog/db.changelog-root.yaml

Could you put the file into:
src/main/resources/db/changelog/db.changelog-root.yaml?

  • Related