apache / apache/servicecomb-java-chassis

关于动态配置读取

Ouverte
#4,714 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Java
Étoiles
1.9k
Forks
814
Merge moyen
8 j 23 h
PR mergées (30 j)
1

Description

我注意到`3.x`版本把原本完全使用`archaius API`读取配置的部分全部换掉了,在`DynamicPropertiesImpl`中通过`Environment`来读取配置,这是为什么,为了更接入Spring原生的操作吗?

然后我按照文档[在程序中读取配置信息](https://servicecomb.apache.org/references/java-chassis/zh_CN/config/read-config.html)试了下,使用`dynamicProperties.getStringProperty()`无法读到配置的变化,然后我看了下`[servicecomb-java-chassis](https://github.com/apache/servicecomb-java-chassis)`的测试:

```java
HashMap updated = new HashMap<>();
updated.put(stringPropertyName, newValue);
EventManager.post(ConfigurationChangedEvent.createIncremental(updated));
```

运行没有问题,但是按照文档那样以非mock的方式测试就读不到配置的变化,请问是有什么遗漏的额外配置吗?

我测试时用的是基于[开发第一个微服务应用](https://servicecomb.apache.org/references/java-chassis/zh_CN/start/first-sample.html)里 `bmi` 那个示例改写的。

```Java
@RestSchema(schemaId = "ProviderController")
@RequestMapping(path = "/provider")
public class ProviderController {
private DynamicProperties dynamicProperties;

@Autowired
private Environment environment;

private String example;

@Autowired
public ProviderController(DynamicProperties dynamicProperties) {
this.dynamicProperties = dynamicProperties;
// 在构造函数中注册回调,这样配置变化时会自动更新 example 值
this.example = this.dynamicProperties.getStringProperty("basic.example",
value -> {
System.out.println("Configuration changed, new value: " + value);
this.example = value;
}, "not set");
}

@GetMapping(path = "/example")
public String getExampleValue() {
String dynamicValue = dynamicProperties.getStringProperty("basic.example", "not set");
String envValue = environment.getProperty("basic.example", "not set");
System.out.println("Dynamic value: " + dynamicValue);
System.out.println("Environment value: " + envValue);
return example;
}
}
```
不管是用 `dynamicProperties` 还是 `environment` 都读不到变化。

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par comparer DynamicPropertiesImpl et DynamicProperties.getStringProperty avec l’exemple ProviderController, puis suivez la manière dont les modifications de Environment sont propagées et dont EventManager publie ConfigurationChangedEvent. Reproduisez le comportement avec l’exemple BMI et documentez la configuration requise ou identifiez le chemin de mise à jour manquant afin que dynamicProperties et environment reflètent tous deux une valeur modifiée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java, spring
Domaine
backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.