用于分布式弹簧配置的库(springboot外部)

时间:2016-07-27 20:25:05

标签: spring spring-boot apache-zookeeper

我正在寻找分布式弹簧配置的解决方案。我想把它存放在zookeeper中。 https://github.com/spring-cloud/spring-cloud-zookeeper确实具有该功能,但显然需要使用spring-boot

我是否可以在spring-boot

之外使用类似的库

3 个答案:

答案 0 :(得分:0)

Consul by HashiCorp

Consul是一个受欢迎的选择,因为它是:

  • 开源
  • 包括Service Discovery&构造
  • 支持多数据中心开箱即用

答案 1 :(得分:0)

它不需要你使用Spring Boot,它只是提供自动配置,以防你决定使用Spring Boot。换句话说,如果您没有使用Spring Boot,则不会自动应用任何配置,您必须自己提供配置。

Zookeeper是一个不错的选择,去吧。

修改 要在没有Spring Boot的情况下使用Zookeeper,您需要手动或通过导入Spring Boot将为您隐式导入的自动配置类来注册相应的bean。这个经验法则通常适用于所有启用Spring Boot的模块。

在您的情况下,您很可能只需要导入ZookeeperConfigBootstrapConfigurationZookeeperConfigAutoConfiguration。这些类可以在spring-cloud-zookeeper-config模块中找到,因此不需要Spring Boot依赖项。

或者,您应该查看这些类及其@Import并手动声明bean。

答案 2 :(得分:0)

我找到了一个使用spring-cloud-zookeeper而没有Spring Boot的解决方案,基于此处提供的想法https://wenku.baidu.com/view/493cf9eba300a6c30d229f49.html

首先,创建一个CloudEnvironement类,它将从Zookeeper创建一个PropertySource:

<强> 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()); 
  } 

}

然后创建一个自定义的XmlWebApplicationContext类:当你的webapplication启动并替换Spring Boot的bootrap魔法时,它将允许从Zookeeper加载PropertySource:

MyConfigurableWebApplicationContext.java

public class MyConfigurableWebApplicationContext extends XmlWebApplicationContext { 

  @Override 
  protected ConfigurableEnvironment createEnvironment() { 
    return new CloudEnvironment(); 
  } 
}

最后,在 web.xml 文件中添加以下context-param,以便使用MyConfigurableWebApplicationContext类并引导您的CloudEnvironement。

<context-param>           
      <param-name>contextClass</param-name> 
      <param-value>com.kiabi.config.MyConfigurableWebApplicationContext</param-value> 
    </context-param> 

如果您使用标准属性文件configurer,它仍应加载,以便您可以在本地文件和Zookeeper中同时拥有属性。

要实现这一切,您需要在类路径中使用spring-cloud-starter-zookeeper-config和curator-framework jar及其依赖性,如果您使用maven,则可以将以下内容添加到 pom.xml中

<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>