代码拉取完成,页面将自动刷新
Smconf专注于分布式环境下配置的统一管理
目前只支持java,其他语言如果需要支持可以使用Smconf提供的Rest API
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>
由于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的环境中使用,获取配置就只能从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来设置
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。