2016-07-22 13 views
0

Diese Frage ist etwas ähnlich wie diese existing questioninitialisieren Federwolke Config-Client für SDK Entwicklung

ich noch zu navigieren oder zu versuchen, ich versuche rechten Feder Boot-Code zu finden, die ich anpassen können. Ich muss Java SDK entwickeln, das sich mit dem vorhandenen Konfigurationsserver verbindet und dem Schlüssel Werte zur Verfügung stellt. Dieses SDK wird in Java-Anwendungen verwendet, bei denen es sich möglicherweise um eine Spring-Anwendung handelt. Das gleiche SDK wird von der QA für Regressionstests des Konfigurationsservers verwendet.

So Frage ist dann gegeben, wenn

  1. Config Server-URL
  2. Anwendungsname
  3. aktives Profil (keine Notwendigkeit für Etiketten-, wird es Standard-Master sein), Kann ich eine Config-Client-Klasse initialisieren was gibt mir einfache Methoden wie public String getKeyValue (final String key)

ich schau mich g an der Quelle von Klassen wie ConfigServicePropertySourceLocator, CompositePropertySource, ConfigClientAutoConfiguration, ConfigServiceBootstrapConfiguration usw.

Muss ich Objekt manuell Umwelt aufbauen müssen? Wenn ja, wie?

+0

Ich bin mir nicht sicher, wohin Ihre Frage geht. Im Wesentlichen können Sie auf den Config-Server nur per URL zugreifen, indem Sie die drei Dinge angeben und in einem Format abrufen, das Ihnen gefällt (yaml, json). Alles, was Sie benötigen, ist "HttpUrlConnection" und vielleicht eine JSON-Bibliothek und das war's. –

+0

Ich versuche zu vermeiden, JSON zu analysieren und Werte selbst zu erhalten. Auch die clientseitige Anwendung kann übergeordnete Argumente der cmdLine bereitstellen. Um es perfekt zu machen, könnte ich am Ende das Rad neu erfinden. Daher möchte ich Config-Client-Bibliotheken als SDK zu Config-Server verwenden. –

+0

Aber ich verstehe dein Ziel nicht. Möchten Sie es so zurückhaltend wie möglich halten oder das, was dort ist, wiederverwenden? Wenn Sie den obigen Kommentar als Erstes sehen, können Sie diesen ohne Spring möglicherweise nicht verwenden. –

Antwort

0

Ich habe etwas Erfolg. Veröffentlichen einer möglichen Antwort für andere zur weiteren Feinabstimmung.

@SpringBootApplication 
public class ConfigSDKApp { 

    @Autowired 
    public SomeSpringBean someBean = null; 

    private static ConfigSDKApp INSTANCE = null; 

    public synchronized static ConfigSDKApp getInstance(String[] args) { 
     if (null != INSTANCE) { 
      return INSTANCE; 
     } 

     SpringApplication sprApp = new SpringApplication(ConfigSDKApp.class); 
    sprApp.setWebEnvironment(false); 
    ConfigurableApplicationContext appContext = sprApp.run(args); 
    ConfigSDKApp app = appContext.getBean(ConfigSDKApp.class);//new ConfigSDKApp(); 

     INSTANCE = app; 
     return INSTANCE; 
    } 
} 

Es ist eine Art Singleton-Klasse (aber öffentlichen Konstruktor). Daher Code-Geruch. Was ist, wenn dieses SDK mit dem Springboot-Client ausgeführt wird? ApplicationContext & Umgebung ist bereits initialisiert.