Coder Social home page Coder Social logo

xuxueli / xxl-conf Goto Github PK

View Code? Open in Web Editor NEW
661.0 74.0 370.0 7.75 MB

A lightweight distributed configuration management platform. (分布式配置管理平台XXL-CONF)

Home Page: http://www.xuxueli.com/xxl-conf/

License: GNU General Public License v3.0

Java 88.66% Dockerfile 0.04% Less 11.30%
xxl-conf configuration config zookeeper distributed

xxl-conf's Introduction

XXL-CONF

XXL-CONF, A lightweight distributed configuration management platform.
-- Home Page --

Introduction

XXL-CONF is a lightweight distributed configuration management platform, with features such as "lightweight, second dynamic push, multi-environment, cross-language, cross-room deployment, configuration listening, permission control, version rollback". Now, it's already open source, real "out-of-the-box".

XXL-CONF 是一个轻量级分布式配置管理平台,拥有"轻量级、秒级动态推送、多环境、跨语言、跨机房、配置监听、权限控制、版本回滚"等特性。现已开放源代码,开箱即用。

Documentation

Communication

Features

  • 1、简单易用: 接入灵活方便,一分钟上手;
  • 2、轻量级: 部署简单,不依赖第三方服务,一分钟上手;
  • 3、配置中心HA:配置中心支持集群部署,提升配置中心系统容灾和可用性。
  • 4、在线管理: 提供配置中心, 通过Web界面在线操作配置数据,直观高效;
  • 5、多环境支持:单个配置中心集群,支持自定义多套环境,管理多个环境的的配置数据;环境之间相互隔离;
  • 6、多数据类型配置:支持多种数据类型配置,如:String、Boolean、Short、Integer、Long、Float、Double 等;
  • 7、跨语言:底层通过http服务(long-polling)拉取配置数据并实时感知配置变更,从而实现多语言支持。
  • 8、跨机房:得益于配置中心集群关系对等特性,集群各节点提供幂等的配置服务;因此,异地跨机房部署时,只需要请求本机房配置中心即可,实现异地多活;
  • 9、高性能:得益于配置中心的 "磁盘配置" 与客户端的 "LocalCache",因此配置服务性能非常高;单机可承担大量配置请求;
  • 10、实时性: 秒级动态推送;配置更新后, 实时推送配置信息, 项目中配置数据会实时更新并生效, 不需要重启线上机器;
  • 11、配置变更监听功能:可开发Listener逻辑,监听配置变更事件,可据此动态刷新JDBC连接池等高级功能;
  • 12、最终一致性:底层借助内置广播机制,保障配置数据的最终一致性,从而保证配置数据的同步;
  • 13、配置备份: 配置数据同时在磁盘与MySQL中存储和备份,并定期同步, 提高配置数据的安全性;
  • 14、多种获取配置方式:支持 "API、 注解、XML占位符" 等多种方式获取配置,可灵活选择使用;
  • 15、兼容Spring原生配置:兼容Spring原生配置方式 "@Value"、"${}" 加载本地配置功能;与分布式配置获取方式隔离,互不干扰;
  • 16、分布式: 支持多业务线接入并统一管理配置信息,支撑分布式业务场景;
  • 17、项目隔离: 以项目为维度管理配置, 方便隔离不同业务线配置;
  • 18、高性能: 通过LocalCache对配置数据做缓存, 提高性能;
  • 19、客户端断线重连强化:设置守护线程,周期性检测客户端连接、配置同步,提高异常情况下配置稳定性和时效性;
  • 20、空配置处理:主动缓存null或不存在类型配置,避免配置请求穿透到远程配置Server引发雪崩问题;
  • 21、用户管理:支持在线添加和维护用户,包括普通用户和管理员两种类型用户;
  • 22、配置权限控制;以项目为维度进行配置权限控制,管理员拥有全部项目权限,普通用户只有分配才拥有项目下配置的查看和管理权限;
  • 23、历史版本回滚:记录配置变更历史,方便历史配置版本回溯,默认记录10个历史版本;
  • 24、配置快照:客户端从配置中心获取到的配置数据后,会周期性缓存到本地快照文件中,当从配置中心获取配置失败时,将会使用使用本地快照文件中的配置数据;提高系统可用性;
  • 25、访问令牌(accessToken):为提升系统安全性,配置中心和客户端进行安全性校验,双方AccessToken匹配才允许通讯;

Development

于2015年,我在github上创建XXL-CONF项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计……

至今,XXL-CONF已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和核心中间件配置动态化等,截止2018-03-15为止,XXL-CONF已接入的公司包括不限于:

- 1、深圳市绽放工场科技有限公司
- 2、深圳双猴科技有限公司
- 3、商智神州软件有限公司
- 4、浙江力太科技
- ……

更多接入的公司,欢迎在 登记地址 登记,登记仅仅为了产品推广。

欢迎大家的关注和使用,XXL-CONF也将拥抱变化,持续发展。

Contributing

Contributions are welcome! Open a pull request to fix a bug, or open an Issue to discuss a new feature or change.

欢迎参与项目贡献!比如提交PR修复一个bug,或者新建 Issue 讨论新特性或者变更。

Copyright and License

This product is open source and free, and will continue to provide free community technical support. Individual or enterprise users are free to access and use.

  • Licensed under the GNU General Public License (GPL) v3.
  • Copyright (c) 2015-present, xuxueli.

产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。

Donate

No matter how much the donation amount is enough to express your thought, thank you very much :) To donate

无论捐赠金额多少都足够表达您这份心意,非常感谢 :) 前往捐赠

xxl-conf's People

Contributors

aooppo avatar ciphermagic avatar haifeiwu avatar happyrobert avatar lxf-newbanker avatar os-java avatar xuxueli 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

xxl-conf's Issues

建议追加LDAP功能

一般来说,用户管理是公司内部使用的。
建议可以接入LDAP或SSO,以便和公司内部的账号认证打通。

@XxlConf 没生效

在下面的情况下注解没有获取到值:

@Component  
@ServerEndpoint("/socket")   
public class Server {
   private Logger logger = LoggerFactory.getLogger(Server.class);
   @XxlConf("cztech.port")
   public String port;
   @OnOpen
   public void onOpen(Session session){
       logger.info("port 为"+port);
       logger.info ("client is "+ XxlConfClient.get("cztech.port"));
       logger.info("有连接建立");
   }
}

输出的日志如下:
image
在这个场景中又是可以获取到的:

@RestController
public class HelloController {
    @XxlConf("cztech.name")
    public String name;
    @XxlConf("cztech.port")
    private String port;
    @GetMapping("/hello")
    public String hello(){
        return "hello"+name+port;
    }
}

1.4.x能否平滑升级到1.5.x

此问题同:#54

您好,目前我们公司已使用的xxl-conf-core版本为1.4.0(只用了xxl-conf-core,没有用其他模块),
在1.4.0版本,可以自定义根节点,项目已经全面上线。而现在1.5.x版本、项目1.4.2分支,都把根节点限制死为"/xxl-conf"(private static final String zkBasePath = "/xxl-conf")

对于这种需求,如何平滑升级到1.5.x呢?
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-conf-core</artifactId> <version>1.4.0</version> </dependency>

因为项目已经上线,并且调用方还是比较多的,无法让所有用到xxl-conf-core的部门同时发版。
所以,我也有同样的疑问。

Originally posted by @liuxianfa520 in #54 (comment)

申请加入xxl-conf项目协作开发

徐雪里大佬好:
最近公司正在使用xxl-conf项目做配置中心,
对比过现有较流行的阿波罗, diamond,super-diamond.
最终选择了xxl-conf
理由是xxl-conf的轻量级,易扩展且核心功能较为完善等优秀的特性,
非常希望能加入项目一起为xxl-conf贡献一份自己的绵薄之力.希望能够批准

xml配置失效

经过测试,发现在Spring xml中对bean进行表达式注入没有问题,例如:

<bean class="com.xxx.SearchConfig">
        <property name="appid" value="$XxlConf{default.dubbo.registry.address}"/>
</bean>

但是在注入自定义xml表达式发现问题:

 <dubbo:registry address="$XxlConf{default.dubbo.registry.address}" session="30000"
                    timeout="30000"/>

关于乱码问题

添加到数据库的值,出现中文乱码情况,应该如何解决。

你好,怎么落地成文件形式?

你好,我们的项目有python和java, 那如果像把xxl-conf里面配置的参数落地成文件怎么做? 通过请求api,重新渲染成文件?

不支持整个配置文件?

初步搭建学习,发现与disconf有一定的区别,不支持整个配置文件,只是键值对数据获取,是不是有点低效呢?

在SpringCloud项目中,怎么配置数据库和其他配置属性?

RT,现在微服务中,需要对不同的环境进行测试和打包.
我是用application.properties 配合maven+spring.profiles.active来实现生产和测试的打包.
现在想引入线上配置文件,spring cloud config 不太灵活,我在研究你的xxl-conf-sample-springboot中,有一点困惑, 像数据库的配置文件 spring.datasource.url=XXX 都是写在配置文件中.,不太了解怎么用xxl-xonf来替换现有的配置文件.

How to resolve zookeeper miss events?

我最近才开始接触zookeeper,项目上使用过程中因网络问题或多个服务访问同一个节点等原因.监听节点总是会有丢失.导致同步到数据库失败.请问这种情况应该怎么避免或优化呢?谢谢指教.

In the process of development, because of network delay, sometimes there will be no monitoring of znodes, how to avoid or optimize this situation?

程序异常

不管是maven变异,还是docker,均出现相同的问题,连接数据库失败:
环境:xxl-conf:1.5.0
mysql:mariadb10.3
zookeeper:win10单机环境

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
### The error may exist in class path resource [mybatis-mapper/XxlConfEnvMapper.xml]
### The error may involve com.xxl.conf.admin.dao.XxlConfEnvDao.findAll
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

xml配置失效 @XxlConf 失效

<bean id="ds" class="com.zaxxer.hikari.HikariConfig">
	<property name="username" value="$XxlConf{default.username}" />
</bean>
	@XxlConf("default.password")
	private String pwd;

以上两种都不可用,只有XxlConfClient.get 好使.

Caused by: java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, $XxlConf{ge-erp.jdbc.url}
at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:106)
at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:332)
at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:107)

路径遍历漏洞

您好:
我是360代码卫士团队的工作人员,在我们的开源项目代码检测过程中发现xxl-conf存在路径遍历漏洞导致可以通过../来读取任意配置文件,详情如下:
在ConfController.java文件 的第150行处,可以看到程序通过@RequestParam(name = "keys", required = false) List keys 接收了请求中的参数keys,而该参数是受用户控制的。
default
最后该参数经过拼凑后传入PropUtil.java文件中的loadFileProp方法中,并在第66行处用于指定new File()的参数,恶意攻击者可以通过构造带有../的keys参数来进行路径遍历读取任意properities文件

default

分组名如何指定

目前注解只能显示固定指定分组名,代码上是否可支持配置文件指定分组名groupName来读取对应的配置。

需求:不同分组对应不同环境

字段类型似乎只支持字符串,希望支持其他基础数据类型

建议

1.希望兼容 xxl-conf.propertie或者xxl-conf.yml 的配置形式;
2.建议xxl-conf.propertie 的配置改为类似xxl-job 配置文件的读取形式application.properties ,以便适用多环境配置时候比如application-dev.yml,application-test.yum ,采用xxl-conf.propertie 的里面的zookeeper 配置不能适用多环配置;
3、建议增加针对动态日志配置的专项功能,具体到包日志级别
public static void testLog(String key, String level){
LoggerContext loggerContext= (LoggerContext) LoggerFactory.getILoggerFactory();
if (!StringUtils.isEmpty(key)) {
//设置某个类日志级别-可以实现定向日志级别调整
ch.qos.logback.classic.Logger vLogger = loggerContext.getLogger(key);
if (vLogger!=null) {
vLogger.setLevel(Level.toLevel(level2));
}
}
}

项目报错:com.xxl.conf.core.exception.XxlConfException: XxlZkClient.zooKeeper is null.

-项目刚启动时, 立即 访问【管理配置模块】会报错,过一段时间后(比如5~10秒)控制台不会再报错。

-原因:new出ZooKeeper实例时只是建立了与服务端之间的会话,此时TCP连接可能还未建立完成,如果这时发出ZooKeeper操作命令的确会出现连接丢失异常,虽然这种概率相对较小。
但是,我们是在项目启动过程中,去读取配置中心的配置用于项目的初始化,此时使用XxlConfClient#get(java.lang.String),就会报错。数据源、日志级别都放到了配置中心

-参考:Zookeeper异常ConnectionLossException解决

-详细报错信息:
xxl-conf-admin 2018-03-27 18:57:01 [com.xxl.conf.core.util.XxlZkClient]-[catalina-Executor-lxf-4]-[getPathData]-[214]-[ERROR] XxlZkClient.zooKeeper is null. com.xxl.conf.core.exception.XxlConfException: XxlZkClient.zooKeeper is null. at com.xxl.conf.core.util.XxlZkClient.getClient(XxlZkClient.java:103) at com.xxl.conf.core.util.XxlZkClient.getPathData(XxlZkClient.java:203) at com.xxl.conf.admin.service.impl.XxlConfManager.get(XxlConfManager.java:92) at com.xxl.conf.admin.service.impl.XxlConfNodeServiceImpl.pageList(XxlConfNodeServiceImpl.java:60) at com.xxl.conf.admin.controller.ConfController.pageList(ConfController.java:65) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)

是否支持项目公共配置配置一次

公共配置可能会被多个项目引用,比如mq的配置信息,在这种情况下是否可以将配置抽取成一个公共配置,哪一个项目要用,直接关联改配置即可?当项目有同名配置时,项目的配置覆盖公共配置。

XXL-CONF客户端不支持灵活配置项目名称appName

配置信息在zk上的存储结构为:所有配置信息均会被放置在/xxl-conf节点下,子节点根据环境/项目.KEY生成。如环境为test,项目appName为timer,KEY为spring.datasource.mysql.url的配置信息,在zk上的存储结构为/xxl-conf/test/timer.spring.datasource.mysql.url。

当客户端程序接入配置中心时,需要在@XxlConf注解中指明value=timer.spring.datasource.mysql.url。但是如果项目名称改变,比如由timer编程了timertwo,需要客户端程序修改代码中的value=timertwo.spring.datasource.mysql.url。我希望通过客户端程序在配置文件中配置一个xxl.conf.appName=timertwo. ,value= @XxlConf(value="spring.datasource.mysql.url",defaultValue="")。

本人自己通过修改源码中的XxlConfFactory类,增加private String appName属性,修改postProcessAfterInstantiation方法,将String confKey = xxlConf.value()修改为String confKey = appName + xxlConf.value(); 使用时通过注入@value("${xxl.conf.appName}") private String appName;
XxlConfFactory xxlConf = new XxlConfFactory();
xxlConf.setZkaddress(zkaddress);
xxlConf.setZkdigest(zkdigest);
xxlConf.setEnv(env);
xxlConf.setMirrorfile(mirrorfile);
xxlConf.setAppName(appName);
完成了appName可灵活配置。

但由于不想今后升级到新版本时又需要修改源码,在此提出希望作者加入appName可灵活配置的功能。

1.5.0版本xxl-conf-admin中文编辑乱码问题

1.4升级到1.5.0后发现编辑中文配置出现乱码,
经查是application.properties问题:
spring.datasource.url=jdbc:mysql://${mysqladdress:127.0.0.1:3306}/xxl-conf?Unicode=true&amp;characterEncoding=UTF-8

"&amp;" 换成 & 即可。

Spring Boot 如何结合

是否支持Spring Boot?现在项目都是Spring Boot,不通过properties文件,后期有没有结合的方案?

权限未按环境进行细分

线上环境的配置一般只有项目管理人员或者项目经理才有权限,一般开发人员不需要对线上环境的配置信息进行修改的权限,权限管理需要细分到环境+项目维度

客户端能否支持其他缓存?

项目已经有缓存组件,不想再引入一个,能否支持常用的redis或者不使用缓存, 存为本地配置文件,因为大部分配置文件频繁修改的情况不多见

http方式获取数据

小组以python工具为主,而且java不会看,请问xxl-conf有没有http方式获取配置呢?

更新到1.5.0 zkBasePath问题

你好,初步接触这个,我发现1.5.0版本之后XxlConfZkConf中的zkBasePathstatic final的了,值固定为/xxl-conf,之前版本可以自己配置,请问是出于什么考虑的,如果我们的项目从1.4.0升级到1.5.0,节点路径这块应该会有问题吧,需要怎么处理呢

针对一次性加载配置,值更新问题

看到文档说类似数据库连接,第一次加载后,值发生变化,不能自动更新。是否可以考虑使用context的refresh,刷新配置?
XmlWebApplicationContext context =
(XmlWebApplicationContext)WebApplicationContextUtils
.getWebApplicationContext(request.getServletContext());
context.refresh();

springcloud启动配置

1、现在是否支持springcloud的配置放入xxlconf,比如数据库配置,hystrix的超时时间,网关的路由等
2、有些公共的配置可能多个项目共享,比如redis的地址,mq的地址等,这个要怎么配置

xxl-conf.properties 加载缺陷

目前的加载属性文件,只能讲xxl-conf.properties放到classpath目录下,无法支持讲xxl-conf.properties放到磁盘上;这种方式加载资源文件在发布不同版本时不够灵活。

配置文件有误,已定位问题,作者进来看下更新下

xxl-conf\xxl-conf-admin\src\main\resources\springapplicationcontext-database.xml

错误的:







classpath*:xxl-config.properties



正确的:







classpath*:xxl-conf.properties


原因:
配置文件名字是 xxl-conf\xxl-conf-admin\src\main\resources\xxl-conf.properties

建议贴一下数据库表

建议贴一下数据库表,手动建数据后,提示“您没有该项目的配置权限,请联系管理员开通”,权限已经是管理员了

并发获取zkclient失败

如果并发获取zkclient实例的时候,出现异常,虽然最前边有加锁的实现,但是没有获取锁的线程会直接报错的。需要细化锁的实现,例如:获取锁、持有锁的时间都需要设置的。

xxl-conf-admin模块建议

建议在xxl-conf-admin模块启动时,增加一个启动类,将mysql中xxl_conf_node表中的数据进行一次初始化,保证数据同步。如:有可能出现,mysql中的数据和zk数据不一致的情况。我在自己测试时就先在mysql存了几条数据,但是当把zk服务启动后,只会去ehcache中取数据进行重新加载到zk。只有在增删改查操作时才对zk和chcache进行更新或缓存。

登陆经常报错

每天登陆第一次经常报错,报错信息如下(Could not retrieve transation read-only status server) ,我的mysql是读写的。能正常添加数据,不应该read only ,再次刷新可以正常进入conf页面

org.springframework.dao.TransientDataAccessResourceException:

Error querying database. Cause: java.sql.SQLException: Could not retrieve transation read-only status server

The error may exist in file [/apps/webapps/deploy/ROOT/WEB-INF/classes/mybatis-mapper/XxlConfGroupMapper.xml]

The error may involve XxlConfGroupMapper.findAll-Inline

The error occurred while setting parameters

SQL: SELECT t.group_name, t.group_title FROM XXL_CONF_GROUP AS t ORDER BY t.group_name

Cause: java.sql.SQLException: Could not retrieve transation read-only status server

; SQL []; Could not retrieve transation read-only status server; nested exception is java.sql.SQLException: Could not retrieve transation read-only status server

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.