kotlin-db-migration

A MySQL db migration

License

License

Categories

Categories

Kotlin Languages
GroupId

GroupId

info.purocean
ArtifactId

ArtifactId

kotlin-db-migration
Last Version

Last Version

1.2.1
Release Date

Release Date

Type

Type

jar
Description

Description

kotlin-db-migration
A MySQL db migration
Project URL

Project URL

https://github.com/purocean/kotlin-db-migration
Source Code Management

Source Code Management

https://github.com/purocean/kotlin-db-migration

Download kotlin-db-migration

How to add to project

<!-- https://jarcasting.com/artifacts/info.purocean/kotlin-db-migration/ -->
<dependency>
    <groupId>info.purocean</groupId>
    <artifactId>kotlin-db-migration</artifactId>
    <version>1.2.1</version>
</dependency>
// https://jarcasting.com/artifacts/info.purocean/kotlin-db-migration/
implementation 'info.purocean:kotlin-db-migration:1.2.1'
// https://jarcasting.com/artifacts/info.purocean/kotlin-db-migration/
implementation ("info.purocean:kotlin-db-migration:1.2.1")
'info.purocean:kotlin-db-migration:jar:1.2.1'
<dependency org="info.purocean" name="kotlin-db-migration" rev="1.2.1">
  <artifact name="kotlin-db-migration" type="jar" />
</dependency>
@Grapes(
@Grab(group='info.purocean', module='kotlin-db-migration', version='1.2.1')
)
libraryDependencies += "info.purocean" % "kotlin-db-migration" % "1.2.1"
[info.purocean/kotlin-db-migration "1.2.1"]

Dependencies

compile (3)

Group / Artifact Type Version
org.jetbrains.kotlin : kotlin-stdlib-jdk8 jar 1.3.11
mysql : mysql-connector-java jar 6.0.6
org.reflections : reflections jar 0.9.11

Project Modules

There are no modules declared in this project.

kotlin-db-migration

// https://search.maven.org/artifact/info.purocean/kotlin-db-migration/1.0/jar
compile('info.purocean:kotlin-db-migration:1.0')

Trait

  1. simple & light
  2. name based version
  3. support dry run
  4. support code migration and sql migration

With Spring

@Component
class Migration: InitializingBean, ApplicationListener<ApplicationReadyEvent>{
    @Value("\${spring.datasource.url}")
    val dbUrl: String = ""

    @Value("\${spring.datasource.username}")
    val dbUsername: String = ""

    @Value("\${spring.datasource.password}")
    val dbPassword: String = ""

    @Autowired
    lateinit var migrationConfig: MigrationConfigProperties

    @Autowired
    protected var context: ApplicationContext? = null

    override fun afterPropertiesSet() {
        if (migrationConfig.isEnable) {
            Migrate(dbUrl, dbUsername, dbPassword).run(migrationConfig.isDryRun)
        }
    }

    override fun onApplicationEvent(event: ApplicationReadyEvent) {
        Migrate(dbUrl, dbUsername, dbPassword).runCode(context, migrationConfig.isDryRun)
    }
}
class M2018_03_15_105104_test_migration: CodeMigration<ApplicationContext> {
    override fun run(context: ApplicationContext) {
        // context.getBean("xxx")
        // do what every you want
    }
}

Gradle task help create migration

    // ./gradlew createMigration -Ptp=code -Pmn=create_role_table
    createMigration.doLast {
        if (project.hasProperty('mn')) {
            def content = "\n"
            def fileName = ""
            def path = ""

            if (project.hasProperty('tp') && project.tp == 'code') {
                def className = "M" + (new Date()).format('yyyy_MM_dd_HHmmss_') + "${project.mn}"
                fileName = "${className}.kt"
                path = "$projectDir/src/main/kotlin/db/migrations"
                content = """
package db.migrations

import info.purocean.dbmigration.CodeMigration
import org.springframework.context.ApplicationContext

class ${className}: CodeMigration<ApplicationContext> {
    override fun run(context: ApplicationContext) {
        // TODO
    }
}
"""
            } else {
                fileName = (new Date()).format('yyyy_MM_dd_HHmmss_') + "${project.mn}.sql"
                path = "$projectDir/src/main/resources/db/migrations"
            }

            new File(path).mkdirs()

            def file = new File("$path/$fileName")

            file.createNewFile()

            file.text = content

            println("created:$path/$fileName")
        } else {
            println("no name!")
        }
    }

Versions

Version
1.2.1
1.2.0
1.1.0
1.0