Spring Boot настраиваемая внешняя конфигурация без http
Мы использовали spring-cloud-consul-config, но теперь требовалось загрузить конфигурацию из nats-streaming 'last-value-queue'
Найден какой-то хакерский способ сделать это, ниже пример
@SpringBootApplication
public class CfgApplication {
public static void main(String[] args) throws Exception {
readConf();
SpringApplication.run(CfgApplication.class, args);
}
static void readConf() throws Exception {
String natsUrl = "nats://localhost:4222";// Read this from bootstrap.properties
Connection nats = Nats.connect(natsUrl);
Options streamingOptions = new Options.Builder().natsConn(nats).build();
StreamingConnection stream = NatsStreaming.connect("test-cluster", "bar", streamingOptions);
stream.subscribe("config", new MessageHandler() {
public void onMessage(Message m) {
try {
Properties properties = new ObjectMapper().readValue(m.getData(), Properties.class);
for (Object key : properties.keySet()) {
System.setProperty(key.toString(), properties.getProperty(key.toString()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, new SubscriptionOptions.Builder().startWithLastReceived().build());
}
}
Просто заглянул в код cloud-config-client и consul-config, но не смог найти что-то, что я могу использовать по своему требованию.
Также, чтобы повторно использовать соединение nats, я использую статическую переменную-член и возвращаю это - @Bean Connection c(){ return static_c}
Какой будет правильный весенний способ сделать это без особых усилий?