Merge pull request #18 from TouchInstinct/common-spring-jpa/liquibase

add liquibase starter
This commit is contained in:
Alexander Buntakov 2021-06-10 18:55:14 +03:00 committed by GitHub
commit 8dcfd83bef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 0 deletions

View File

@ -37,6 +37,9 @@
* `models.*` - базовые `Entity`
* `repositories` - утилиты и доп. интерфейсы для репозиториев
* `liquibase.LiquibaseStart` - для подключения этого компонента необходимо объявить `liquibase.LiquibaseParams`.
Указать путь к файлу с миграцией и схему, для которой эта миграция будет применяться. С помощью `LiquibaseStart`
можно применить кастомную миграцию не конфликтуя с основной.
* `EnableJpaAuditingExtra` - подключение `JpaAuditing` с поддержкой типа `ZoneDateTime`
## common-spring-web

View File

@ -7,5 +7,9 @@ plugins {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation(project(":common-spring"))
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
compileOnly("org.liquibase:liquibase-core")
}

View File

@ -0,0 +1,6 @@
package ru.touchin.common.spring.jpa.liquibase
data class LiquibaseParams(
val schema: String,
val changeLogPath: String,
)

View File

@ -0,0 +1,34 @@
@file:Suppress("unused")
package ru.touchin.common.spring.jpa.liquibase
import liquibase.Contexts
import liquibase.Liquibase
import liquibase.database.Database
import liquibase.database.DatabaseFactory
import liquibase.database.jvm.JdbcConnection
import liquibase.resource.ClassLoaderResourceAccessor
import org.springframework.stereotype.Component
import ru.touchin.common.spring.annotations.RunOnceOnStartup
import javax.sql.DataSource
@Component
class LiquibaseStart(
private val dataSource: DataSource,
private val liquibaseParams: LiquibaseParams,
) {
@RunOnceOnStartup
fun runLiquibase() {
dataSource.connection.use { connection ->
val database: Database = DatabaseFactory.getInstance()
.findCorrectDatabaseImplementation(JdbcConnection(connection))
.apply { defaultSchemaName = liquibaseParams.schema }
val liquibase = Liquibase(liquibaseParams.changeLogPath, ClassLoaderResourceAccessor(), database)
liquibase.update(Contexts())
}
}
}