rBlockingQueue);
+
+ /**
+ * 自增 Key 的值;1、2、3、4
+ *
+ * @param key 键
+ * @return 自增后的值
+ */
+ long incr(String key);
+
+ /**
+ * 指定值,自增 Key 的值;1、2、3、4
+ *
+ * @param key 键
+ * @return 自增后的值
+ */
+ long incrBy(String key, long delta);
+
+ /**
+ * 自减 Key 的值;1、2、3、4
+ *
+ * @param key 键
+ * @return 自增后的值
+ */
+ long decr(String key);
+
+ /**
+ * 指定值,自增 Key 的值;1、2、3、4
+ *
+ * @param key 键
+ * @return 自增后的值
+ */
+ long decrBy(String key, long delta);
+
+
+ /**
+ * 移除指定 key 的值
+ *
+ * @param key 键
+ */
+ void remove(String key);
+
+ /**
+ * 判断指定 key 的值是否存在
+ *
+ * @param key 键
+ * @return true/false
+ */
+ boolean isExists(String key);
+
+ /**
+ * 将指定的值添加到集合中
+ *
+ * @param key 键
+ * @param value 值
+ */
+ void addToSet(String key, String value);
+
+ /**
+ * 判断指定的值是否是集合的成员
+ *
+ * @param key 键
+ * @param value 值
+ * @return 如果是集合的成员返回 true,否则返回 false
+ */
+ boolean isSetMember(String key, String value);
+
+ /**
+ * 将指定的值添加到列表中
+ *
+ * @param key 键
+ * @param value 值
+ */
+ void addToList(String key, String value);
+
+ /**
+ * 获取列表中指定索引的值
+ *
+ * @param key 键
+ * @param index 索引
+ * @return 值
+ */
+ String getFromList(String key, int index);
+
+ /**
+ * 将指定的键值对添加到哈希表中
+ *
+ * @param key 键
+ * @param field 字段
+ * @param value 值
+ */
+ void addToMap(String key, String field, String value);
+
+ /**
+ * 获取哈希表中指定字段的值
+ *
+ * @param key 键
+ * @param field 字段
+ * @return 值
+ */
+ String getFromMap(String key, String field);
+
+ /**
+ * 将指定的值添加到有序集合中
+ *
+ * @param key 键
+ * @param value 值
+ */
+ void addToSortedSet(String key, String value);
+
+ /**
+ * 获取 Redis 锁(可重入锁)
+ *
+ * @param key 键
+ * @return Lock
+ */
+ RLock getLock(String key);
+
+ /**
+ * 获取 Redis 锁(公平锁)
+ *
+ * @param key 键
+ * @return Lock
+ */
+ RLock getFairLock(String key);
+
+ /**
+ * 获取 Redis 锁(读写锁)
+ *
+ * @param key 键
+ * @return RReadWriteLock
+ */
+ RReadWriteLock getReadWriteLock(String key);
+
+ /**
+ * 获取 Redis 信号量
+ *
+ * @param key 键
+ * @return RSemaphore
+ */
+ RSemaphore getSemaphore(String key);
+
+ /**
+ * 获取 Redis 过期信号量
+ *
+ * 基于Redis的Redisson的分布式信号量(Semaphore)Java对象RSemaphore采用了与java.util.concurrent.Semaphore相似的接口和用法。
+ * 同时还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。
+ *
+ * @param key 键
+ * @return RPermitExpirableSemaphore
+ */
+ RPermitExpirableSemaphore getPermitExpirableSemaphore(String key);
+
+ /**
+ * 闭锁
+ *
+ * @param key 键
+ * @return RCountDownLatch
+ */
+ RCountDownLatch getCountDownLatch(String key);
+
+ /**
+ * 布隆过滤器
+ *
+ * @param key 键
+ * @param 存放对象
+ * @return 返回结果
+ */
+ RBloomFilter getBloomFilter(String key);
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-infrastructure/src/main/java/infrastructure/redis/RedissonService.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-infrastructure/src/main/java/infrastructure/redis/RedissonService.java
new file mode 100644
index 0000000..b410455
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-infrastructure/src/main/java/infrastructure/redis/RedissonService.java
@@ -0,0 +1,152 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.infrastructure.redis;
+
+import org.redisson.api.*;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.Duration;
+
+/**
+ * Redis 服务 - Redisson
+ * @author Fuzhengwei bugstack.cn @小傅哥
+ */
+@Service("redissonService")
+public class RedissonService implements IRedisService {
+
+ @Resource
+ private RedissonClient redissonClient;
+
+ public void setValue(String key, T value) {
+ redissonClient.getBucket(key).set(value);
+ }
+
+ @Override
+ public void setValue(String key, T value, long expired) {
+ RBucket bucket = redissonClient.getBucket(key);
+ bucket.set(value, Duration.ofMillis(expired));
+ }
+
+ public T getValue(String key) {
+ return redissonClient.getBucket(key).get();
+ }
+
+ @Override
+ public RQueue getQueue(String key) {
+ return redissonClient.getQueue(key);
+ }
+
+ @Override
+ public RBlockingQueue getBlockingQueue(String key) {
+ return redissonClient.getBlockingQueue(key);
+ }
+
+ @Override
+ public RDelayedQueue getDelayedQueue(RBlockingQueue rBlockingQueue) {
+ return redissonClient.getDelayedQueue(rBlockingQueue);
+ }
+
+ @Override
+ public long incr(String key) {
+ return redissonClient.getAtomicLong(key).incrementAndGet();
+ }
+
+ @Override
+ public long incrBy(String key, long delta) {
+ return redissonClient.getAtomicLong(key).addAndGet(delta);
+ }
+
+ @Override
+ public long decr(String key) {
+ return redissonClient.getAtomicLong(key).decrementAndGet();
+ }
+
+ @Override
+ public long decrBy(String key, long delta) {
+ return redissonClient.getAtomicLong(key).addAndGet(-delta);
+ }
+
+ @Override
+ public void remove(String key) {
+ redissonClient.getBucket(key).delete();
+ }
+
+ @Override
+ public boolean isExists(String key) {
+ return redissonClient.getBucket(key).isExists();
+ }
+
+ public void addToSet(String key, String value) {
+ RSet set = redissonClient.getSet(key);
+ set.add(value);
+ }
+
+ public boolean isSetMember(String key, String value) {
+ RSet set = redissonClient.getSet(key);
+ return set.contains(value);
+ }
+
+ public void addToList(String key, String value) {
+ RList list = redissonClient.getList(key);
+ list.add(value);
+ }
+
+ public String getFromList(String key, int index) {
+ RList list = redissonClient.getList(key);
+ return list.get(index);
+ }
+
+ public void addToMap(String key, String field, String value) {
+ RMap map = redissonClient.getMap(key);
+ map.put(field, value);
+ }
+
+ public String getFromMap(String key, String field) {
+ RMap map = redissonClient.getMap(key);
+ return map.get(field);
+ }
+
+ public void addToSortedSet(String key, String value) {
+ RSortedSet sortedSet = redissonClient.getSortedSet(key);
+ sortedSet.add(value);
+ }
+
+ @Override
+ public RLock getLock(String key) {
+ return redissonClient.getLock(key);
+ }
+
+ @Override
+ public RLock getFairLock(String key) {
+ return redissonClient.getFairLock(key);
+ }
+
+ @Override
+ public RReadWriteLock getReadWriteLock(String key) {
+ return redissonClient.getReadWriteLock(key);
+ }
+
+ @Override
+ public RSemaphore getSemaphore(String key) {
+ return redissonClient.getSemaphore(key);
+ }
+
+ @Override
+ public RPermitExpirableSemaphore getPermitExpirableSemaphore(String key) {
+ return redissonClient.getPermitExpirableSemaphore(key);
+ }
+
+ @Override
+ public RCountDownLatch getCountDownLatch(String key) {
+ return redissonClient.getCountDownLatch(key);
+ }
+
+ @Override
+ public RBloomFilter getBloomFilter(String key) {
+ return redissonClient.getBloomFilter(key);
+ }
+
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/pom.xml b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/pom.xml
new file mode 100644
index 0000000..b3d4c8e
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/pom.xml
@@ -0,0 +1,83 @@
+
+
+ 4.0.0
+
+ ${groupId}
+ ${rootArtifactId}
+ ${version}
+
+
+ ${artifactId}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.alibaba
+ fastjson
+
+
+ org.springframework
+ spring-tx
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.apache.dubbo
+ dubbo
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+
+
+ com.xuxueli
+ xxl-job-core
+
+
+ org.apache.rocketmq
+ rocketmq-client-java
+
+
+ org.apache.rocketmq
+ rocketmq-spring-boot-starter
+
+
+
+
+ ${groupId}
+ ${rootArtifactId}-types
+
+
+ ${groupId}
+ ${rootArtifactId}-domain
+
+
+ ${groupId}
+ ${rootArtifactId}-api
+
+
+
+
+ ${rootArtifactId}-trigger
+
+
+ org.apache.maven.plugins
+ maven-archetype-plugin
+ 3.2.0
+
+
+
+ create-from-project
+
+
+
+
+
+
+
+
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/http/Controller.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/http/Controller.java
new file mode 100644
index 0000000..a4c9155
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/http/Controller.java
@@ -0,0 +1,47 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.xfg.frame.trigger.http;
+
+import ${package}.types.common.Constants;
+import ${package}.types.model.Response;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Random;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Slf4j
+@RestController
+public class Controller {
+
+ @Resource
+ private ThreadPoolExecutor threadPoolExecutor;
+
+ /**
+ * http://localhost:8090/success
+ */
+ @RequestMapping("/success")
+ public Response success() {
+ log.info("测试调用");
+ try {
+ // 随机休眠
+ Thread.sleep(new Random().nextInt(1000));
+ // 开启线程
+ threadPoolExecutor.execute(() -> {
+ log.info("开启线程");
+ });
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ if (new Random().nextInt(100) == 1) throw new RuntimeException("异常");
+ return Response.builder()
+ .code(Constants.ResponseCode.SUCCESS.getCode())
+ .info(Constants.ResponseCode.SUCCESS.getInfo())
+ .data("查询用户信息,小傅哥")
+ .build();
+ }
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/job/XXLJob.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/job/XXLJob.java
new file mode 100644
index 0000000..69ca48b
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/job/XXLJob.java
@@ -0,0 +1,31 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.trigger.job;
+
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * XXL-Job
+ */
+@Slf4j
+@Component
+public class XXLJob {
+
+ @Setter(onMethod_ = @Autowired)
+ private RocketMQTemplate rocketmqTemplate;
+
+ @XxlJob("demoJobHandler")
+ public void doJob() {
+ // 可以在任务中,调用一些业务方法逻辑的实现,如定时扫描超时未支付订单为关单处理,恢复库存
+ log.info("执行任务 - XXL-Job - 01 发送一条MQ消息");
+ // 发送MQ消息
+ rocketmqTemplate.convertAndSend("xfg-mq", "我是测试消息");
+ }
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/listener/MQListener.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/listener/MQListener.java
new file mode 100644
index 0000000..2848111
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/listener/MQListener.java
@@ -0,0 +1,25 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.trigger.listener;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * RocketMQ 接收消息
+ * @author Fuzhengwei bugstack.cn @小傅哥
+ */
+@Component
+@Slf4j
+@RocketMQMessageListener(topic = "xfg-mq", consumerGroup = "xfg-group")
+public class MQListener implements RocketMQListener {
+
+ @Override
+ public void onMessage(String s) {
+ log.info("接收到RocketMQ消息 {}", s);
+ }
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/package-info.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/package-info.java
new file mode 100644
index 0000000..9f8bc61
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/package-info.java
@@ -0,0 +1,10 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/**
+ * http 提供服务
+ * job xxl-job 任务调度
+ * listener RocketMQ 监听
+ * rpc Dubbo 接口,实现RPC服务
+ */
+package ${package}.trigger;
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/rpc/UserService.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/rpc/UserService.java
new file mode 100644
index 0000000..eb65033
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-trigger/src/main/java/trigger/rpc/UserService.java
@@ -0,0 +1,19 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.trigger.rpc;
+
+import ${package}.api.IUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+
+@Slf4j
+@DubboService(version = "1.0.0", timeout = 450)
+public class UserService implements IUserService {
+
+ @Override
+ public String queryUserInfo(String req) {
+ return "查询用户信息";
+ }
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/pom.xml b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/pom.xml
new file mode 100644
index 0000000..a11d72e
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/pom.xml
@@ -0,0 +1,53 @@
+
+
+ 4.0.0
+
+ ${groupId}
+ ${rootArtifactId}
+ ${version}
+
+
+ ${artifactId}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.projectlombok
+ lombok
+
+
+ com.thoughtworks.xstream
+ xstream
+
+
+ dom4j
+ dom4j
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+
+ ${rootArtifactId}-types
+
+
+ org.apache.maven.plugins
+ maven-archetype-plugin
+ 3.2.0
+
+
+
+ create-from-project
+
+
+
+
+
+
+
+
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/common/Constants.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/common/Constants.java
new file mode 100644
index 0000000..9dfdca5
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/common/Constants.java
@@ -0,0 +1,29 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.types.common;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+public class Constants {
+
+ public final static String SPLIT = ",";
+
+ @AllArgsConstructor
+ @NoArgsConstructor
+ @Getter
+ public enum ResponseCode {
+
+ SUCCESS("0000", "成功"),
+ UN_ERROR("0001", "未知失败"),
+ ILLEGAL_PARAMETER("0002", "非法参数"),
+ ;
+
+ private String code;
+ private String info;
+
+ }
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/exception/AppException.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/exception/AppException.java
new file mode 100644
index 0000000..e202cae
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/exception/AppException.java
@@ -0,0 +1,49 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.types.exception;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class AppException extends RuntimeException {
+
+ private static final long serialVersionUID = 5317680961212299217L;
+
+ /** 异常码 */
+ private String code;
+
+ /** 异常信息 */
+ private String info;
+
+ public AppException(String code) {
+ this.code = code;
+ }
+
+ public AppException(String code, Throwable cause) {
+ this.code = code;
+ super.initCause(cause);
+ }
+
+ public AppException(String code, String message) {
+ this.code = code;
+ this.info = message;
+ }
+
+ public AppException(String code, String message, Throwable cause) {
+ this.code = code;
+ this.info = message;
+ super.initCause(cause);
+ }
+
+ @Override
+ public String toString() {
+ return "${package}.x.api.types.exception.XApiException{" +
+ "code='" + code + '${symbol_escape}'' +
+ ", info='" + info + '${symbol_escape}'' +
+ '}';
+ }
+
+}
diff --git a/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/model/Response.java b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/model/Response.java
new file mode 100644
index 0000000..e10dbba
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/__rootArtifactId__-types/src/main/java/types/model/Response.java
@@ -0,0 +1,25 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package}.types.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Response implements Serializable {
+
+ private static final long serialVersionUID = 5130392244064623509L;
+
+ private String code;
+ private String info;
+ private T data;
+
+}
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/docker-compose-1.0.yml b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/docker-compose-1.0.yml
new file mode 100644
index 0000000..3e0fa1b
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/docker-compose-1.0.yml
@@ -0,0 +1,21 @@
+# /usr/local/bin/docker-compose -f /docs/dev-ops/environment/environment-docker-compose-2.4.yml up -d
+version: '3.8'
+# docker-compose -f docker-compose-1.0.yml up -d
+# 你需要修改system为你自身系统的仓库名
+services:
+ x-api-app:
+ image: system/${artifactId}:${version}
+ container_name: ${artifactId}
+ restart: on-failure
+ ports:
+ - "8091:8091"
+ environment:
+ - TZ=PRC
+ - SERVER_PORT=8091
+ volumes:
+ - ./log:/data/log
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "10m"
+ max-file: "3"
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/start.sh b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/start.sh
new file mode 100644
index 0000000..84b1c36
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/start.sh
@@ -0,0 +1,20 @@
+CONTAINER_NAME=${artifactId}
+IMAGE_NAME=system/${artifactId}:${version}
+PORT=8091
+
+echo "容器部署开始 ${CONTAINER_NAME}"
+
+# 停止容器
+docker stop ${CONTAINER_NAME}
+
+# 删除容器
+docker rm ${CONTAINER_NAME}
+
+# 启动容器
+docker run --name ${CONTAINER_NAME} \
+-p ${PORT}:${PORT} \
+-d ${IMAGE_NAME}
+
+echo "容器部署成功 ${CONTAINER_NAME}"
+
+docker logs -f ${CONTAINER_NAME}
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/stop.sh b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/stop.sh
new file mode 100644
index 0000000..c50d125
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/app/stop.sh
@@ -0,0 +1 @@
+docker stop ${artifactId}
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/docker-compose.yml b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/docker-compose.yml
new file mode 100644
index 0000000..d9abb40
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/docker-compose.yml
@@ -0,0 +1,174 @@
+# 命令执行 docker-compose up -d
+version: '3.9'
+# 安装开发环境
+# 配置中心nacos:http://127.0.0.1:8848/nacos - 【账号:nacos 密码:nacos】
+# 消息rocketmq:http://localhost:8080/#/ - 【账号:admin 密码:admin】
+# 任务调度xxl-job-admin:http://127.0.0.1:9090/xxl-job-admin/ - 【账号:admin 密码:123456】
+# 数据库mysql
+# 缓存redis
+services:
+ # 注册中心 https://github.com/nacos-group/nacos-docker - 其他配置可参考(集群)
+ # http://127.0.0.1:8848/nacos 【账号:nacos 密码:nacos】
+ nacos:
+ image: nacos/nacos-server:v2.2.3-slim
+ container_name: nacos
+ restart: always
+ ports:
+ - "8848:8848"
+ - "9848:9848"
+ environment:
+ - PREFER_HOST_MODE=hostname
+ - MODE=standalone
+ - SPRING_DATASOURCE_PLATFORM=mysql
+ - MYSQL_SERVICE_HOST=mysql
+ - MYSQL_SERVICE_DB_NAME=nacos_config
+ - MYSQL_SERVICE_PORT=3306
+ - MYSQL_SERVICE_USER=root
+ - MYSQL_SERVICE_PASSWORD=123456
+ - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
+ - NACOS_AUTH_IDENTITY_KEY=2222
+ - NACOS_AUTH_IDENTITY_VALUE=2xxx
+ - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
+ networks:
+ - my-network
+ depends_on:
+ mysql:
+ condition: service_healthy
+
+ # http://127.0.0.1:9090/xxl-job-admin admin/123456 - 安装后稍等会访问即可
+ # 官网镜像为 xuxueli/xxl-job-admin:2.4.0 但不支持ARM架构【需要自己打包】,所以找了一个 kuschzzp/xxl-job-aarch64:2.4.0 镜像支持 AMD/ARM
+ xxl-job-admin:
+ image: xuxueli/xxl-job-admin:2.4.0
+ container_name: xxl-job-admin
+ restart: always
+ depends_on:
+ mysql:
+ condition: service_healthy
+ ports:
+ - "9090:9090"
+ links:
+ - mysql
+ volumes:
+ - ./data/logs:/data/applogs
+ - ./data/xxl-job/:/xxl-job
+ environment:
+ - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/xxl_job?serverTimezone=UTC&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Shanghai
+ - SPRING_DATASOURCE_USERNAME=root
+ - SPRING_DATASOURCE_PASSWORD=123456
+ - SERVER_PORT=9090
+ networks:
+ - my-network
+
+ # MySQL 增加健康检测,避免
+ mysql:
+ image: mysql:8.0.32
+ container_name: mysql
+ hostname: mysql
+ command: --default-authentication-plugin=mysql_native_password
+ restart: always
+ environment:
+ TZ: Asia/Shanghai
+ MYSQL_ROOT_PASSWORD: 123456
+ MYSQL_USER: xfg
+ MYSQL_PASSWORD: 123456
+ networks:
+ - my-network
+ depends_on:
+ - mysql-job-dbdata
+ ports:
+ - "13306:3306"
+ volumes:
+ - ./sql:/docker-entrypoint-initdb.d
+ healthcheck:
+ test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
+ interval: 5s
+ timeout: 10s
+ retries: 10
+ start_period: 15s
+ deploy:
+ resources:
+ limits:
+ cpus: '1.00'
+ memory: 512M
+ volumes_from:
+ - mysql-job-dbdata
+
+ # 自动加载数据
+ mysql-job-dbdata:
+ image: alpine:3.18.2
+ container_name: mysql-job-dbdata
+ volumes:
+ - /var/lib/mysql
+
+ # phpmyadmin https://hub.docker.com/_/phpmyadmin
+ phpmyadmin:
+ image: phpmyadmin:5.2.1
+ container_name: phpmyadmin
+ hostname: phpmyadmin
+ ports:
+ - 8899:80
+ environment:
+ - PMA_ARBITRARY=1
+ - PMA_HOST=mysql
+ - PMA_PORT=3306
+ - MYSQL_ROOT_PASSWORD=123456
+ networks:
+ - my-network
+
+ # RedisAdmin https://github.com/joeferner/redis-commander
+ redis-admin:
+ image: spryker/redis-commander:0.8.0
+ container_name: redis-admin
+ hostname: redis-commander
+ restart: always
+ ports:
+ - 8081:8081
+ environment:
+ - REDIS_HOSTS=local:redis:6379
+ networks:
+ - my-network
+ depends_on:
+ redis:
+ condition: service_healthy
+
+ # Redis
+ redis:
+ image: redis:7.2.0
+ container_name: redis
+ restart: always
+ hostname: redis
+ ports:
+ - 6379:6379
+ volumes:
+ - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
+ command: redis-server /usr/local/etc/redis/redis.conf
+ networks:
+ - my-network
+ healthcheck:
+ test: [ "CMD", "redis-cli", "ping" ]
+ interval: 10s
+ timeout: 5s
+ retries: 3
+
+ # https://hub.docker.com/r/xuchengen/rocketmq
+ # 注意修改项;
+ # 01:data/rocketmq/conf/broker.conf 添加 brokerIP1=127.0.0.1
+ # 02:data/console/config/application.properties server.port=9009 - 如果8080端口被占用,可以修改或者添加映射端口
+ rocketmq:
+ image: livinphp/rocketmq:5.1.0
+ container_name: rocketmq
+ ports:
+ - 8080:8080
+ - 9876:9876
+ - 10909:10909
+ - 10911:10911
+ - 10912:10912
+ volumes:
+ - ./rocketmq/data:/home/app/data
+ environment:
+ TZ: "Asia/Shanghai"
+ NAMESRV_ADDR: "rocketmq:9876"
+
+networks:
+ my-network:
+ driver: bridge
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/redis/redis.conf b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/redis/redis.conf
new file mode 100644
index 0000000..c251d9b
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/redis/redis.conf
@@ -0,0 +1,3 @@
+bind 0.0.0.0
+port 6379
+requirepass 123456
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/create-group.sh b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/create-group.sh
new file mode 100644
index 0000000..2004b32
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/create-group.sh
@@ -0,0 +1,2 @@
+# 命令创建 消费者组 Group xfg-group 你可以更换你需要的
+docker exec -it rocketmq sh /home/app/rocketmq/bin/mqadmin updateSubGroup -n localhost:9876 -c DefaultCluster -g xfg-group
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/create-topic.sh b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/create-topic.sh
new file mode 100644
index 0000000..63393f6
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/create-topic.sh
@@ -0,0 +1,2 @@
+# 命令创建 主题消息 Topic xfg-mq 你可以更换你需要的
+docker exec -it rocketmq sh /home/app/rocketmq/bin/mqadmin updateTopic -n localhost:9876 -c DefaultCluster -t xfg-mq
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/config/application.properties b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/config/application.properties
new file mode 100644
index 0000000..0484216
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/config/application.properties
@@ -0,0 +1,57 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+${symbol_pound}
+${symbol_pound} Licensed to the Apache Software Foundation (ASF) under one or more
+${symbol_pound} contributor license agreements. See the NOTICE file distributed with
+${symbol_pound} this work for additional information regarding copyright ownership.
+${symbol_pound} The ASF licenses this file to You under the Apache License, Version 2.0
+${symbol_pound} (the "License"); you may not use this file except in compliance with
+${symbol_pound} the License. You may obtain a copy of the License at
+${symbol_pound}
+${symbol_pound} http://www.apache.org/licenses/LICENSE-2.0
+${symbol_pound}
+${symbol_pound} Unless required by applicable law or agreed to in writing, software
+${symbol_pound} distributed under the License is distributed on an "AS IS" BASIS,
+${symbol_pound} WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+${symbol_pound} See the License for the specific language governing permissions and
+${symbol_pound} limitations under the License.
+${symbol_pound}
+
+server.address=0.0.0.0
+server.port=8080
+
+${symbol_pound}${symbol_pound}${symbol_pound} SSL setting
+${symbol_pound}server.ssl.key-store=classpath:rmqcngkeystore.jks
+${symbol_pound}server.ssl.key-store-password=rocketmq
+${symbol_pound}server.ssl.keyStoreType=PKCS12
+${symbol_pound}server.ssl.keyAlias=rmqcngkey
+
+${symbol_pound}spring.application.index=true
+spring.application.name=rocketmq-dashboard
+spring.http.encoding.charset=UTF-8
+spring.http.encoding.enabled=true
+spring.http.encoding.force=true
+logging.level.root=INFO
+logging.config=./config/logback.xml
+${symbol_pound}if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
+rocketmq.config.namesrvAddr=
+${symbol_pound}if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
+rocketmq.config.isVIPChannel=
+${symbol_pound}timeout for mqadminExt, default 5000ms
+rocketmq.config.timeoutMillis=
+${symbol_pound}rocketmq-console's data path:dashboard/monitor
+rocketmq.config.dataPath=./store
+${symbol_pound}set it false if you don't want use dashboard.default true
+rocketmq.config.enableDashBoardCollect=true
+${symbol_pound}set the message track trace topic if you don't want use the default one
+rocketmq.config.msgTrackTopicName=
+rocketmq.config.ticketKey=ticket
+
+${symbol_pound}Must create userInfo file: ${symbol_dollar}{rocketmq.config.dataPath}/users.properties if the login is required
+rocketmq.config.loginRequired=true
+
+${symbol_pound}set the accessKey and secretKey if you used acl
+${symbol_pound}rocketmq.config.accessKey=
+${symbol_pound}rocketmq.config.secretKey=
+rocketmq.config.useTLS=false
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/config/logback.xml b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/config/logback.xml
new file mode 100644
index 0000000..0ccd3f7
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/config/logback.xml
@@ -0,0 +1,52 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+
+
+
+
+
+ [%d{yyyy-MM-dd HH:mm:ss.SSS}] %5p %m%n
+
+
+
+
+ ${symbol_dollar}{user.home}${symbol_dollar}{file.separator}data${symbol_dollar}{file.separator}logs${symbol_dollar}{file.separator}consolelogs${symbol_dollar}{file.separator}rocketmq-console.log
+ true
+
+ ${symbol_dollar}{user.home}${symbol_dollar}{file.separator}data${symbol_dollar}{file.separator}logs${symbol_dollar}{file.separator}consolelogs${symbol_dollar}{file.separator}rocketmq-console-%d{yyyy-MM-dd}.%i.log
+
+ 104857600
+
+ 10
+
+
+ [%d{yyyy-MM-dd HH:mm:ss.SSS}] %5p %m%n
+ UTF-8
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/dashboard2023-11-04.json b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/dashboard2023-11-04.json
new file mode 100644
index 0000000..cc9ab76
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/dashboard2023-11-04.json
@@ -0,0 +1 @@
+{"broker-a:0":["1699081019975,10.92678","1699081079957,29.70046","1699081139966,26.54158","1699081199949,25.17176","1699081259958,30.19899","1699081319958,23.90083","1699081379958,29.42203","1699081439958,26.88845","1699081499958,23.75058","1699081559958,30.02172","1699081619958,37.96032","1699081679958,41.84854","1699081739958,42.57691","1699081799958,36.82512","1699081859958,41.84120","1699081919881,41.43369","1699081979958,37.93306","1699082039957,43.53979","1699082099959,37.91108","1699082159957,41.09514","1699082224929,25.22857","1699084080001,3.79591","1699084139489,14.39676","1699085279719,16.56811","1699086292538,2.25068","1699086899956,8.76239","1699086959943,30.15414","1699087019958,25.50150","1699087079957,30.98184","1699087139959,27.19344","1699087199957,27.63796","1699087259957,31.26747","1699087319957,26.40225","1699087379981,31.67858","1699087439959,30.32723","1699087499957,38.91828","1699087559958,43.15065","1699087619958,37.67023","1699087679958,42.32411","1699087739958,40.43330","1699087799958,38.63847","1699087859958,43.49639","1699087919957,37.84353","1699087979957,42.04197","1699088039957,41.09007","1699088099958,38.12312"]}
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/dashboard2023-11-04_topic.json b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/dashboard2023-11-04_topic.json
new file mode 100644
index 0000000..741f9de
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/dashboard2023-11-04_topic.json
@@ -0,0 +1 @@
+{"DefaultCluster_REPLY_TOPIC":["1699080990000,0.00000,0,0.00000,0","1699081049952,0.00000,0,0.00000,0","1699081109958,0.00000,0,0.00000,0","1699081169957,0.00000,0,0.00000,0","1699081229958,0.00000,0,0.00000,0","1699081289958,0.00000,0,0.00000,0","1699081349958,0.00000,0,0.00000,0","1699081409957,0.00000,0,0.00000,0","1699081469959,0.00000,0,0.00000,0","1699081529957,0.00000,0,0.00000,0","1699081589957,0.00000,0,0.00000,0","1699081649957,0.00000,0,0.00000,0","1699081709960,0.00000,0,0.00000,0","1699081769958,0.00000,0,0.00000,0","1699081829956,0.00000,0,0.00000,0","1699081889886,0.00000,0,0.00000,0","1699081949957,0.00000,0,0.00000,0","1699082009957,0.00000,0,0.00000,0","1699082069960,0.00000,0,0.00000,0","1699082129957,0.00000,0,0.00000,0","1699082189955,0.00000,0,0.00000,0","1699082250222,0.00000,0,0.00000,0","1699085256224,0.00000,0,0.00000,0","1699086290774,0.00000,0,0.00000,0","1699086929664,0.00000,0,0.00000,0","1699086989922,0.00000,0,0.00000,0","1699087049957,0.00000,0,0.00000,0","1699087109957,0.00000,0,0.00000,0","1699087169957,0.00000,0,0.00000,0","1699087229958,0.00000,0,0.00000,0","1699087289957,0.00000,0,0.00000,0","1699087349973,0.00000,0,0.00000,0","1699087409965,0.00000,0,0.00000,0","1699087469959,0.00000,0,0.00000,0","1699087529958,0.00000,0,0.00000,0","1699087589957,0.00000,0,0.00000,0","1699087649957,0.00000,0,0.00000,0","1699087709958,0.00000,0,0.00000,0","1699087769958,0.00000,0,0.00000,0","1699087829957,0.00000,0,0.00000,0","1699087889958,0.00000,0,0.00000,0","1699087949958,0.00000,0,0.00000,0","1699088009956,0.00000,0,0.00000,0","1699088069959,0.00000,0,0.00000,0"],"xfg-mq":["1699081049952,0.00000,0,0.00000,0","1699081109958,0.00000,0,0.00000,0","1699081169957,0.00000,0,0.00000,0","1699081229958,0.00000,0,0.00000,0","1699081289958,0.00000,0,0.00000,0","1699081349958,0.00000,0,0.00000,0","1699081409957,0.00000,0,0.00000,0","1699081469959,0.00000,0,0.00000,0","1699081529957,0.00000,0,0.00000,0","1699081589957,0.00000,0,0.00000,0","1699081649957,0.05000,1,0.05000,1","1699081709960,0.00000,0,0.00000,0","1699081769958,0.00000,0,0.00000,0","1699081829956,0.00000,0,0.00000,0","1699081889886,0.00000,0,0.00000,0","1699081949957,0.00000,0,0.00000,0","1699082009957,0.00000,0,0.00000,0","1699082069960,0.00000,0,0.00000,0","1699082129957,0.00000,0,0.00000,0","1699082189955,0.00000,1,0.00000,1","1699082250222,0.00000,1,0.00000,1","1699085256224,0.00000,1,0.00000,1","1699086290774,0.00000,1,0.00000,1","1699086929664,0.00000,1,0.00000,1","1699086989922,0.00000,1,0.00000,1","1699087049957,0.00000,1,0.00000,1","1699087109957,0.00000,1,0.00000,1","1699087169957,0.00000,1,0.00000,1","1699087229958,0.00000,1,0.00000,1","1699087289957,0.00000,1,0.00000,1","1699087349973,0.00000,1,0.00000,1","1699087409965,0.00000,1,0.00000,1","1699087469959,0.00000,1,0.00000,1","1699087529958,0.00000,1,0.00000,1","1699087589957,0.00000,1,0.00000,1","1699087649957,0.00000,1,0.00000,1","1699087709958,0.00000,1,0.00000,1","1699087769958,0.00000,1,0.00000,1","1699087829957,0.00000,1,0.00000,1","1699087889958,0.00000,1,0.00000,1","1699087949958,0.00000,1,0.00000,1","1699088009956,0.00000,1,0.00000,1","1699088069959,0.00000,1,0.00000,1"]}
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/users.properties b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/users.properties
new file mode 100644
index 0000000..abb3232
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/console/store/users.properties
@@ -0,0 +1,28 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+${symbol_pound}
+${symbol_pound} Licensed to the Apache Software Foundation (ASF) under one or more
+${symbol_pound} contributor license agreements. See the NOTICE file distributed with
+${symbol_pound} this work for additional information regarding copyright ownership.
+${symbol_pound} The ASF licenses this file to You under the Apache License, Version 2.0
+${symbol_pound} (the "License"); you may not use this file except in compliance with
+${symbol_pound} the License. You may obtain a copy of the License at
+${symbol_pound}
+${symbol_pound} http://www.apache.org/licenses/LICENSE-2.0
+${symbol_pound}
+${symbol_pound} Unless required by applicable law or agreed to in writing, software
+${symbol_pound} distributed under the License is distributed on an "AS IS" BASIS,
+${symbol_pound} WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+${symbol_pound} See the License for the specific language governing permissions and
+${symbol_pound} limitations under the License.
+${symbol_pound}
+
+${symbol_pound} This file supports hot change, any change will be auto-reloaded without Dashboard restarting.
+${symbol_pound} Format: a user per line, username=password[,N] ${symbol_pound}N is optional, 0 (Normal User); 1 (Admin)
+
+${symbol_pound} Define Admin
+admin=admin,1
+
+${symbol_pound} Define Users
+normal=normal
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/consolelogs/rocketmq-console.log b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/consolelogs/rocketmq-console.log
new file mode 100644
index 0000000..e69de29
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/logs.txt b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/logs.txt
new file mode 100644
index 0000000..712a6a3
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/logs.txt
@@ -0,0 +1,3 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/rocketmqlogs/brokerLogDir_IS_UNDEFINED/broker.log b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/rocketmqlogs/brokerLogDir_IS_UNDEFINED/broker.log
new file mode 100644
index 0000000..e69de29
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/rocketmqlogs/rocketmq_client.log b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/logs/rocketmqlogs/rocketmq_client.log
new file mode 100644
index 0000000..e69de29
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/rocketmq/conf/broker.conf b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/rocketmq/conf/broker.conf
new file mode 100644
index 0000000..9e6bbea
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/rocketmq/conf/broker.conf
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# 集群名称
+brokerClusterName = DefaultCluster
+# BROKER 名称
+brokerName = broker-a
+# 0 表示 Master, > 0 表示 Slave
+brokerId = 0
+# 删除文件时间点,默认凌晨 4 点
+deleteWhen = 04
+# 文件保留时间,默认 48 小时
+fileReservedTime = 48
+# BROKER 角色 ASYNC_MASTER为异步主节点,SYNC_MASTER为同步主节点,SLAVE为从节点
+brokerRole = ASYNC_MASTER
+# 刷新数据到磁盘的方式,ASYNC_FLUSH 刷新
+flushDiskType = ASYNC_FLUSH
+# 存储路径
+storePathRootDir = /home/app/data/rocketmq/store
+# IP地址
+brokerIP1 = 127.0.0.1
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/rocketmq/store/store.txt b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/rocketmq/store/store.txt
new file mode 100644
index 0000000..712a6a3
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/rocketmq/data/rocketmq/store/store.txt
@@ -0,0 +1,3 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/nacos.sql b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/nacos.sql
new file mode 100644
index 0000000..b2d0725
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/nacos.sql
@@ -0,0 +1,302 @@
+# ************************************************************
+# Sequel Ace SQL dump
+# 版本号: 20050
+#
+# https://sequel-ace.com/
+# https://github.com/Sequel-Ace/Sequel-Ace
+#
+# 主机: 127.0.0.1 (MySQL 8.0.32)
+# 数据库: nacos_config
+# 生成时间: 2023-11-03 06:44:40 +0000
+# ************************************************************
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+SET NAMES utf8mb4;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE='NO_AUTO_VALUE_ON_ZERO', SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+CREATE database if NOT EXISTS `nacos_config` default character set utf8mb4 collate utf8mb4_0900_ai_ci;
+
+use `nacos_config`;
+
+# 转储表 config_info
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `config_info`;
+
+CREATE TABLE `config_info` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `data_id` varchar(255) COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',
+ `group_id` varchar(128) COLLATE utf8mb3_bin DEFAULT NULL,
+ `content` longtext COLLATE utf8mb3_bin NOT NULL COMMENT 'content',
+ `md5` varchar(32) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'md5',
+ `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
+ `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
+ `src_user` text COLLATE utf8mb3_bin COMMENT 'source user',
+ `src_ip` varchar(20) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'source ip',
+ `app_name` varchar(128) COLLATE utf8mb3_bin DEFAULT NULL,
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'ç§Ÿæˆ·å—æ®µ',
+ `c_desc` varchar(256) COLLATE utf8mb3_bin DEFAULT NULL,
+ `c_use` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
+ `effect` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
+ `type` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
+ `c_schema` text COLLATE utf8mb3_bin,
+ `encrypted_data_key` text COLLATE utf8mb3_bin NOT NULL COMMENT '秘钥',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='config_info';
+
+
+
+# 转储表 config_info_aggr
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `config_info_aggr`;
+
+CREATE TABLE `config_info_aggr` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `data_id` varchar(255) COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',
+ `group_id` varchar(128) COLLATE utf8mb3_bin NOT NULL COMMENT 'group_id',
+ `datum_id` varchar(255) COLLATE utf8mb3_bin NOT NULL COMMENT 'datum_id',
+ `content` longtext COLLATE utf8mb3_bin NOT NULL COMMENT '内容',
+ `gmt_modified` datetime NOT NULL COMMENT '修改时间',
+ `app_name` varchar(128) COLLATE utf8mb3_bin DEFAULT NULL,
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'ç§Ÿæˆ·å—æ®µ',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='å¢žåŠ ç§Ÿæˆ·å—æ®µ';
+
+
+
+# 转储表 config_info_beta
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `config_info_beta`;
+
+CREATE TABLE `config_info_beta` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `data_id` varchar(255) COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',
+ `group_id` varchar(128) COLLATE utf8mb3_bin NOT NULL COMMENT 'group_id',
+ `app_name` varchar(128) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'app_name',
+ `content` longtext COLLATE utf8mb3_bin NOT NULL COMMENT 'content',
+ `beta_ips` varchar(1024) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'betaIps',
+ `md5` varchar(32) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'md5',
+ `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
+ `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
+ `src_user` text COLLATE utf8mb3_bin COMMENT 'source user',
+ `src_ip` varchar(20) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'source ip',
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'ç§Ÿæˆ·å—æ®µ',
+ `encrypted_data_key` text COLLATE utf8mb3_bin NOT NULL COMMENT '秘钥',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='config_info_beta';
+
+
+
+# 转储表 config_info_tag
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `config_info_tag`;
+
+CREATE TABLE `config_info_tag` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `data_id` varchar(255) COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',
+ `group_id` varchar(128) COLLATE utf8mb3_bin NOT NULL COMMENT 'group_id',
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'tenant_id',
+ `tag_id` varchar(128) COLLATE utf8mb3_bin NOT NULL COMMENT 'tag_id',
+ `app_name` varchar(128) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'app_name',
+ `content` longtext COLLATE utf8mb3_bin NOT NULL COMMENT 'content',
+ `md5` varchar(32) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'md5',
+ `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
+ `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
+ `src_user` text COLLATE utf8mb3_bin COMMENT 'source user',
+ `src_ip` varchar(20) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'source ip',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='config_info_tag';
+
+
+
+# 转储表 config_tags_relation
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `config_tags_relation`;
+
+CREATE TABLE `config_tags_relation` (
+ `id` bigint NOT NULL COMMENT 'id',
+ `tag_name` varchar(128) COLLATE utf8mb3_bin NOT NULL COMMENT 'tag_name',
+ `tag_type` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'tag_type',
+ `data_id` varchar(255) COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',
+ `group_id` varchar(128) COLLATE utf8mb3_bin NOT NULL COMMENT 'group_id',
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'tenant_id',
+ `nid` bigint NOT NULL AUTO_INCREMENT,
+ PRIMARY KEY (`nid`),
+ UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
+ KEY `idx_tenant_id` (`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='config_tag_relation';
+
+
+
+# 转储表 group_capacity
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `group_capacity`;
+
+CREATE TABLE `group_capacity` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `group_id` varchar(128) COLLATE utf8mb3_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空å—符表示整个集群',
+ `quota` int unsigned NOT NULL DEFAULT '0' COMMENT 'é…é¢ï¼Œ0表示使用默认值',
+ `usage` int unsigned NOT NULL DEFAULT '0' COMMENT '使用é‡',
+ `max_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å•个é…置大å°ä¸Šé™ï¼Œå•ä½ä¸ºå—节,0表示使用默认值',
+ `max_aggr_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'èšåˆåé…置最大个数,,0表示使用默认值',
+ `max_aggr_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å•个èšåˆæ•°æ®çš„åé…置大å°ä¸Šé™ï¼Œå•ä½ä¸ºå—节,0表示使用默认值',
+ `max_history_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'æœ€å¤§å˜æ›´åކ岿•°é‡',
+ `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
+ `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_group_id` (`group_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='集群ã€å„Group容é‡ä¿¡æ¯è¡¨';
+
+
+
+# 转储表 his_config_info
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `his_config_info`;
+
+CREATE TABLE `his_config_info` (
+ `id` bigint unsigned NOT NULL,
+ `nid` bigint unsigned NOT NULL AUTO_INCREMENT,
+ `data_id` varchar(255) COLLATE utf8mb3_bin NOT NULL,
+ `group_id` varchar(128) COLLATE utf8mb3_bin NOT NULL,
+ `app_name` varchar(128) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'app_name',
+ `content` longtext COLLATE utf8mb3_bin NOT NULL,
+ `md5` varchar(32) COLLATE utf8mb3_bin DEFAULT NULL,
+ `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
+ `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
+ `src_user` text COLLATE utf8mb3_bin,
+ `src_ip` varchar(20) COLLATE utf8mb3_bin DEFAULT NULL,
+ `op_type` char(10) COLLATE utf8mb3_bin DEFAULT NULL,
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'ç§Ÿæˆ·å—æ®µ',
+ `encrypted_data_key` text COLLATE utf8mb3_bin NOT NULL COMMENT '秘钥',
+ PRIMARY KEY (`nid`),
+ KEY `idx_gmt_create` (`gmt_create`),
+ KEY `idx_gmt_modified` (`gmt_modified`),
+ KEY `idx_did` (`data_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='å¤šç§Ÿæˆ·æ”¹é€ ';
+
+
+
+# 转储表 permissions
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `permissions`;
+
+CREATE TABLE `permissions` (
+ `role` varchar(50) NOT NULL,
+ `resource` varchar(512) NOT NULL,
+ `action` varchar(8) NOT NULL,
+ UNIQUE KEY `uk_role_permission` (`role`,`resource`,`action`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+
+
+# 转储表 roles
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `roles`;
+
+CREATE TABLE `roles` (
+ `username` varchar(50) NOT NULL,
+ `role` varchar(50) NOT NULL,
+ UNIQUE KEY `uk_username_role` (`username`,`role`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `roles` WRITE;
+/*!40000 ALTER TABLE `roles` DISABLE KEYS */;
+
+INSERT INTO `roles` (`username`, `role`)
+VALUES
+ ('nacos','ROLE_ADMIN');
+
+/*!40000 ALTER TABLE `roles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+# 转储表 tenant_capacity
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `tenant_capacity`;
+
+CREATE TABLE `tenant_capacity` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID',
+ `quota` int unsigned NOT NULL DEFAULT '0' COMMENT 'é…é¢ï¼Œ0表示使用默认值',
+ `usage` int unsigned NOT NULL DEFAULT '0' COMMENT '使用é‡',
+ `max_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å•个é…置大å°ä¸Šé™ï¼Œå•ä½ä¸ºå—节,0表示使用默认值',
+ `max_aggr_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'èšåˆåé…置最大个数',
+ `max_aggr_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å•个èšåˆæ•°æ®çš„åé…置大å°ä¸Šé™ï¼Œå•ä½ä¸ºå—节,0表示使用默认值',
+ `max_history_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'æœ€å¤§å˜æ›´åކ岿•°é‡',
+ `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
+ `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_tenant_id` (`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='租户容é‡ä¿¡æ¯è¡¨';
+
+
+
+# 转储表 tenant_info
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `tenant_info`;
+
+CREATE TABLE `tenant_info` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `kp` varchar(128) COLLATE utf8mb3_bin NOT NULL COMMENT 'kp',
+ `tenant_id` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'tenant_id',
+ `tenant_name` varchar(128) COLLATE utf8mb3_bin DEFAULT '' COMMENT 'tenant_name',
+ `tenant_desc` varchar(256) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'tenant_desc',
+ `create_source` varchar(32) COLLATE utf8mb3_bin DEFAULT NULL COMMENT 'create_source',
+ `gmt_create` bigint NOT NULL COMMENT '创建时间',
+ `gmt_modified` bigint NOT NULL COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
+ KEY `idx_tenant_id` (`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='tenant_info';
+
+
+
+# 转储表 users
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `users`;
+
+CREATE TABLE `users` (
+ `username` varchar(50) NOT NULL,
+ `password` varchar(500) NOT NULL,
+ `enabled` tinyint(1) NOT NULL,
+ PRIMARY KEY (`username`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `users` WRITE;
+/*!40000 ALTER TABLE `users` DISABLE KEYS */;
+
+INSERT INTO `users` (`username`, `password`, `enabled`)
+VALUES
+ ('nacos','$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu',1);
+
+/*!40000 ALTER TABLE `users` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xfg_dev_tech_db_00.sql b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xfg_dev_tech_db_00.sql
new file mode 100644
index 0000000..98a8a15
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xfg_dev_tech_db_00.sql
@@ -0,0 +1,215 @@
+# ************************************************************
+# Sequel Ace SQL dump
+# 版本号: 20050
+#
+# https://sequel-ace.com/
+# https://github.com/Sequel-Ace/Sequel-Ace
+#
+# 主机: 127.0.0.1 (MySQL 8.0.32)
+# 数据库: xfg_dev_tech_db_00
+# 生成时间: 2023-11-02 07:41:33 +0000
+# ************************************************************
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+SET NAMES utf8mb4;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE='NO_AUTO_VALUE_ON_ZERO', SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+CREATE database if NOT EXISTS `xfg_dev_tech_db_00` default character set utf8mb4 collate utf8mb4_0900_ai_ci;
+use `xfg_dev_tech_db_00`;
+
+# 转储表 user_order_0
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_0`;
+
+CREATE TABLE `user_order_0` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_0` WRITE;
+/*!40000 ALTER TABLE `user_order_0` DISABLE KEYS */;
+
+INSERT INTO `user_order_0` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_FOawiP','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','55811762243',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'d737caf79181405a987a34a17f7a7beb',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00'),
+ (2,'小傅哥','xfg_MIxVOs','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','64790165297',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:46',0,0,'adf5faa9fba24c298dd426e04b3dd10f',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:54','2023-11-02 15:38:54');
+
+/*!40000 ALTER TABLE `user_order_0` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+# 转储表 user_order_1
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_1`;
+
+CREATE TABLE `user_order_1` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=147 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_1` WRITE;
+/*!40000 ALTER TABLE `user_order_1` DISABLE KEYS */;
+
+INSERT INTO `user_order_1` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_Cnazua','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','67077289265',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'42fab13a8a7f4bf4a1db5515b5a7d1f9',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00'),
+ (2,'小傅哥','xfg_bMNgJb','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','44231861187',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'e1707367684140c8b1d57caacc1acbf8',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00');
+
+/*!40000 ALTER TABLE `user_order_1` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+# 转储表 user_order_2
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_2`;
+
+CREATE TABLE `user_order_2` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=136 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_2` WRITE;
+/*!40000 ALTER TABLE `user_order_2` DISABLE KEYS */;
+
+INSERT INTO `user_order_2` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_BbNdEo','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','75706486913',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'f576ce3965d3455db48d9db59397908d',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00'),
+ (2,'小傅哥','xfg_WKOtte','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','56110050786',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'06156ea5dd564f13a8b03dd55936f739',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00');
+
+/*!40000 ALTER TABLE `user_order_2` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+# 转储表 user_order_3
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_3`;
+
+CREATE TABLE `user_order_3` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_3` WRITE;
+/*!40000 ALTER TABLE `user_order_3` DISABLE KEYS */;
+
+INSERT INTO `user_order_3` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_wMIvhS','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','04973851200',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'94500f29e6ba4c849094e7b694942e5b',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00'),
+ (2,'小傅哥','xfg_mRLUQC','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','84344470134',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'12b4e2c16a15434db8efd5140a262189',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00');
+
+/*!40000 ALTER TABLE `user_order_3` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xfg_dev_tech_db_01.sql b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xfg_dev_tech_db_01.sql
new file mode 100644
index 0000000..acc526a
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xfg_dev_tech_db_01.sql
@@ -0,0 +1,215 @@
+# ************************************************************
+# Sequel Ace SQL dump
+# 版本号: 20050
+#
+# https://sequel-ace.com/
+# https://github.com/Sequel-Ace/Sequel-Ace
+#
+# 主机: 127.0.0.1 (MySQL 8.0.32)
+# 数据库: xfg_dev_tech_db_01
+# 生成时间: 2023-11-02 07:42:32 +0000
+# ************************************************************
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+SET NAMES utf8mb4;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE='NO_AUTO_VALUE_ON_ZERO', SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+CREATE database if NOT EXISTS `xfg_dev_tech_db_01` default character set utf8mb4 collate utf8mb4_0900_ai_ci;
+use `xfg_dev_tech_db_01`;
+
+# 转储表 user_order_0
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_0`;
+
+CREATE TABLE `user_order_0` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=144 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_0` WRITE;
+/*!40000 ALTER TABLE `user_order_0` DISABLE KEYS */;
+
+INSERT INTO `user_order_0` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_eKJVpO','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','13232577250',1,128.00,50.00,0.00,78.00,'2023-11-02 07:37:51',0,0,'bad18b73d64a41e5a6c66ffde5c86620',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00'),
+ (2,'小傅哥','xfg_KigNVH','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','06196275702',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'21efcbb490de4f56b64ae44b05666513',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00');
+
+/*!40000 ALTER TABLE `user_order_0` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+# 转储表 user_order_1
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_1`;
+
+CREATE TABLE `user_order_1` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_1` WRITE;
+/*!40000 ALTER TABLE `user_order_1` DISABLE KEYS */;
+
+INSERT INTO `user_order_1` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_SNvNdB','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','08440801977',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:55',0,0,'4044fe46fabe498b8905a4f620f36076',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:54','2023-11-02 15:38:54'),
+ (2,'小傅哥','xfg_ccwftd','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','96970982688',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:55',0,0,'90c02e7687bc4bc7a0b9d4eebee78d7a',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:55','2023-11-02 15:38:55');
+
+/*!40000 ALTER TABLE `user_order_1` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+# 转储表 user_order_2
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_2`;
+
+CREATE TABLE `user_order_2` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_2` WRITE;
+/*!40000 ALTER TABLE `user_order_2` DISABLE KEYS */;
+
+INSERT INTO `user_order_2` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_rAZmon','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','76407784565',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'0c137db910fd430b9bab307b45b64369',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00'),
+ (2,'小傅哥','xfg_jbUupM','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','29649461429',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'f3ab7b04065a4c6cb562942c8fcf3282',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00');
+
+/*!40000 ALTER TABLE `user_order_2` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+# 转储表 user_order_3
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `user_order_3`;
+
+CREATE TABLE `user_order_3` (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID;【必须保留自增ID,不要将一些有随机特性的字段值设计为主键,例如order_id,会导致innodb内部page分裂和大量随机I/O,性能下降】int 大约21亿左右,超过会报错。bigint 大约9千亿左右。',
+ `user_name` varchar(64) NOT NULL COMMENT '用户姓名;',
+ `user_id` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户编号;',
+ `user_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户电话;使用varchar(20)存储手机号,不要使用整型。手机号不会做数学计算、涉及到区号或者国家代号,可能出现+-()、支持模糊查询,例如:like“135%”',
+ `sku` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编号',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品名称',
+ `order_id` varchar(64) NOT NULL COMMENT '订单ID',
+ `quantity` int NOT NULL DEFAULT '1' COMMENT '商品数量;整形定义中不显示规定显示长度,比如使用 INT,而不使用 INT(4)',
+ `unit_price` decimal(10,2) NOT NULL COMMENT '商品价格;小数类型为 decimal,禁止使用 float、double',
+ `discount_amount` decimal(10,2) NOT NULL COMMENT '折扣金额;',
+ `tax` decimal(4,2) NOT NULL COMMENT '费率金额;',
+ `total_amount` decimal(10,2) NOT NULL COMMENT '支付金额;(商品的总金额 - 折扣) * (1 - 费率)',
+ `order_date` datetime NOT NULL COMMENT '订单日期;timestamp的时间范围在1970-01-01 00:00:01到2038-01-01 00:00:00之间',
+ `order_status` tinyint(1) NOT NULL COMMENT '订单状态;0 创建、1完成、2掉单、3关单 【不要使用 enum 要使用 tinyint 替代。0-80 范围,都可以使用 tinyint】',
+ `is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删单;0未删除,1已删除 【表达是否概念的字段必须使用is_】',
+ `uuid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一索引;分布式下全局唯一,用于binlog 同步 ES 方便使用',
+ `ipv4` int unsigned NOT NULL DEFAULT '2130706433' COMMENT '设备地址;存储IPV4地址,通过MySQL 函数转换,inet_ntoa、inet_aton 示例;SELECT INET_ATON(‘209.207.224.40′); 3520061480 SELECT INET_NTOA(3520061480); 209.207.224.40所有字段定义为NOT NULL,并设置默认值,因为null值的字段会导致每一行都占用额外存储空间\\n数据迁移容易出错,在聚合函数计算结果偏差(如count结果不准)并且null的列使索引/索引统计/值比较都更加复杂,MySQL内部需要进行特殊处理,表中有较多空字段的时候,数据库性能下降严重。开发中null只能采用is null或is not null检索,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’abc’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录',
+ `ipv6` varbinary(16) NOT NULL COMMENT '设备地址;存储IPV6地址,VARBINARY(16) 插入:INET6_ATON(''2001:0db8:85a3:0000:0000:8a2e:0370:7334'') 查询:SELECT INET6_NTOA(ip_address) ',
+ `ext_data` json NOT NULL COMMENT '扩展数据;记录下单时用户的设备环境等信息(核心业务字段,要单独拆表)。【select user_name, ext_data, ext_data->>''$.device'', ext_data->>''$.device.machine'' from `user_order`;】',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_orderid` (`order_id`),
+ UNIQUE KEY `uq_uuid` (`uuid`),
+ KEY `idx_order_date` (`order_date`),
+ KEY `idx_sku_unit_price_total_amount` (`sku`,`unit_price`,`total_amount`)
+) ENGINE=InnoDB AUTO_INCREMENT=148 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+LOCK TABLES `user_order_3` WRITE;
+/*!40000 ALTER TABLE `user_order_3` DISABLE KEYS */;
+
+INSERT INTO `user_order_3` (`id`, `user_name`, `user_id`, `user_mobile`, `sku`, `sku_name`, `order_id`, `quantity`, `unit_price`, `discount_amount`, `tax`, `total_amount`, `order_date`, `order_status`, `is_delete`, `uuid`, `ipv4`, `ipv6`, `ext_data`, `update_time`, `create_time`)
+VALUES
+ (1,'小傅哥','xfg_JsEUcu','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','21630931065',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'7f595d4df9954b6788c987a20e23b765',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00'),
+ (2,'小傅哥','xfg_DhmjDx','+86 13521408***','13811216','《手写MyBatis:渐进式源码实践》','86253998065',1,128.00,50.00,0.00,78.00,'2023-11-02 07:38:00',0,0,'42dcfeae7c2c45eb9d6fb921a8a71104',2130706433,X'20010DB885A3000000008A2E03707334','{\"device\": {\"machine\": \"IPhone 14 Pro\", \"location\": \"shanghai\"}}','2023-11-02 15:38:00','2023-11-02 15:38:00');
+
+/*!40000 ALTER TABLE `user_order_3` ENABLE KEYS */;
+UNLOCK TABLES;
+
+
+
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xxl_job.sql b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xxl_job.sql
new file mode 100644
index 0000000..a2cc4c2
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/docs/dev-ops/environment/sql/xxl_job.sql
@@ -0,0 +1,121 @@
+# 获取地址:https://github.com/xuxueli/xxl-job/tree/master/doc/db
+# XXL-JOB v2.4.1-SNAPSHOT
+# Copyright (c) 2015-present, xuxueli.
+
+CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_0900_ai_ci;
+use `xxl_job`;
+
+SET NAMES utf8mb4;
+
+CREATE TABLE `xxl_job_info` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
+ `job_desc` varchar(255) NOT NULL,
+ `add_time` datetime DEFAULT NULL,
+ `update_time` datetime DEFAULT NULL,
+ `author` varchar(64) DEFAULT NULL COMMENT '作者',
+ `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
+ `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
+ `schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
+ `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
+ `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
+ `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
+ `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
+ `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
+ `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
+ `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
+ `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
+ `glue_source` mediumtext COMMENT 'GLUE源代码',
+ `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
+ `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
+ `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
+ `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',
+ `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
+ `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `xxl_job_log` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
+ `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
+ `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
+ `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
+ `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
+ `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
+ `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
+ `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
+ `trigger_code` int(11) NOT NULL COMMENT '调度-结果',
+ `trigger_msg` text COMMENT '调度-日志',
+ `handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
+ `handle_code` int(11) NOT NULL COMMENT '执行-状态',
+ `handle_msg` text COMMENT '执行-日志',
+ `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
+ PRIMARY KEY (`id`),
+ KEY `I_trigger_time` (`trigger_time`),
+ KEY `I_handle_code` (`handle_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `xxl_job_log_report` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
+ `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',
+ `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',
+ `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `xxl_job_logglue` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
+ `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
+ `glue_source` mediumtext COMMENT 'GLUE源代码',
+ `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
+ `add_time` datetime DEFAULT NULL,
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `xxl_job_registry` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `registry_group` varchar(50) NOT NULL,
+ `registry_key` varchar(255) NOT NULL,
+ `registry_value` varchar(255) NOT NULL,
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `xxl_job_group` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
+ `title` varchar(12) NOT NULL COMMENT '执行器名称',
+ `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',
+ `address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `xxl_job_user` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `username` varchar(50) NOT NULL COMMENT '账号',
+ `password` varchar(50) NOT NULL COMMENT '密码',
+ `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
+ `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `i_username` (`username`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `xxl_job_lock` (
+ `lock_name` varchar(50) NOT NULL COMMENT '锁名称',
+ PRIMARY KEY (`lock_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
+INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
+INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
+INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');
+
+commit;
\ No newline at end of file
diff --git a/scaffold/src/main/resources/archetype-resources/pom.xml b/scaffold/src/main/resources/archetype-resources/pom.xml
new file mode 100644
index 0000000..3d12c81
--- /dev/null
+++ b/scaffold/src/main/resources/archetype-resources/pom.xml
@@ -0,0 +1,234 @@
+
+
+ 4.0.0
+
+ ${groupId}
+ ${artifactId}
+ ${version}
+ pom
+
+
+ ${rootArtifactId}-api
+ ${rootArtifactId}-app
+ ${rootArtifactId}-domain
+ ${rootArtifactId}-trigger
+ ${rootArtifactId}-infrastructure
+ ${rootArtifactId}-types
+
+
+
+ 1.8
+ UTF-8
+ 8
+ 8
+ UTF-8
+
+
+
+
+ xiaofuge
+ 184172133@qq.com
+ fuzhengwei
+ https://github.com/fuzhengwei
+
+
+
+
+
+ Apache License, Version 2.0
+ https://www.apache.org/licenses/LICENSE-2.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.12
+
+
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.1.4
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.22
+
+
+ com.alibaba
+ fastjson
+ 2.0.28
+
+
+ org.apache.commons
+ commons-lang3
+ 3.9
+
+
+ com.google.guava
+ guava
+ 32.1.3-jre
+
+
+ dom4j
+ dom4j
+ 1.6.1
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.4.10
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+ com.auth0
+ java-jwt
+ 4.4.0
+
+
+ commons-codec
+ commons-codec
+ 1.15
+
+
+ org.apache.dubbo
+ dubbo
+ 3.0.9
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+ 3.0.9
+
+
+ com.alibaba.nacos
+ nacos-client
+ 2.1.0
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ 3.23.4
+
+
+ org.apache.shardingsphere
+ shardingsphere-jdbc-core
+ 5.4.1
+
+
+ org.yaml
+ snakeyaml
+ 1.33
+
+
+ com.xuxueli
+ xxl-job-core
+ 2.4.0
+
+
+ org.apache.rocketmq
+ rocketmq-client-java
+ 5.0.4
+
+
+ org.apache.rocketmq
+ rocketmq-spring-boot-starter
+ 2.2.0
+
+
+
+
+ ${groupId}
+ ${rootArtifactId}-domain
+ ${version}
+
+
+ ${groupId}
+ ${rootArtifactId}-infrastructure
+ ${version}
+
+
+ ${groupId}
+ ${rootArtifactId}-types
+ ${version}
+
+
+ ${groupId}
+ ${rootArtifactId}-trigger
+ ${version}
+
+
+ ${groupId}
+ ${rootArtifactId}-api
+ ${version}
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.0
+
+ ${java.version}
+ ${java.version}
+ ${project.build.sourceEncoding}
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.5
+
+ UTF-8
+
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+ 2.7
+
+
+
+
+
+
+ dev
+
+ true
+
+
+ -Xms1G -Xmx1G -server -XX:MaxPermSize=256M -Xss256K -Dspring.profiles.active=test -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/xfg-frame-archetype-std-boot -Xloggc:/export/Logs/xfg-frame-archetype-std-boot/gc-xfg-frame-archetype-std-boot.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
+ dev
+
+
+
+ test
+
+ -Xms1G -Xmx1G -server -XX:MaxPermSize=256M -Xss256K -Dspring.profiles.active=test -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/xfg-frame-archetype-std-boot -Xloggc:/export/Logs/xfg-frame-archetype-std-boot/gc-xfg-frame-archetype-std-boot.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
+ test
+
+
+
+ prod
+
+ -Xms6G -Xmx6G -server -XX:MaxPermSize=256M -Xss256K -Dspring.profiles.active=release -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/fq-mall-activity-app -Xloggc:/export/Logs/xfg-frame-archetype-std-boot/gc-xfg-frame-archetype-std-boot.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
+ prod
+
+
+
+
+
diff --git a/scaffold/src/test/resources/projects/basic/archetype.properties b/scaffold/src/test/resources/projects/basic/archetype.properties
new file mode 100644
index 0000000..19f97e4
--- /dev/null
+++ b/scaffold/src/test/resources/projects/basic/archetype.properties
@@ -0,0 +1,10 @@
+#Mon Oct 30 15:50:35 CST 2023
+package=cn.bugstack
+version=1.0.0-SNAPSHOT
+groupId=cn.bugstack
+artifactId=xfg-frame-archetype-std
+gitignore=.gitignore
+appName=xfg-ddd
+uAppName=XfgDDD
+author=system
+date=2023-10-24 10:24
\ No newline at end of file
diff --git a/scaffold/src/test/resources/projects/basic/goal.txt b/scaffold/src/test/resources/projects/basic/goal.txt
new file mode 100644
index 0000000..e69de29
diff --git a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/RedisClientConfig.java b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/RedisClientConfig.java
index 8add0cb..0c64f6c 100644
--- a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/RedisClientConfig.java
+++ b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/RedisClientConfig.java
@@ -36,7 +36,7 @@ public class RedisClientConfig {
config.useSingleServer()
.setAddress("redis://" + properties.getHost() + ":" + properties.getPort())
- .setPassword(properties.getPassword())
+// .setPassword(properties.getPassword())
.setConnectionPoolSize(properties.getPoolSize())
.setConnectionMinimumIdleSize(properties.getMinIdleSize())
.setIdleConnectionTimeout(properties.getIdleTimeout())
diff --git a/xfg-frame-archetype-std-app/src/main/resources/application-dev.yml b/xfg-frame-archetype-std-app/src/main/resources/application-dev.yml
index f258824..ce97672 100644
--- a/xfg-frame-archetype-std-app/src/main/resources/application-dev.yml
+++ b/xfg-frame-archetype-std-app/src/main/resources/application-dev.yml
@@ -28,7 +28,6 @@ redis:
config:
host: 127.0.0.1
port: 6379
- password: 123456
pool-size: 10
min-idle-size: 5
idle-timeout: 30000
--
GitLab