在注解中使用变量 会遇到问题
因为注解中的变量 不能是@Value 注解的 好像是final什么的 记不清了
如
@KafkaListener(topics ="A",groupId = "topicGroupId")
@Scheduled(fixedRate = PaymentConstants.safeRate)
这个时候 可以将变量注入spring容器 然后注解中通过表达式取得值
如 将kafka的listener注解进行变量处理
@Data
@ConfigurationProperties("spring.kafka.topic")
public class KafkaTopicProperties implements Serializable {
private String groupId;
private String exchangeRateCallbackTopicName;
private String paymentClearCallbackTopicName;
private String paymentCheckConfirmsCallbackTopicName;
}
@Configuration
@EnableConfigurationProperties(KafkaTopicProperties.class)
public class KafkaTopicConfiguration {
private final KafkaTopicProperties properties;
public KafkaTopicConfiguration(KafkaTopicProperties properties) {
this.properties = properties;
}
@Bean
public String exchangeRateCallbackTopicName(){
return properties.getExchangeRateCallbackTopicName();
}
@Bean
public String paymentClearCallbackTopicName(){
return properties.getPaymentClearCallbackTopicName();
}
@Bean
public String paymentCheckConfirmsCallbackTopicName(){
return properties.getPaymentCheckConfirmsCallbackTopicName();
}
@Bean
public String topicGroupId() {
return properties.getGroupId();
}
}
@KafkaListener(topics = "#{exchangeRateCallbackTopicName}",groupId = "#{topicGroupId}")
public void exechangeRateListen(ConsumerRecord<String, String> record) {
Optional<String> kafkaMessage = Optional.ofNullable(record.value());
if (kafkaMessage.isPresent()) {
String message = kafkaMessage.get();
log.info("kafka exchange rate result ->:{}",message);
if (StringUtil.isNotEmpty(message)){
LockRateInfo response = JSONObject.parseObject(message, LockRateInfo.class);
if (StringUtil.isNotEmpty(response)){
updateExchangeRateStatus(response);
}
}
}
}