Skip to content

Commit

Permalink
Allow to pass DatabaseConfig in SpringTransactionManager (JetBrains#1429
Browse files Browse the repository at this point in the history
)

Co-authored-by: Stengl Vaclav <[email protected]>
  • Loading branch information
stengvac and Stengl Vaclav authored Jan 12, 2022
1 parent fcaaca2 commit 9e7aa44
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package org.jetbrains.exposed.spring.autoconfigure

import org.jetbrains.exposed.spring.DatabaseInitializer
import org.jetbrains.exposed.spring.SpringTransactionManager
import org.jetbrains.exposed.sql.DatabaseConfig
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.AutoConfigureAfter
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
import org.springframework.context.ApplicationContext
Expand All @@ -24,7 +26,18 @@ open class ExposedAutoConfiguration(private val applicationContext: ApplicationC
private var showSql: Boolean = false

@Bean
open fun springTransactionManager(datasource: DataSource) = SpringTransactionManager(datasource, showSql)
open fun springTransactionManager(datasource: DataSource, databaseConfig: DatabaseConfig): SpringTransactionManager {
return SpringTransactionManager(datasource, databaseConfig, showSql)
}

/**
* Database config with default values
*/
@Bean
@ConditionalOnMissingBean(DatabaseConfig::class)
open fun databaseConfig(): DatabaseConfig {
return DatabaseConfig { }
}

@Bean
@ConditionalOnProperty("spring.exposed.generate-ddl", havingValue = "true", matchIfMissing = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,22 @@ package org.jetbrains.exposed.spring.autoconfigure
import org.jetbrains.exposed.spring.DatabaseInitializer
import org.jetbrains.exposed.spring.SpringTransactionManager
import org.jetbrains.exposed.spring.tables.TestTable
import org.jetbrains.exposed.sql.DatabaseConfig
import org.jetbrains.exposed.sql.selectAll
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.TestConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.scheduling.annotation.Async
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.util.concurrent.CompletableFuture

@SpringBootTest(
classes = [org.jetbrains.exposed.spring.Application::class],
classes = [org.jetbrains.exposed.spring.Application::class, ExposedAutoConfigurationTest.CustomDatabaseConfigConfiguration::class],
properties = ["spring.datasource.url=jdbc:h2:mem:test", "spring.datasource.driver-class-name=org.h2.Driver"]
)
open class ExposedAutoConfigurationTest {
Expand All @@ -26,6 +29,9 @@ open class ExposedAutoConfigurationTest {
@Autowired(required = false)
private var databaseInitializer: DatabaseInitializer? = null

@Autowired
private var databaseConfig: DatabaseConfig? = null

@Test
fun `should initialize the database connection`() {
assertNotNull(springTransactionManager)
Expand All @@ -35,6 +41,28 @@ open class ExposedAutoConfigurationTest {
fun `should not create schema`() {
assertNull(databaseInitializer)
}

@Test
fun `database config can be overrode by custom one`() {
val expectedConfig = CustomDatabaseConfigConfiguration.expectedConfig
assertSame(databaseConfig, expectedConfig)
assertEquals(expectedConfig.maxEntitiesToStoreInCachePerEntity, databaseConfig!!.maxEntitiesToStoreInCachePerEntity)
}

@TestConfiguration
open class CustomDatabaseConfigConfiguration {

@Bean
open fun customDatabaseConfig(): DatabaseConfig {
return expectedConfig
}

companion object {
val expectedConfig = DatabaseConfig {
maxEntitiesToStoreInCachePerEntity = 777
}
}
}
}

@SpringBootTest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.jetbrains.exposed.spring

import org.jetbrains.exposed.sql.DEFAULT_REPETITION_ATTEMPTS
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.DatabaseConfig
import org.jetbrains.exposed.sql.StdOutSqlLogger
import org.jetbrains.exposed.sql.Transaction
import org.jetbrains.exposed.sql.addLogger
Expand All @@ -21,6 +22,7 @@ import javax.sql.DataSource

class SpringTransactionManager(
_dataSource: DataSource,
databaseConfig: DatabaseConfig,
private val showSql: Boolean = false,
@Volatile override var defaultRepetitionAttempts: Int = DEFAULT_REPETITION_ATTEMPTS
) : DataSourceTransactionManager(_dataSource), TransactionManager {
Expand All @@ -29,7 +31,10 @@ class SpringTransactionManager(
this.isRollbackOnCommitFailure = true
}

private val db = Database.connect(_dataSource) { this }
private val db = Database.connect(
datasource = _dataSource,
databaseConfig = databaseConfig
) { this }

@Volatile override var defaultIsolationLevel: Int = -1
get() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.jetbrains.exposed.spring

import org.jetbrains.exposed.sql.DatabaseConfig
import org.junit.FixMethodOrder
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
Expand All @@ -25,7 +26,7 @@ open class TestConfig : TransactionManagementConfigurer {
open fun ds(): EmbeddedDatabase = EmbeddedDatabaseBuilder().setName("embeddedTest").setType(EmbeddedDatabaseType.H2).build()

@Bean
override fun annotationDrivenTransactionManager(): PlatformTransactionManager? = SpringTransactionManager(ds())
override fun annotationDrivenTransactionManager(): PlatformTransactionManager = SpringTransactionManager(ds(), DatabaseConfig {})

@Bean
open fun service(): Service = Service()
Expand Down

0 comments on commit 9e7aa44

Please sign in to comment.