• Stars
    star
    121
  • Rank 293,924 (Top 6 %)
  • Language
    CSS
  • Created over 7 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

简单,集中,分布式的配置管理

Smconf专注于分布式环境下配置的统一管理

目前只支持java,其他语言如果需要支持可以使用Smconf提供的Rest API

架构图

目标

  • 提供配置的统一管理
  • 多个环境(生产环境:prod, 线上测试环境:online, 线下测试环境:test, 开发环境:dev)
  • web后台配置管理
  • 配置修改后实时同步到使用的客户端
  • 无缝集成spring和spring boot项目
  • 非spring项目中也可以使用
  • web后台支持不同账号管理不同环境的配置
  • 支持水平扩容,负载,部署多个server,client自动发现
  • 支持用户自定义配置修改回调接口做扩展
  • 支持手动触发推送配置到指定的节点
  • 修改配置可以选择推送的节点,可用于做灰度发布测试
  • 配置的历史修改记录

文档

案列

配置管理

配置列表

配置修改

配置历史记录

配置推送

作者

历史版本下载

FAQ

整合dubbox 2.8.4报错?

Caused by: java.lang.NoSuchMethodError: org.apache.curator.utils.PathUtils.validatePath(Ljava/lang/String;)Ljava/lang/String;

这个错主要是由于dubbo也带了zk的客户端,jar包冲突导致的,所以我们将dubbo旧的版本排除掉

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-client</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
		</exclusion>
	</exclusions>
</dependency>

spring boot整合dubbox 2.8.4启动时需要dubbo配置信息怎么办?

由于Smconf的初始化机制是在spring bean实例化之后再对配置bean进行数据加载

spring boot中使用dubbo是用的@bean注解的初始化方式

所以在初始化dubbo的时候,这个时候Smconf的配置还没有初始化好,导致dubbo的配置不能被管理

为了解决这个问题,可以在启动spring前先将配置信息初始化z到环境变量中,这样后面dubbo就可以顺利的初始化了

只需要一行代码即可

public static void main(String[] args) {
	//启动时需要配置来做连接,需要在spring启动前将一些配置信息加载到环境变量使用
	//com.fangjia.ld.service.config是你的配置所在的包
	SmconfInit.init("com.fangjia.ld.service.config");
	//也可以使用 System.setProperty("smconf.conf.package", "com.fangjia.ld.service.config");来代替上面的init
	//也可以在application.properties中配置smconf.conf.package=com.fangjia.ld.service.config来代替上面的init

	new SpringApplicationBuilder().sources(LdApplication.class).web(false).run(args);
        try {
        	new CountDownLatch(1).await();
	} catch (InterruptedException e) {
		LOGGER.error("项目启动异常", e);
	}
}

application.properties文件中使用$符号取值

spring.dubbo.application.name=${spring.dubbo.applicationName}
spring.dubbo.registry.address=${spring.dubbo.registryAddress}
spring.dubbo.protocol.name=${spring.dubbo.protocolName}
spring.dubbo.protocol.port=${spring.dubbo.protocolPort}

/**
 * dubbo配置信息
 * @author yinjihuan
 *
 */
@CxytianDiConf(system=Constant.SYSTEM,env=true, prefix="spring.dubbo")
public class DubboConf {
	
	@ConfField("zookeeper地址")
	private String registryAddress = "zookeeper://192.168.10.47:2181";
	
	@ConfField("dubbo服务名称")
	private String applicationName = Constant.SYSTEM;
	
	@ConfField("dubbo暴露协议")
	private String protocolName = "dubbo";
	
	@ConfField("dubbo暴露端口")
	private Integer protocolPort = 20881;
}

非spring环境的java项目中怎么使用?

只需要在程序启动前加载配置即可,但是如果在非spring的环境中使用,获取配置就只能从ConfApplication中获取,不能通过@Autowired注入来使用,因为你没有spring

import org.cxytiandi.conf.client.ConfApplication;
import org.cxytiandi.conf.client.init.SmconfInit;
import org.cxytiandi.conf.demo.conf.DbConf;
/**
 * 非Spring环境中使用
 * @author yinjihuan
 *
 */
public class NoSpringEnvDemo {
	public static void main(String[] args) {
		SmconfInit.init("org.cxytiandi.conf.demo.conf");
		System.out.println(ConfApplication.getBean(DbConf.class).getMaxTime());
	}
}

不想使用配置中心的配置怎么办?

有的时候我们在开发环境下,有多个开发人员,你改改配置我改改配置,导致每个人的都不一样,开发环境下需要调试的话你可以自己在本地搭建一套Smconf

还有一种办法就是只用本地配置文件里的默认值,这样就不用去配置中心加载配置了。 只需要在application.properties中添加smconf.data.status=local即可,默认为加载远程配置 也可以通过-Dsmconf.data.status=local来设置

More Repositories

1

spring-cloud

《Spring Cloud微服务-全栈技术与案例解析》和《Spring Cloud微服务 入门 实战与进阶》配套源码
Java
1,766
star
2

monkey-api-encrypt

monkey-api-encrypt是对基于Servlet的Web框架API请求进行统一加解密操作
JavaScript
785
star
3

kitty

Spring Cloud & Spring Cloud Alibaba 基础框架,内置了 Cat 监控,互联网公司落地 Spring Cloud 架构必备。
Java
648
star
4

sharding-jdbc

sharding-jdbc 分库分表示例
Java
623
star
5

elastic-job-spring-boot-starter

Elastic-Job Spring Boot 自动集成,只需要一个注解即可发布Job
Java
391
star
6

netty-im

Netty开发的IM即时通讯
Java
318
star
7

kitty-cloud

Spring Cloud 架构搭建的开源社区技术网站,落地微服务架构值得参考的项目。
Java
310
star
8

vue-elementui

vue + elementui 新手入门案例
Java
228
star
9

spring-boot-starter-mongodb-pool

Spring Boot中增强Mongodb的配置,多数据源,连接池等
Java
60
star
10

fox-mock

基于Java Agent实现的自测,联调Mock利器
Java
55
star
11

lagou-spring-cloud

JavaScript
51
star
12

monkey-spring-cloud

Spring Cloud 开箱即用脚手架
Java
48
star
13

transaction-mq

分布式事务-最终一致性消息队列服务
Java
27
star
14

micro-service-dubbo

dubbo构建的微服务架构
Java
27
star
15

smjdbctemplate

简单的ORM框架
Java
24
star
16

spring-data-mongodb

spring-data-mongodb 操作示例
Java
24
star
17

spring-boot-starter-encrypt-example

Spring Boot请求统一加解密示例代码
JavaScript
24
star
18

kitty-api-aggregation

API聚合框架,只需要简单的配置就可以完成多个API的聚合操作。
Java
19
star
19

elastic-job-spring-boot-example

Elastic-Job Spring Boot 自动集成示例代码
Java
19
star
20

ddd-order

DDD写一个下单功能,帮助大家了解DDD中的规范。
Java
17
star
21

spring-boot-starter-swagger

快速使用swagger生成API文档
Java
13
star
22

spring-boot-starter-dubbox

spring boot集成dubbox
Java
11
star
23

kittysamples

Java
9
star
24

spring-boot-elasticsearch

Java
9
star
25

spring-boot-starter-cache

快速使用spring cache
9
star
26

smrpc

Netty简化版RPC
Java
7
star
27

spring-boot-starter-es-security

ES6.X版本配置,支持证书认证
Java
6
star
28

spring-boot-starter-lock-redis

Java
5
star
29

springboot-samples

猿天地网站SpringBoot教程对应参考源码
Java
3
star
30

monkey-cid

vue + elementui 编写的Spring Boot项目发布系统
JavaScript
2
star
31

rhinoceros

汇总这些年自己写过的文章,学习资料, 给Java方向的朋友一些参考。
2
star