Liquibase Changelog未在Spring Boot中运行

时间:2019-01-03 14:52:08

标签: spring spring-boot h2 liquibase

我正在尝试运行springboot api并使用liquibase配置数据库。

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

代码:

Gradle配置:

group = 'com.strixtools'
version = '0.0.1-SNAPSHOT'

description = """Strix Tools"""

buildscript {
    repositories {
        mavenCentral()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
         classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE"
         classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.20.1"
    }
 }

group = 'strixtools'

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'com.palantir.docker'

bootJar {
    baseName = 'gs-spring-boot-docker'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    configurations.all {
        exclude module: "spring-boot-starter-logging"
        exclude module: "logback-classic"
    }
    compile ('org.springframework.boot:spring-boot-starter:2.1.1.RELEASE')
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version:'2.1.1.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version:'2.1.1.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version:'2.1.1.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version:'2.1.1.RELEASE'
    compile group: 'org.springframework.security.oauth.boot', name: 'spring-security-oauth2-autoconfigure', version: '2.1.1.RELEASE'
    compile group: 'org.apache.commons', name: 'commons-lang3', version:'3.4'
    compile group: 'io.jsonwebtoken', name: 'jjwt', version:'0.9.0'
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version:'2.6.5'
    compile group: 'org.liquibase', name: 'liquibase-core'
    compile group: 'com.h2database', name: 'h2', version:'1.4.196'
    runtime group: 'org.postgresql', name: 'postgresql'
    testCompile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version:'2.1.1.RELEASE')

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-log4j2', version:'2.1.1.RELEASE'

}

task stage {
    dependsOn build
}

task unpack(type: Copy) {
    dependsOn bootJar
    from(zipTree(tasks.bootJar.outputs.files.singleFile))
    into("build/dependency")
}
docker {
    name "${project.group}/${bootJar.baseName}"
    copySpec.from(tasks.unpack.outputs).into("dependency")
    buildArgs(['DEPENDENCY': "dependency"])
}

aplication.yml

strix-api:
   host: https://aaa.com
   client: asdasdasfasdf
   secret: afadsfsdaf
   user: afdadsfsadf
   pass: afadsfsdafsdaf

---  

春天:       个人资料:本地

  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    username: sa
    password:

  liquibase:
    change-log: classpath:db/changelog-master.xml
    enabled: true
    drop-first: true

  jpa:
    hibernate:
      ddl-auto: none
    show-sql: true
  h2:
    console:
      enabled: true

和我的SpringAplication类

@SpringBootApplication
public class StrixToolsApplication {

     public static void main(String[] args) {
        SpringApplication.run(StrixToolsApplication.class, args);
    }

    //TODO: we should move this to another side
    @Bean(name = "messageSource")
    public ReloadableResourceBundleMessageSource messageSource() {
         ReloadableResourceBundleMessageSource messageBundle = new ReloadableResourceBundleMessageSource();
        messageBundle.setBasename("classpath:messages/messages");
        messageBundle.setDefaultEncoding("UTF-8");
        return messageBundle;
    }


    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

问题是liquibase从未执行。如果将更改日志名称更改为其他,它甚至不会引发错误。

感谢您的帮助 问候

2 个答案:

答案 0 :(得分: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'

        }
    }
}

答案 1 :(得分:1)

在我的情况下,问题是我为gradle插件声明了依赖项,就像这样

liquibaseRuntime("org.liquibase:liquibase-core:3.8.1")

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

runtimeOnly("org.liquibase:liquibase-core:3.8.1")
相关问题