这是我的课:
public class DeduplicationErrorMetric extends AbstractErrorMetric {
public static final String DEDUPLICATIONS_METRIC = "deduplications";
public static final String KAFKA_MESSAGES_METRIC = "kafka.messages";
private static String DEDUPLICATION_TOPIC_NAME;
private static final List<Tag> DEDUPLICATION_ERROR_TAGS = List.of(Tag.of("type", "failed"));
private static final List<Tag> KAFKA_ERROR_TAGS = List.of(Tag.of("topic", DEDUPLICATION_TOPIC_NAME),
Tag.of("action", "send"), Tag.of("result", "failure"));
public DeduplicationErrorMetric() {
super(Map.of(
DEDUPLICATIONS_METRIC, DEDUPLICATION_ERROR_TAGS,
KAFKA_MESSAGES_METRIC, KAFKA_ERROR_TAGS
));
}
@Override
public void incrementMetric(String key) {
errorCounters.get(key).increment();
}
}
我有 @Value("${kafka.topic.deduplication}")
在application.yml中,我需要将值插入 DEDUPLICATION_TOPIC_NAME
在创建bean之前。我该怎么做?
3条答案
按热度按时间ttygqcqt1#
你可以用setter来做这件事,但我反对这种做法!
这意味着你的领域
null
在第一个示例到来并调用这个注入点之前你的
static
字段不是final
因此可能导致修改,从而导致难以调试的bug它不能解决你现在的问题
null
在这种情况下,值将用于KAFKA_ERROR_TAGS
```@Value("${kafka.topic.deduplication}")
private void setDeduplicationTopicName(String deduplicationTopicName) {
this.DEDUPLICATION_TOPIC_NAME = deducplicationTopicName;
}
2jcobegt2#
这里可以直接使用属性文件中的注入。
如果它是一个springboot应用程序,那么在应用程序属性中设置
kafka.topic.deduplication
属性(对于不同的环境可以有不同的值)。这样,spring将在构造bean时获得值。
您的代码可能如下所示:
luaexgnf3#
删除关键字“static”,然后您就可以在示例中更改它了。
静态意味着字段被锁定到类。
由于变量名不是静态的,因此我还建议将其设置为小写,这是一种良好的编码实践。