Spring Boot настраиваемая внешняя конфигурация без http - PullRequest
0 голосов
/ 29 октября 2018

Мы использовали 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());
    }
}

Только что заглянул в код облака-клиента-конфигурации и консула-конфига, но не смог найти что-то, что я могу использовать по своему требованию.

Также для повторного использования соединения nats я использую статическую переменную-член и возвращаю это - @Bean Connection c () {return static_c}

Каким будет правильный весенний способ сделать это без особых усилий?

...