1

我們使用spring-boot-starter-parent 1.4.1以及spring-boot-starter-redisspring-boot-starter-data-redis。我們使用(一)傳遞給外部應用程序和(b)存儲在庫中的一些信息消息Redis的。我們Redis的配置看起來像這樣Spring Data Redis - 存儲庫中的@Transactional支持

@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 

有了這個配置的消息傳遞很好地工作,以及寫入/讀取版本庫。現在我試圖讓@Transactional與庫通訊的工作,但我至今沒有成功。我已經遵循了docs就可以了例如配置和手動啓用事務支持:

@Bean 
open fun redisTemplate(): RedisTemplate<*, *> { 

    val template = RedisTemplate<ByteArray, ByteArray>() 
    template.setEnableTransactionSupport(true) 
    return template 
} 

...但是這顯然不是要走的路。目前,一切都(在測試過程中尤其是)寫入到存儲庫在那裏停留。

回答

2

@Transactional使用Redis的庫是不可能的,我懷疑它會在所有的工作。

的背後原因是春季Redis的數據倉庫的支持是如何工作的: RedisKeyValueAdapter依賴於那些在堅持一個對象發出writeread經營業績。

Redis事務更像延遲批處理,因此無法在事務內部包裝Redis存儲庫支持,但需要採用不同的方法並施加若干限制。