目录
3.添加GCP Cloud sql postgresql依赖
前言
xxl-conf是一个配置中心,具体请参考作者的博客:
一、xxl-conf是什么?
1.概述
XXL-CONF 是一个轻量级分布式配置管理平台,拥有"轻量级、秒级动态推送、多环境、跨语言、跨机房、配置监听、权限控制、版本回滚"等特性。现已开放源代码,开箱即用。
2.特性
- 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匹配才允许通讯;
二、集成步骤
1.下载代码到本地
2.去掉mysql依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
3.添加GCP Cloud sql postgresql依赖
因为作者的源代码的springboot版本是1.5.8,所以必须使用以下版本,要不然会报错。(踩过坑)
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-sql-postgresql</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
4.添加基础表
CREATE TABLE if not EXISTS "xxl_conf_env" (
"env" varchar(100) NOT NULL primary key ,--COMMENT 'Env',
"title" varchar(100) NOT NULL ,-- COMMENT '环境名称',
"order" smallint NOT NULL DEFAULT '0' -- COMMENT '显示排序',
);
COMMENT ON COLUMN "xxl_conf_env"."env" IS 'Env';
COMMENT ON COLUMN "xxl_conf_env"."title" IS '环境名称';
COMMENT ON COLUMN "xxl_conf_env"."order" IS '显示排序';
CREATE TABLE if not EXISTS "xxl_conf_project" (
"appname" varchar(100) NOT NULL primary key ,-- COMMENT 'AppName',
"title" varchar(100) NOT NULL -- COMMENT '项目名称'
);
COMMENT ON COLUMN "xxl_conf_project"."appname" IS 'AppName';
COMMENT ON COLUMN "xxl_conf_project"."title" IS '项目名称';
CREATE TABLE if not exists "xxl_conf_user" (
"username" varchar(100) NOT NULL primary key ,--COMMENT '账号',
"password" varchar(100) NOT NULL ,-- COMMENT '密码',
"permission" smallint NOT NULL DEFAULT '0' ,--COMMENT '权限:0-普通用户、1-管理员',
"permission_data" varchar(1000) DEFAULT NULL -- COMMENT '权限配置数据',
) ;
COMMENT ON COLUMN "xxl_conf_user"."username" IS '账号';
COMMENT ON COLUMN "xxl_conf_user"."password" IS '密码';
COMMENT ON COLUMN "xxl_conf_user"."permission" IS '权限:0-普通用户、1-管理员';
COMMENT ON COLUMN "xxl_conf_user"."permission_data" IS '权限配置数据';
CREATE TABLE if not exists "xxl_conf_node" (
"env" varchar(100) NOT NULL ,-- COMMENT 'Env',
"key" varchar(200) NOT NULL ,-- COMMENT '配置Key',
"appname" varchar(100) NOT NULL ,--COMMENT '所属项目AppName',
"title" varchar(100) NOT NULL,-- COMMENT '配置描述',
"value" varchar(2000) DEFAULT NULL ,-- COMMENT '配置Value',
PRIMARY KEY ("env","key")
) ;
COMMENT ON COLUMN "xxl_conf_node"."env" IS 'Env';
COMMENT ON COLUMN "xxl_conf_node"."key" IS '配置key';
COMMENT ON COLUMN "xxl_conf_node"."appname" IS '所属AppName';
COMMENT ON COLUMN "xxl_conf_node"."title" IS '配置描述';
COMMENT ON COLUMN "xxl_conf_node"."value" IS '配置value';
CREATE TABLE if not exists "xxl_conf_node_log" (
"env" varchar(255) NOT NULL ,-- COMMENT 'Env',
"key" varchar(200) NOT NULL ,-- COMMENT '配置Key',
"title" varchar(100) NOT NULL,-- COMMENT '配置描述',
"value" varchar(2000) DEFAULT NULL ,-- COMMENT '配置Value',
"addtime" timestamp (0) without time zone NOT NULL ,-- COMMENT '操作时间',
"optuser" varchar(100) NOT NULL -- COMMENT '操作人'
) ;
COMMENT ON COLUMN "xxl_conf_node_log"."env" IS 'Env';
COMMENT ON COLUMN "xxl_conf_node_log"."key" IS '配置key';
COMMENT ON COLUMN "xxl_conf_node_log"."title" IS '配置描述';
COMMENT ON COLUMN "xxl_conf_node_log"."value" IS '配置value';
COMMENT ON COLUMN "xxl_conf_node_log"."addtime" IS '操作时间';
COMMENT ON COLUMN "xxl_conf_node_log"."optuser" IS '操作人';
CREATE TABLE if not exists "xxl_conf_node_msg" (
"id" serial primary key,
"addtime" timestamp (0) without time zone NOT NULL,
"env" varchar(100) NOT NULL,-- COMMENT 'Env',
"key" varchar(200) NOT NULL ,-- COMMENT '配置Key',
"value" varchar(2000) DEFAULT NULL -- COMMENT '配置Value'
);
COMMENT ON COLUMN "xxl_conf_node_msg"."env" IS 'Env';
COMMENT ON COLUMN "xxl_conf_node_msg"."key" IS '配置key';
COMMENT ON COLUMN "xxl_conf_node_msg"."value" IS '配置value';
COMMENT ON COLUMN "xxl_conf_node_msg"."addtime" IS '操作时间';
5.添加xxl-conf初始数据
INSERT INTO "xxl_conf_env" VALUES ('test', '测试环境', 1), ('ppe', '预发布环境', 2), ('product', '生产环境', 3);
INSERT INTO "xxl_conf_project" VALUES ('default', '示例项目');
INSERT INTO "xxl_conf_user" VALUES ('admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL), ('user', 'e10adc3949ba59abbe56e057f20f883e', 0, 'default#test,default#ppe');
INSERT INTO "xxl_conf_node" VALUES ('test', 'default.key01', 'default', '测试配置01', '1'), ('test', 'default.key02', 'default', '测试配置02', '2'), ('test', 'default.key03', 'default', '测试配置03', '3');
6.通过代理方式配置postgresql连接
spring.datasource.username=***
spring.datasource.password=***
spring.cloud.gcp.project-id=***
spring.cloud.gcp.credentials.encoded-key=***
spring.cloud.gcp.sql.credentials.encoded-key=***
spring.cloud.gcp.sql.enabled=true
spring.cloud.gcp.sql.database-name=***
spring.cloud.gcp.sql.instance-connection-name=***
spring.datasource.driver-class-name=org.postgresql.Driver
7.更改配置存放地址
xxl.conf.confdata.filepath=confdata
8.更改日志存放地址
9.更改Dockfilejdk版本,改成jdk11
FROM openjdk:11-jre-slim
MAINTAINER xuxueli
ENV PARAMS=""
ADD target/xxl-conf-admin-*.jar /app.jar
#ENTRYPOINT ["java", "-jar", "$PARAMS /app.jar"]
ENTRYPOINT ["sh","-c","java -jar /app.jar"]
三、启动后效果
我改成了英文版本的
xxl-conf-core以及xxl-conf-admin的发布配置完成
下一篇讲解将改造后的xxl-conf部署在gcp cloud run平台