设为首页 收藏本站
查看: 1097|回复: 0

[经验分享] 配置管理系统

[复制链接]

尚未签到

发表于 2017-2-28 10:36:04 | 显示全部楼层 |阅读模式
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为中国PE第一股,市值超1000亿元。

------------------------------------------------------------------------------------------------------------------------------------------------------------------


  项目地址:https://github.com/melin/super-diamond

super-diamond


  • 配置管理系统提供系统参数配置管理,例如数据库的配置信息等,配置参数修改以后可以实时推送到客户端(基于netty4), 方便系统动态修改运行参数。
  • 可以建多个项目,每个项目分为三种profile(development、test、production), 能够控制profile 级别的权限。
  • 所有参数均由development profile配置,test和production profile继承development profile配置,也可以覆盖其配置。 test和production profile只提供修改功能。
  • client 备份配置信息到本地文件系统,如果server不可用,可以使用本地备份。client 能够定时重连server,保证client高可用。
  • client 提供ConfigurationListener,当某个属性发生变化(add、update、clear), ConfigurationListener能够接收到ConfigurationEvent。
  • server 备份配置文件系统系统,如果数据库不用,能够保证对客户端提供数据(待完善)。
  • 支持php项目从superdiamond中获取配置参数。
  系统功能截图:
  项目profile请参考:http://melin.iteye.com/blog/1339060

super-diamond-server 安装


  • 下载super-diamond代码: git clone https://github.com/melin/super-diamond.git
  • 进入super-diamond目录,构建super-diamond父工程: mvn install
  • super-diamond-server中嵌入jetty运行,构建部署包:mvn install assembly:single -Pproduction,生成super-diamond-server-${version}-bin.tar.gz文件, 解压运行bin/server.sh start命令。
  • 在conf\META-INF\scripts目录中,提供mysql和oracle建表脚本,理论也支持其它数据库,在conf\META-INF\res\config-production.properties文件中修改数据库配置。
  • 在conf_user表中添加用户admin,密码000000的加密值为:670b14728ad9902aecba32e22fa4f6bd, mysql脚本: insert into conf_user(id,USER_code,USER_NAME,PASSWORD,CREATE_TIME) values(1,'admin','admin','670b14728ad9902aecba32e22fa4f6bd',current_timestamp() );
    commit;
  • 访问super-diamond-server,jetty默认端口为8090,可以在:conf/META-INF/res/jetty.properties中修改。 http://localhost:8090/superdiamond

super-diamond-client
  客户端参考apache configuration,实现其中的部分功能。例如:



public class PropertiesConfigurationTest {
@Test
public void testConfig() throws ConfigurationRuntimeException  {
String config = "username = melin \r\n";
config += "port=8000 \r\n";
config += "reload=true \r\n";
PropertiesConfiguration configuration = new PropertiesConfiguration();
configuration.load(config);
Assert.assertEquals("melin", configuration.getString("username"));
Assert.assertEquals(8000, configuration.getInt("port"));
Assert.assertTrue(configuration.getBoolean("reload"));
}
@Test
public void testInterpolator() throws ConfigurationRuntimeException  {
String config = "app.home = /tmp/home \r\n";
config += "zk.home=${app.home}/zk \r\n";
config += "hbase.home=${app.home}/hbase \r\n";
PropertiesConfiguration configuration = new PropertiesConfiguration();
configuration.load(config);
Assert.assertEquals("/tmp/home", configuration.getString("app.home"));
Assert.assertEquals("/tmp/home/zk", configuration.getString("zk.home"));
Assert.assertEquals("/tmp/home/hbase", configuration.getString("hbase.home"));
}
@Test
public void testSysProperties() throws ConfigurationRuntimeException  {
String config = "javaVersion = ${sys:java.version} \r\n";
PropertiesConfiguration configuration = new PropertiesConfiguration();
configuration.load(config);
Assert.assertEquals(System.getProperty("java.version"), configuration.getString("javaVersion"));
}
@Test
public void testSysEvns() throws ConfigurationRuntimeException  {
String config = "javaHome = ${env:JAVA_HOME}/lib \r\n";
PropertiesConfiguration configuration = new PropertiesConfiguration();
configuration.load(config);
Assert.assertEquals(System.getenv("JAVA_HOME") + "/lib", configuration.getString("javaHome"));
}
}
客户端连接服务器端方式:



PropertiesConfiguration config = new PropertiesConfiguration("localhost", 5001, "test", "development");
config.addConfigurationListener(new ConfigurationListenerTest());
config.getString("jdbc.url")
  spring 使用方式



<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="properties" ref="propertiesConfiguration" />
</bean>
<bean id="propertiesConfiguration" class="com.github.diamond.client.PropertiesConfigurationFactoryBean">
<constructor-arg index="0" value="localhost" />
<constructor-arg index="1" value="5001" />
<constructor-arg index="2" value="test" />
<constructor-arg index="3" value="development" />
</bean>
  客户端链接服务的参数projcode、profile、host和port可以通过环境变量和jvm参数两种方式设置,避免固定在工程配置文件中。



export SUPERDIAMOND_PROJCODE=javademo
export SUPERDIAMOND_PROFILE=production
export SUPERDIAMOND_MODULES=jdbc,common #多个模块之用逗号分隔,可以设置为空,获取所有模块配置。
export SPUERDIAMOND_HOST=192.168.0.1
export SPUERDIAMOND_PORT=8283
  或者



-Dsuperdiamond.projcode=javademo -Dsuperdiamond.profile=production -Dspuerdiamond.host=127.0.0.1 -Dspuerdiamond.port=8283


<bean id="propertiesConfiguration" class="com.github.diamond.client.PropertiesConfigurationFactoryBean">
<constructor-arg index="0" value="test" />
<constructor-arg index="1" value="development" />
<constructor-arg index="2" value="development" />
</bean>


ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
PropertiesConfiguration config = PropertiesConfigurationFactoryBean.getPropertiesConfiguration();
config.getString("jdbc.url")
Rest 接口获取配置:
  通过http获取配置信息,http url格式为:


  •   properties格式
      http://host:port/superdiamond/preview/${项目编码}/${profile} http://host:port/superdiamond/preview/${项目编码}/${module}[,${module}]/${profile} //支持设置多个module值,用逗号分割 http://host:port/superdiamond/preview/${项目编码}/${module}/${key}/${profile}

  •   php config格式
      http://host:port/superdiamond/preview/${项目编码}/${profile}?format=php http://host:port/superdiamond/preview/${项目编码}/${module}[,${module}]/${profile}? format=php //支持设置多个module值,用逗号分割

  •   json config格式
      http://host:port/superdiamond/preview/${项目编码}/${profile}?format=json http://host:port/superdiamond/preview/${项目编码}/${module}[,${module}]/${profile}? //支持设置多个module值,用逗号分割format=json


PHP项目应用:
  结合Phing从superdiamond获取配置参数。完整的phing build.xml配置请参考:https://gist.github.com/melin/fa4818acc9fd55666b77



<!--
    Target: config
    Description: 通过http方式从superdiamond中获取系统配置参数信息。
    development profile 获取配置存放在Application/Common/Conf/user-config.php文件中(ThinkPHP 3.2)
    test & production profile 获取配置存放在build/user-config.php文件中,在执行build target时,
    复制build/user-config.php文件中build/Application/Common/Conf/user-config.php位置
-->
<target name="config" depends="profile">
<if>
<equals arg1="development" arg2="${project.profile}" trim="true" />
<then>
<httpget url="http://172.16.81.73:8001/superdiamond/preview/App.EduSNS/${project.profile}?format=php"
dir="Application/Common/Conf" filename="user-config.php" />
</then>
<else>
<httpget url="http://172.16.81.73:8001/superdiamond/preview/App.EduSNS/${project.profile}?format=php"
dir="build" filename="user-config.php" />
</else>
</if>
</target>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348319-1-1.html 上篇帖子: otter配置详解 下篇帖子: ActiveMQ笔记(4):搭建Broker集群(cluster)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表