Liquibase 变更日志未在 Spring Boot 中运行

San*_*sso 5 spring h2 liquibase spring-boot

I\xc2\xb4m 尝试运行 springboot api 并使用 liquibase 配置数据库。

\n\n

这里的问题是我遵循了几个教程中描述的所有步骤,但更改日志从未执行。

\n\n

代码:

\n\n

摇篮配置:

\n\n
group = \'com.strixtools\'\nversion = \'0.0.1-SNAPSHOT\'\n\ndescription = """Strix Tools"""\n\nbuildscript {\n    repositories {\n        mavenCentral()\n        maven {\n            url "https://plugins.gradle.org/m2/"\n        }\n    }\n    dependencies {\n         classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE"\n         classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.20.1"\n    }\n }\n\ngroup = \'strixtools\'\n\napply plugin: \'java\'\napply plugin: \'idea\'\napply plugin: \'org.springframework.boot\'\napply plugin: \'com.palantir.docker\'\n\nbootJar {\n    baseName = \'gs-spring-boot-docker\'\n    version =  \'0.1.0\'\n}\n\nrepositories {\n    mavenCentral()\n}\n\nsourceCompatibility = 1.8\ntargetCompatibility = 1.8\n\ndependencies {\n    configurations.all {\n        exclude module: "spring-boot-starter-logging"\n        exclude module: "logback-classic"\n    }\n    compile (\'org.springframework.boot:spring-boot-starter:2.1.1.RELEASE\')\n    compile group: \'org.springframework.boot\', name: \'spring-boot-starter-data-jpa\', version:\'2.1.1.RELEASE\'\n    compile group: \'org.springframework.boot\', name: \'spring-boot-starter-web\', version:\'2.1.1.RELEASE\'\n    compile group: \'org.springframework.boot\', name: \'spring-boot-devtools\', version:\'2.1.1.RELEASE\'\n    compile group: \'org.springframework.boot\', name: \'spring-boot-starter-security\', version:\'2.1.1.RELEASE\'\n    compile group: \'org.springframework.security.oauth.boot\', name: \'spring-security-oauth2-autoconfigure\', version: \'2.1.1.RELEASE\'\n    compile group: \'org.apache.commons\', name: \'commons-lang3\', version:\'3.4\'\n    compile group: \'io.jsonwebtoken\', name: \'jjwt\', version:\'0.9.0\'\n    compile group: \'com.fasterxml.jackson.datatype\', name: \'jackson-datatype-jsr310\', version:\'2.6.5\'\n    compile group: \'org.liquibase\', name: \'liquibase-core\'\n    compile group: \'com.h2database\', name: \'h2\', version:\'1.4.196\'\n    runtime group: \'org.postgresql\', name: \'postgresql\'\n    testCompile(group: \'org.springframework.boot\', name: \'spring-boot-starter-test\', version:\'2.1.1.RELEASE\')\n\n    compile group: \'org.springframework.boot\', name: \'spring-boot-starter-log4j2\', version:\'2.1.1.RELEASE\'\n\n}\n\ntask stage {\n    dependsOn build\n}\n\ntask unpack(type: Copy) {\n    dependsOn bootJar\n    from(zipTree(tasks.bootJar.outputs.files.singleFile))\n    into("build/dependency")\n}\ndocker {\n    name "${project.group}/${bootJar.baseName}"\n    copySpec.from(tasks.unpack.outputs).into("dependency")\n    buildArgs([\'DEPENDENCY\': "dependency"])\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

应用程序.yml

\n\n
strix-api:\n   host: https://aaa.com\n   client: asdasdasfasdf\n   secret: afadsfsdaf\n   user: afdadsfsadf\n   pass: afadsfsdafsdaf\n\n---  \n
Run Code Online (Sandbox Code Playgroud)\n\n

spring:\n 配置文件: 本地

\n\n
  datasource:\n    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n    username: sa\n    password:\n\n  liquibase:\n    change-log: classpath:db/changelog-master.xml\n    enabled: true\n    drop-first: true\n\n  jpa:\n    hibernate:\n      ddl-auto: none\n    show-sql: true\n  h2:\n    console:\n      enabled: true\n
Run Code Online (Sandbox Code Playgroud)\n\n

和我的 SpringAplication 类

\n\n
@SpringBootApplication\npublic class StrixToolsApplication {\n\n     public static void main(String[] args) {\n        SpringApplication.run(StrixToolsApplication.class, args);\n    }\n\n    //TODO: we should move this to another side\n    @Bean(name = "messageSource")\n    public ReloadableResourceBundleMessageSource messageSource() {\n         ReloadableResourceBundleMessageSource messageBundle = new ReloadableResourceBundleMessageSource();\n        messageBundle.setBasename("classpath:messages/messages");\n        messageBundle.setDefaultEncoding("UTF-8");\n        return messageBundle;\n    }\n\n\n    @Bean\n    public BCryptPasswordEncoder bCryptPasswordEncoder() {\n        return new BCryptPasswordEncoder();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是 liquibase 永远不会执行。如果我将变更日志名称更改为其他名称,它甚至不会抛出错误。

\n\n

感谢您的帮助\n问候

\n

ret*_*hab 9

就我而言,问题是我为 gradle 插件声明了一个依赖项,如下所示

liquibaseRuntime("org.liquibase:liquibase-core:3.8.1")
Run Code Online (Sandbox Code Playgroud)

但不适用于运行时的 liquibase,就像这样

runtimeOnly("org.liquibase:liquibase-core:3.8.1")
Run Code Online (Sandbox Code Playgroud)


Tor*_*ori -1

也许您缺少正确版本的 liquibase。尝试使用 2.0.1。这里有一个小样本:(您可以重构用于版本和组的表示法)。

    apply plugin: 'liquibase'

    plugins {
        id 'io.spring.dependency-management' version '1.0.5.RELEASE'
        id 'org.liquibase.gradle' version '2.0.1'

    }
ependencies {
    implementation('org.springframework.boot:spring-boot-starter-actuator')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework.boot:spring-boot-starter-security')
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-validation')
    implementation('org.liquibase:liquibase-core')
    runtime 'mysql:mysql-connector-java'

    liquibaseRuntime group: 'org.liquibase', name: 'liquibase-core', version: liquibaseCoreVersion
    liquibaseRuntime group: 'org.liquibase', name: 'liquibase-groovy-dsl', version: liquibaseGroovyDslVersion
    liquibaseRuntime 'mysql:mysql-connector-java'

}

liquibase {
    activities {
        main {
            changeLogFile 'src/main/resources/db/liquibase-changelog.xml'
            url 'jdbc:mysql://' + System.env.DATABASE_HOST + ':' + System.env.DATABASE_PORT + '/' + System.env.DATABASE_NAME + '?useSSL=false'
            username System.env.DATABASE_USER
            password System.env.DATABASE_PASSWORD
            driver 'com.mysql.jdbc.Driver'

        }
    }
}
Run Code Online (Sandbox Code Playgroud)