package org.springframework.cloud.stream.module.redis.sink;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.integration.redis.outbound.RedisPublishingMessageHandler;
import org.springframework.integration.redis.outbound.RedisQueueOutboundChannelAdapter;
import org.springframework.integration.redis.outbound.RedisStoreWritingMessageHandler;
import org.springframework.messaging.MessageHandler;
/**
* Creates a dedicated RedisConnectionFactory different from the one spring-boot autoconfigure
* section that the bindings use in spring-cloud-stream.
* <p/>
* The configuration prefix is "spring.cloud.stream.module.redis" and contains the standard
* properties to configure a redis connection, host, port, etc as well as the additional properties for
* the sink, queue, key, etc.
*
* @author Eric Bottard
* @author Mark Pollack
*/
@Configuration
@EnableConfigurationProperties(RedisSinkProperties.class)
public class RedisSinkConfiguration {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Autowired
private RedisSinkProperties redisSinkProperties;
@Bean
@Qualifier
public MessageHandler redisSinkMessageHandler() {
if (redisSinkProperties.isKey()) {
RedisStoreWritingMessageHandler redisStoreWritingMessageHandler =
new RedisStoreWritingMessageHandler(redisConnectionFactory);
redisStoreWritingMessageHandler.setKeyExpression(redisSinkProperties.getKeyExpression());
return redisStoreWritingMessageHandler;
} else if (redisSinkProperties.isQueue()) {
return new RedisQueueOutboundChannelAdapter(redisSinkProperties.getQueueExpression(), redisConnectionFactory);
} else { // must be topic
RedisPublishingMessageHandler redisPublishingMessageHandler =
new RedisPublishingMessageHandler(redisConnectionFactory);
redisPublishingMessageHandler.setTopicExpression(redisSinkProperties.getTopicExpression());
return redisPublishingMessageHandler;
}
}
}