Wir verwenden spring-boot-starter-parent
1.4.1 zusammen mit spring-boot-starter-redis
und spring-boot-starter-data-redis
. Wir verwenden redis für (a) Nachrichten, die an eine externe App übergeben werden und (b) um einige Informationen in einem Repository zu speichern. Unsere redis Config sieht wie folgt ausSpring Data Redis - @Transaktionsunterstützung für Repository
@Configuration
@EnableRedisRepositories
open class RedisConfig {
@Bean // for message passing
@Profile("test")
open fun testRedisChannelProvider(): RedisParserChannelProvider {
return RedisParserChannelProvider("test_parser:parse.job", "test_parser:parse.joblist")
}
@Bean // for message passing
@Profile("!test")
open fun productionRedisChannelProvider(): RedisParserChannelProvider {
return RedisParserChannelProvider("parser:parse.job", "parser:parse.joblist")
}
@Bean // for message passing
open fun parseJobTemplate(connectionFactory: RedisConnectionFactory): RedisTemplate<String, ParseJob> {
val template = RedisTemplate<String, ParseJob>()
template.connectionFactory = connectionFactory
template.valueSerializer = Jackson2JsonRedisSerializer<ParseJob>(ParseJob::class.java)
return template
}
//@Bean // for message passing
//open fun parseJobListTemplate ...
// no template for repository
Mit dieser Konfigurations des Message Passing ist schön sowie das Schreiben zu arbeiten/aus dem Repository zu lesen. Jetzt versuche ich @Transactional
arbeiten für die Kommunikation mit dem Repository, aber ich war bisher nicht gelungen. Ich folgte bereits das Beispiel config in der docs und manuell aktiviert Transaktionsunterstützung auf sie:
@Bean
open fun redisTemplate(): RedisTemplate<*, *> {
val template = RedisTemplate<ByteArray, ByteArray>()
template.setEnableTransactionSupport(true)
return template
}
... aber das ist offenbar nicht der Weg zu gehen. Derzeit bleibt alles, was in das Repository geschrieben wurde (insbesondere während der Tests), dort gespeichert.