需求
批量发送短信业务,对于消息中间件,用户可以选择使用
kafka或者rabbitmq,我们不知道用户最终会选择什么,所以在开发环境中,需要一种配置可以方便切换两种不同的中间件进行测试。这就是@ConditionalOnProperty注解所擅长的工作。
使用举例
配置文件
# 可选 rabbit
tomla.mq.config=kafka
常量类
public class MqConstant {
public static final String KAFKA = "kafka";
public static final String RABBIT = "rabbit";
}
创建发送消息的接口
public interface MqService {
//代码略
}
创建接口的两种实现类(rabbit和kafka)
@Service
@ConditionalOnProperty(name = "tomla.mq.config", havingValue = MqConstant.KAFKA)
public class KafkaMqServiceImpl implements MqService {
//代码略
}
@Service
@ConditionalOnProperty(name = "tomla.mq.config", havingValue = MqConstant.RABBIT)
public class RabbitMqServiceImpl implements MqService {
//代码略
}
注解
@ConditionalOnProperty中的name对应配置文件中tomla.mq.config,havingValue的值与配置文件中tomla.mq.config的value相同时,注解所在的bean才会被启用。比如想要使用rabbit,修改配置文件为:tomla.mq.config=rabbit即可。