diff --git a/README.md b/README.md index ad953c4..74268b9 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,9 @@ * `models.*` - базовые `Entity` * `repositories` - утилиты и доп. интерфейсы для репозиториев +* `liquibase.LiquibaseStart` - для подключения этого компонента необходимо объявить `liquibase.LiquibaseParams`. + Указать путь к файлу с миграцией и схему, для которой эта миграция будет применяться. С помощью `LiquibaseStart` + можно применить кастомную миграцию не конфликтуя с основной. * `EnableJpaAuditingExtra` - подключение `JpaAuditing` с поддержкой типа `ZoneDateTime` ## common-spring-web diff --git a/common-spring-jpa/build.gradle.kts b/common-spring-jpa/build.gradle.kts index cf997f2..e548299 100644 --- a/common-spring-jpa/build.gradle.kts +++ b/common-spring-jpa/build.gradle.kts @@ -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") } diff --git a/common-spring-jpa/src/main/kotlin/ru/touchin/common/spring/jpa/liquibase/LiquibaseParams.kt b/common-spring-jpa/src/main/kotlin/ru/touchin/common/spring/jpa/liquibase/LiquibaseParams.kt new file mode 100644 index 0000000..f4435b3 --- /dev/null +++ b/common-spring-jpa/src/main/kotlin/ru/touchin/common/spring/jpa/liquibase/LiquibaseParams.kt @@ -0,0 +1,6 @@ +package ru.touchin.common.spring.jpa.liquibase + +data class LiquibaseParams( + val schema: String, + val changeLogPath: String, +) diff --git a/common-spring-jpa/src/main/kotlin/ru/touchin/common/spring/jpa/liquibase/LiquibaseStart.kt b/common-spring-jpa/src/main/kotlin/ru/touchin/common/spring/jpa/liquibase/LiquibaseStart.kt new file mode 100644 index 0000000..ed0feb2 --- /dev/null +++ b/common-spring-jpa/src/main/kotlin/ru/touchin/common/spring/jpa/liquibase/LiquibaseStart.kt @@ -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()) + } + } + +}