Giter VIP home page Giter VIP logo

xdiamond's Introduction

本项目已不再维护。可以改用其它的配置中心。

简介

全局配置中心,存储应用的配置项,解决配置混乱分散的问题。名字来源于淘宝的开源项目diamond,前面加上一个字母X以示区别。

wiki

设计思路

在线演示

地址:xdiamond.coding.io,登陆选择standard,用户名密码:admin/admin

特性

  • 所见即所得,在管理界面上看到的所有配置即项目运行时的配置
  • 支持groupId,artifactId,version,profile四个维度以应对复杂环境
  • 支持公共组件的配置继承,client jar包配置继承
  • 配置修改实时通知客户端
  • 和spring集成,使用简单
  • 完善的权限系统
  • 集成LDAP登陆,支持同步LDAP组/用户
  • 支持http RESTful api获取配置
  • 以secret key防止非法获取配置
  • 丰富的metrics, connection统计

使用技术

  • netty
  • mybatis
  • spring mvc
  • shiro
  • ehcache
  • dropwizard metrics
  • crash shell
  • swagger
  • angularjs
  • bootstrap
  • bower

工作原理

  • 每个项目有groupId,artifactId,version,然后在不同的环境里对应不同的profile,比如:test, dev, product。

  • 应用在启动时,通过网络连接到xdiamond配置中心,获取到最新的配置。如果没有获取到,从本地备份读取最后拉取的配置。

  • 在Spring初始化时,把配置转为Properties,应用可以通过${}表达式或者@Value来获取配置。

  • 如果配置有更新,可以通过Listener来通知应用。

每个项目都有一个base的profile,所有的profile都会继承base的配置。在base可以放一些公共的配置,比如某个服务的端口。

对于使用者,xdiamond提供的是一个Properties对象。用户可以结合Spring等来使用。

界面截图

  • 项目管理: xdiamond-project.png
  • Profile管理: xdiamond-profile.png
  • Config管理: xdiamond-config.png
  • 项目依赖关系图: xdiamond-dependencygraphic.png
  • Metrics信息: xdiamond-metric.png
  • Connection信息: xdiamond-connection.png

本地开发环境

  • git clone 代码
  • 运行xdiamond server:
git clone https://github.com/hengyunabc/xdiamond.git --depth=1
cd xdiamond/xdiamond-server
mvn tomcat7:run -DskipTests

然后访问 http://localhost:8080/xdiamond-server ,用admin/admin, standard登录

  • 执行client例子代码:
cd xdiamond-client-example/
mvn exec:java -Dexec.mainClass="io.github.xdiamond.example.ClientExampleMain"

默认是获取product环境的配置,如果想获取dev环境的配置,则可以执行:

mvn exec:exec -Dexec.executable="java" -Dexec.args="-Dxdiamond.project.profile=dev -classpath %classpath io.github.xdiamond.example.ClientExampleMain"
  • 演示结果

client启动时会打印获取到的配置,另外在web界面上connections里可以看到当前连接的客户端信息。

maven dependency

maven依赖已经发布到**仓库:http://search.maven.org/#search%7Cga%7C1%7Cxdiamond

<dependency>
    <groupId>io.github.hengyunabc.xdiamond</groupId>
    <artifactId>xdiamond-client</artifactId>
    <version>1.0.4</version>
</dependency>

xdiamond's People

Contributors

hengyunabc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xdiamond's Issues

把 crash.cli 显式地加到依赖里

有些用户在编绎时,不能通过。发现是 crash.cli 并没有引入。可能是某些maven仓库同步出错了。

<dependency>
    <groupId>org.crashub</groupId>
    <artifactId>crash.cli</artifactId>
    <version>1.3.1</version>
</dependency>

在官方的maven仓库里是通过crash.embed.spring直接引入了的。

        <dependency>
            <groupId>org.crashub</groupId>
            <artifactId>crash.embed.spring</artifactId>
            <version>1.3.1</version>

讨论一些需求,想法

权限控制:
权限控制是参考gitlab来做的,把开发者区分的develop, master, owner级别,只能对应级别的开发者才可以看到对应级别的profile的配置。

不过有这样的需求,提供只读权限。比如某些开发人员可以查看线上的配置,但是他不能修改。

xdiamond-server的CRaSHConnector报错

import org.crsh.cli.impl.Delimiter;
import org.crsh.cli.impl.completion.CompletionMatch;
import org.crsh.cli.spi.Completion;
这三个引入报错,The import org.crsh.cli cannot be resolved

xdiamond 连接server报错

[ERROR] io.github.xdiamond.client.XDiamondConfig - load xdiamond config from server error! test|captcha|1.0|product
java.util.concurrent.TimeoutException: null
at io.netty.util.concurrent.AbstractFuture.get(AbstractFuture.java:49)
at io.github.xdiamond.client.XDiamondConfig.init(XDiamondConfig.java:127)

[INFO] io.github.xdiamond.client.net.XDiamondClient - Reconnecting to 10.0.0.97:8804
[INFO] io.github.xdiamond.client.net.XDiamondClient - connection to 10.0.0.97:8804 success.

[WARN] org.springframework.context.annotation.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xDiamondConfig' defined in class path resource [spring-context-springboot-example.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException

springboot配置xdiamond的多环境,如何实现?

spring-xdiamond配置文件的注入方式如下:

@SpringBootApplication()
@EnableScheduling
@ImportResource("classpath:spring-xdiamond-springboot.xml")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我想将xdiamond.server.ip,port等参数通过application.properties配置,可以吗?
因为项目中由dev,product等等多套环境,每次上线都需要手动替换spring-xdiamond的配置IP,好麻烦啊!
求教!

包依赖问题

工程里面有几处依赖包问题导致无法编译
org.springframework:spring:jar:2.5.6.SEC03 (对应源文件CacheConfig)
javax.servlet.api:servlet-api:2.4 (对应源文件WebConfigurer)

xdiamond-server/src/main/resources/my-ehcache.xml 里面有一行dtd的配置,需要删除掉

删除掉这一行,避免启动时要连网下载:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">

否则会抛出异常:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'cacheManager' threw exception; nested exception is net.sf.ehcache.CacheException: Error configuring from input stream. Initial cause was http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd

用户使用案例收集

非常感谢使用xdiamond的用户。

如果可以的话,请在留言里写上你们使用的公司名(不方便的话,可以匿名),接入的项目数量等,这对于开发者一说,是很大的鼓励!非常感谢!

安装部署启动tomcat报错Error while adding the mapper 'interface io.github.xdiamond.persistence.ProjectMapper' to configuration.

org.mybatis.spring.mapper.MapperFactoryBean - Error while adding the mapper 'interface io.github.xdiamond.persistence.ProjectMapper' to configuration.
org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.cache.CacheException: Could not instantiate cache implementation (class io.github.hengyunabc.mybatis.FacadeCache). Cause: java.lang.reflect.InvocationTargetException
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120) ~[mybatis-3.2.7.jar:3.2.7]
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92) ~[mybatis-3.2.7.jar:3.2.7]
at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.loadXmlResource(MapperAnnotationBuilder.java:164) ~[mybatis-3.2.7.jar:3.2.7]
at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:118) ~[mybatis-3.2.7.jar:3.2.7]
at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:71) ~[mybatis-3.2.7.jar:3.2.7]
at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:651) ~[mybatis-3.2.7.jar:3.2.7]

spring boot的java config配置问题

参考了作者的 https://github.com/hengyunabc/xdiamond/wiki/%E6%94%AF%E6%8C%81spring-boot%E9%87%8C%E7%9A%84@ConfigurationProperties 里面的xml配置,想做个java config配置,使用@bean实例化XDiamondConfigFactoryBean,但是读取命令行参数时总是失败。比如--xdiamond.serverHost=127.0.0.1,这个参数要应用到XDiamondConfigFactoryBean的serverHost属性,但是总是为空,请问是什么引起的,该怎么解决这个问题?谢谢

关于用户权限的问题

增加用户的时候,为什么会增加一个用户组?

删除用户组的时候,数据库数据删除的不够干净。关联数据无法删除

默认登录验证方式

默认验证是ldap,默认选中是在js里面控制的吗?
没有找到在哪里,能指点一下吗?

不断产生config的临时文件

windows下xdiamond服务端启动的时候,会在目录下C:\Users\Administrator.xdiamond不断生成以config前缀的临时文件,如:config8560528275070450078.tmp。
你们有什么解决方案吗?

mvn exec:java -Dexec.mainClass="io.github.xdiamond.example.ClientExampleMain"运行报错

[WARNING]
java.lang.ClassNotFoundException: io.github.xdiamond.example.ClientExampleMain
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:281)
at java.lang.Thread.run(Thread.java:745)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:36 min

断开重连问题

`
void channelUnregistered(final ChannelHandlerContext ctx) {
currentRetryTimes++;
if (currentRetryTimes > maxRetryTimes) {
return;
}

int currentRetryInterval = retryIntervalSeconds;
if (bBackOffRetryInterval) {
  // 注意currentRetryInterval 可能会溢出
  currentRetryInterval = retryIntervalSeconds * (currentRetryTimes >= 30 ? 1 << 30 : 1 << currentRetryTimes);
  if (currentRetryInterval <= 0) {
    currentRetryInterval = maxRetryIntervalSeconds;
  }
}
if (currentRetryInterval > maxRetryIntervalSeconds) {
  currentRetryInterval = maxRetryIntervalSeconds;
}
logger.info("Waiting for " + currentRetryInterval + "s to reconnect");

final EventLoop loop = ctx.channel().eventLoop();
loop.schedule(new Runnable() {
  @Override
  public void run() {
    logger.info("Reconnecting to {}:{}", serverAddress, port);
    configureBootstrap(new Bootstrap(), loop).connect().addListener(new FutureListener<Void>() {
      @Override
      public void operationComplete(Future<Void> future) throws Exception {
        if (!future.isSuccess()) {
          logger.error("can not connection to {}:{}", serverAddress, port, future.cause());
        } else {
          logger.info("connection to {}:{} success.", serverAddress, port);
        }
      }
    });
  }
}, currentRetryInterval, TimeUnit.SECONDS);

}
`

这里首次断开后,只会重连一次吗? 如果这次也连不上,后面就不做任何处理了。。。

使用客户端高级配置bSyncToSystemProperties没有生效

试了一下客户端高级配置:bSyncToSystemProperties,发现源码中对于这个属性是这样解析的:
if (!StringUtils.isEmpty(bSyncToSystemProperties)) { bSyncToSystemProperties = helper.replacePlaceholders(bSyncToSystemProperties, properties); xDiamondConfig.setbSyncToSystemProperties(Boolean.getBoolean(bSyncToSystemProperties)); }
在spring中这样配置:
<bean id="xDiamondConfig" class="io.github.xdiamond.client.spring.XDiamondConfigFactoryBean"> ... <property name="bSyncToSystemProperties" value="true" /> </bean>
这样写属性注入失败(实际并没有拿到true,而是null),Boolean.getBoolean(name)方法是从环境变量中获取value,而实际是直接注入了值"true",这里似乎应该改为Boolean.valueOf(),是我使用有误还是?
不过还是要说,xdiamond很好很强大 :)

编译不过----org.crsh.cli.impl不存在

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project xdiamond-server: Compilation failure: Compilation failure:
[ERROR] xdiamond/xdiamond-server/src/main/java/io/github/xdiamond/web/crash/CRaSHConnector.java:[35,25] 程序包org.crsh.cli.impl不存在
[ERROR] xdiamond/xdiamond-server/src/main/java/io/github/xdiamond/web/crash/CRaSHConnector.java:[36,36] 程序包org.crsh.cli.impl.completion不存在
[ERROR] xdiamond/xdiamond-server/src/main/java/io/github/xdiamond/web/crash/CRaSHConnector.java:[37,24] 程序包org.crsh.cli.spi不存在
[ERROR] xdiamond/xdiamond-server/src/main/java/io/github/xdiamond/web/crash/CRaSHConnector.java:[198,13] 找不到符号
[ERROR] 符号: 类 CompletionMatch
[ERROR] 位置: 类 io.github.xdiamond.web.crash.CRaSHConnector
[ERROR] xdiamond/xdiamond-server/src/main/java/io/github/xdiamond/web/crash/CRaSHConnector.java:[199,13] 找不到符号
[ERROR] 符号: 类 Completion
[ERROR] 位置: 类 io.github.xdiamond.web.crash.CRaSHConnector
[ERROR] xdiamond/xdiamond-server/src/main/java/io/github/xdiamond/web/crash/CRaSHConnector.java:[200,13] 找不到符号
[ERROR] 符号: 类 Delimiter
[ERROR] 位置: 类 io.github.xdiamond.web.crash.CRaSHConnector
[ERROR] -> [Help 1]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.