fand ich eine Lösung für die Verwendung von feder Cloud-zookeeper ohne Frühling Stiefel, basierend auf der Idee, hier zur Verfügung gestellten https://wenku.baidu.com/view/493cf9eba300a6c30d229f49.html
Es sollte leicht Ihre Bedürfnisse aktualisiert werden angepasst und mit einem Feder Cloud-Config Server (muss die CloudEnvironement Klasse, um die Datei laden vom Server statt Zookeeper)
erstellen Sie zunächst eine CloudEnvironement Klasse aktualisiert werden, die eine PropertySource (ex von Zookeeper) schaffen:
CloudEnvironement. java
public class CloudEnvironment extends StandardServletEnvironment {
@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
super.customizePropertySources(propertySources);
try {
propertySources.addLast(initConfigServicePropertySourceLocator(this));
}
catch (Exception ex) {
logger.warn("failed to initialize cloud config environment", ex);
}
}
private PropertySource<?> initConfigServicePropertySourceLocator(Environment environment) {
ZookeeperConfigProperties configProp = new ZookeeperConfigProperties();
ZookeeperProperties props = new ZookeeperProperties();
props.setConnectString("myzookeeper:2181");
CuratorFramework fwk = curatorFramework(exponentialBackoffRetry(props), props);
ZookeeperPropertySourceLocator propertySourceLocator = new ZookeeperPropertySourceLocator(fwk, configProp);
PropertySource<?> source= propertySourceLocator.locate(environment);
return source ;
}
private CuratorFramework curatorFramework(RetryPolicy retryPolicy, ZookeeperProperties properties) {
CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder();
builder.connectString(properties.getConnectString());
CuratorFramework curator = builder.retryPolicy(retryPolicy).build();
curator.start();
try {
curator.blockUntilConnected(properties.getBlockUntilConnectedWait(), properties.getBlockUntilConnectedUnit());
}
catch (InterruptedException e) {
throw new RuntimeException(e);
}
return curator;
}
private RetryPolicy exponentialBackoffRetry(ZookeeperProperties properties) {
return new ExponentialBackoffRetry(properties.getBaseSleepTimeMs(),
properties.getMaxRetries(),
properties.getMaxSleepMs());
}
}
Dann eine benutzerdefinierte XmlWebApplicationContext Klasse erstellen: es ermöglicht die PropertySource von Zookeeper zu laden, wenn Sie Ihre Webapplikation den Bootstrap Magie des Frühlings-Boot starten und ersetzen:
MyConfigurableWebApplicationContext.java
public class MyConfigurableWebApplicationContext extends XmlWebApplicationContext {
@Override
protected ConfigurableEnvironment createEnvironment() {
return new CloudEnvironment();
}
}
Zuletzt fügen Sie in Ihrer Datei web.xml den folgenden Kontextparameter für die Verwendung von y hinzu unsere MyConfigurableWebApplicationContext-Klasse und bootstraining Ihre CloudEnvironement.
<context-param>
<param-name>contextClass</param-name>
<param-value>com.kiabi.config.MyConfigurableWebApplicationContext</param-value>
</context-param>
Wenn Sie einen Standardeigenschaftendatei configurer verwenden, sollte es noch geladen werden, so dass Sie sowohl eine lokale Datei und Zookeeper in Eigenschaften haben können.
Für all dies arbeiten Sie Feder-Cloud-Starter-Zoowärter-config und Kurator-Rahmen Glas in Ihrem Classpath mit ihren dependancy haben müssen, wenn Sie Maven verwenden, können Sie die folgenden Ihre pom.xml hinzufügen
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-zookeeper-dependencies</artifactId>
<version>1.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
</dependency>
</dependencies>
Hallo. Irgendwelche Updates dazu? Ich bin in der gleichen Situation –
@David Geary jemals herausfinden? – Selwyn
Entschuldigung, ich habe mich nicht weiter damit befasst, da es ein bisschen manuelle Anstrengung erfordern würde, um dies in einer nicht-Spring-Boot-App zu erreichen, Duplizieren von Quellcode usw. Leider scheint sich das Spring Cloud-Zeug nur auf Spring Boot zu konzentrieren. –