Skip to content

Commit

Permalink
[feat] aot processed migration
Browse files Browse the repository at this point in the history
juliuskrah committed Mar 18, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 2dc332b commit 7546f9e
Showing 4 changed files with 52 additions and 52 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -199,10 +199,10 @@ TODO
- [ ] Queries
- [ ] sorting
- [ ] filters
- [x] Migration
- [ ] aot processing
- [x] Authentication
- [ ] Authorization
- [x] Migration
- [x] aot processing
- [x] Paging with keyset
- [x] Fix tests
- [x] Database migration
Original file line number Diff line number Diff line change
@@ -4,14 +4,11 @@ import com.example.graph.spring.EnableMongockChangeUnit
import com.mongodb.reactivestreams.client.MongoClient
import io.mongock.api.annotations.ChangeUnit
import io.mongock.driver.mongodb.reactive.driver.MongoReactiveDriver
import io.mongock.runner.springboot.RunnerSpringbootBuilder
import io.mongock.runner.core.executor.MongockRunner
import io.mongock.runner.springboot.base.MongockApplicationRunner
import io.mongock.runner.springboot.base.MongockInitializingBeanRunner
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationEventPublisher
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.ComponentScan.Filter
import org.springframework.context.annotation.Configuration
@@ -32,10 +29,6 @@ import io.mongock.api.config.MongockConfiguration as MongockConfig
)
@EnableReactiveMongoAuditing(auditorAwareRef = "auditor")
class MongoDBConfiguration {
@Autowired
lateinit var applicationContext: ApplicationContext
@Autowired
lateinit var applicationEventPublisher: ApplicationEventPublisher

@Bean
fun connectionDriver(
@@ -50,16 +43,16 @@ class MongoDBConfiguration {
return driver
}

@Bean
@ConditionalOnExpression("'\${mongock.runner-type:ApplicationRunner}'.toLowerCase().equals('applicationrunner')")
fun applicationRunner(mongockRunner: RunnerSpringbootBuilder): MongockApplicationRunner {
mongockRunner.setSpringContext(applicationContext).setEventPublisher(applicationEventPublisher)
return mongockRunner.buildApplicationRunner()
fun applicationRunner(mongockRunner: MongockRunner): MongockApplicationRunner {
return MongockApplicationRunner(mongockRunner)
}

@Bean
@ConditionalOnExpression("'\${mongock.runner-type:null}'.toLowerCase().equals('initializingbean')")
fun initializingBeanRunner(mongockRunner: RunnerSpringbootBuilder): MongockInitializingBeanRunner {
mongockRunner.setSpringContext(applicationContext).setEventPublisher(applicationEventPublisher)
return mongockRunner.buildInitializingBeanRunner()
fun initializingBeanRunner(mongockRunner: MongockRunner): MongockInitializingBeanRunner {
return MongockInitializingBeanRunner(mongockRunner)
}

@Bean
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.example.graph.repository

import io.mongock.api.config.MongockConfiguration
import io.mongock.driver.api.driver.ConnectionDriver
import io.mongock.runner.core.executor.MongockRunner
import io.mongock.runner.springboot.MongockSpringboot
import io.mongock.runner.springboot.RunnerSpringbootBuilder
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
import org.springframework.context.ApplicationEventPublisher
import org.springframework.context.ApplicationEventPublisherAware

/**
* @author Julius Krah
*/
class MongockRunnerSupport: ApplicationContextAware, ApplicationEventPublisherAware {
var driver: ConnectionDriver? = null
var config: MongockConfiguration? = null
var migrationClasses: List<Class<*>>? = emptyList()
private lateinit var applicationContext: ApplicationContext
private lateinit var eventPublisher: ApplicationEventPublisher

fun create(): MongockRunner {
val builder: RunnerSpringbootBuilder = MongockSpringboot.builder()
if (this.driver != null) builder.setDriver(driver)
if (this.config != null) builder.setConfig(config)
builder.setSpringContext(applicationContext)
builder.setEventPublisher(eventPublisher)
migrationClasses?.forEach(builder::addMigrationClass)
return builder.buildRunner()
}

override fun setApplicationContext(applicationContext: ApplicationContext) {
this.applicationContext = applicationContext
}

override fun setApplicationEventPublisher(applicationEventPublisher: ApplicationEventPublisher) {
this.eventPublisher = applicationEventPublisher
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
package com.example.graph.spring

import io.mongock.api.config.MongockConfiguration
import io.mongock.driver.api.driver.ConnectionDriver
import com.example.graph.repository.MongockRunnerSupport
import io.mongock.runner.core.executor.MongockRunner
import io.mongock.runner.springboot.MongockSpringboot
import io.mongock.runner.springboot.RunnerSpringbootBuilder
import io.mongock.runner.core.executor.MongockRunnerImpl
import org.springframework.beans.factory.config.BeanDefinition
import org.springframework.beans.factory.support.BeanDefinitionBuilder
import org.springframework.beans.factory.support.BeanDefinitionRegistry
import org.springframework.beans.factory.support.BeanNameGenerator
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
import org.springframework.context.ApplicationEventPublisher
import org.springframework.context.ApplicationEventPublisherAware
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
import org.springframework.context.annotation.ConfigurationClassPostProcessor
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar
@@ -60,9 +54,8 @@ class MongockBeanDefinitionRegistrar(
.addPropertyReference("driver", "connectionDriver")
.addPropertyReference("config", "mongock-io.mongock.runner.springboot.base.config.MongockSpringConfiguration")

val mongockRunnerBeanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(MongockRunner::class.java)
val mongockRunnerBeanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(MongockRunnerImpl::class.java)
.setFactoryMethodOnBean("create", "mongockRunnerSupport")
.setInitMethodName("execute")

registry.registerBeanDefinition(getName(MongockRunner::class.java), mongockRunnerBeanDefinitionBuilder.beanDefinition)
registry.registerBeanDefinition("mongockRunnerSupport", mongockSupportBeanDefinitionBuilder.beanDefinition)
@@ -113,30 +106,4 @@ class MongockBeanDefinitionRegistrar(

private fun getName(clazz: Class<*>) = Introspector.decapitalize(clazz.simpleName)

class MongockRunnerSupport: ApplicationContextAware, ApplicationEventPublisherAware {
var driver: ConnectionDriver? = null
var config: MongockConfiguration? = null
var migrationClasses: List<Class<*>>? = emptyList()
private lateinit var applicationContext: ApplicationContext
private lateinit var eventPublisher: ApplicationEventPublisher

fun create(): MongockRunner {
val builder: RunnerSpringbootBuilder = MongockSpringboot.builder()
if (this.driver != null) builder.setDriver(driver)
if (this.config != null) builder.setConfig(config)
builder.setSpringContext(applicationContext)
builder.setEventPublisher(eventPublisher)
migrationClasses?.forEach(builder::addMigrationClass)
return builder.buildRunner()
}

override fun setApplicationContext(applicationContext: ApplicationContext) {
this.applicationContext = applicationContext
}

override fun setApplicationEventPublisher(applicationEventPublisher: ApplicationEventPublisher) {
this.eventPublisher = applicationEventPublisher
}
}

}

0 comments on commit 7546f9e

Please sign in to comment.