diff --git a/.gitignore b/.gitignore
index 5d947ca8879f8a9072fe485c566204e3c2929e80..eccf09647d5edc926587cdfe3a1483369695c426 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,5 @@ bin-release/
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
# should NOT be excluded as they contain compiler settings and other important
# information for Eclipse / Flash Builder.
+/super-data-api.iml
+/target/
diff --git a/README.md b/README.md
index 0d503fa49f185346e796ec073cbd819ec1b9df3c..1034f2ac8f3ab6ea842f092e1ced0660c8f5ffc5 100644
--- a/README.md
+++ b/README.md
@@ -1,37 +1,75 @@
-# 超级数据-api
+# super-data-api
-#### 介绍
-通过页面配置生成接口
+### 项目说明
+ 通过页面配置动态生成在线接口。
+### 项目特点
+能够快速动态生成CRUD接口,减少重复工作
+可以在项目中扩展编写复自定义接口
+支持MySQL、ElasticSearch数据库
+Mysql支持关联查询
+支持报表导出接口
+支持自定义sql生成接口
+
+#### 安装教程
+通过git下载源码
+执行db下initDataBase和v1.0.sql文件,初始化数据
+修改application.yml,更新MySQL账号和密码、数据库名称
+Linux环境运行sh文件下 ./run_super-data-api.sh start 脚本命令
+http://localhost:1001/home.html 打开主页面
#### 软件架构
-软件架构说明
+JDK1.8、Maven、IDEA、SpringBoot 2.2.4.RELEASE、ElasticSearch、Mybatis-Plus、Vue等
+
+#### 使用说明
+1.新建数据源
+
-#### 安装教程
+2.新增接口
-1. xxxx
-2. xxxx
-3. xxxx
+ 2.1 Insert类型接口
+ 2.1.1 Mysql数据源要先选择数据源,然后选择数据库,再选择想插入的表即可,接口配置中字段名称是数据库表字段名称,
+ 参数名称是请求的参数名称,参数类型是必须,分url传参和body传参
-#### 使用说明
+
+
+ 2.2.2 Es数据源只选择数据源和表即可,接口配置中信息同mysql数据源类型接口
+
+
+ 2.2 Delete类型接口
+ 2.2.1 Delete类型接口就是根据条件删除指定表的数据,其中mysql要先选中数据库,接口配置中多了必选的条件类型字段
+
+
+ 2.3 Update类型接口
+ 2.2.1 Update类型接口就是更新数据库,其中mysql要选中数据库,接口配置中多了必选的是否更新参数字段,意思是是
+ 否是待更新的表字段
+
+
+
+ 2.4 Select类型接口
+ 2.4.1 Es数据源
+ ElasticSearch数据源类型不支持关联查询,查询参数可以配置成url传参或者body传参。可以选择是否必传参数,
+ 和查询的条件类型。也可以配置返回参数名称,设置是否排序字段和顺序或者倒叙。若是导出接口最少配置一列导出数据。
+
+
+
+ 2.4.2 Mysql数据源
+ Mysql数据源类型在ElasticSearch功能基础上添加多表关联配置,选择好Mysql数据源可以通过接口获取获取下面的
+ 表和表的字段信息,然后通过页面配置其关联关系和接口相关参数。
+
+
-1. xxxx
-2. xxxx
-3. xxxx
+ 2.4.3 自定义sql接口配置
-#### 参与贡献
+
-1. Fork 本仓库
-2. 新建 Feat_xxx 分支
-3. 提交代码
-4. 新建 Pull Request
+3.查看、编辑、删除、调试接口
+ 3.1查看接口详情
+
-#### 特技
+ 3.2编辑接口
+
-1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
-2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
-3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
-4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
-5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
-6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
+ 3.3调试调用接口
+
diff --git a/img_1.png b/img_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3b25e42ad38b14cb1469f0b4780c5552d7a4d1c
Binary files /dev/null and b/img_1.png differ
diff --git a/img_10.png b/img_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..b88a9bc6ad0d40d28e0896a119d431011e9b1b0f
Binary files /dev/null and b/img_10.png differ
diff --git a/img_11.png b/img_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..17c0dcf75ea90393c5c862d15f433b7f42824e37
Binary files /dev/null and b/img_11.png differ
diff --git a/img_2.png b/img_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..aebba0f9f7ff4fa6ffc153205dd4e16c9fa2b586
Binary files /dev/null and b/img_2.png differ
diff --git a/img_3.png b/img_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..43f0f2ee211514a77d8f8b67ee9092bcfb689b4b
Binary files /dev/null and b/img_3.png differ
diff --git a/img_4.png b/img_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc59df787b4d7b96d5bf606edc702023c50ff8be
Binary files /dev/null and b/img_4.png differ
diff --git a/img_5.png b/img_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe30530abe50cae4a5d6ca0083100b879ac0f4e7
Binary files /dev/null and b/img_5.png differ
diff --git a/img_6.png b/img_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..50665fbb81e6abaecbcf4fa83b813b4c5410191a
Binary files /dev/null and b/img_6.png differ
diff --git a/img_7.png b/img_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2e4f74840b4090605207c658f7b1a0e4eddbd02
Binary files /dev/null and b/img_7.png differ
diff --git a/img_8.png b/img_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..88f48d2d5f88dba13297111a14325edac716dc7e
Binary files /dev/null and b/img_8.png differ
diff --git a/img_9.png b/img_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed571e1795081a9c5f3cb32ba1f8586acf922df1
Binary files /dev/null and b/img_9.png differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4163e409959ac3383847ef1775dd3f6a5321ec8a
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,181 @@
+
+
+ 4.0.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.4.RELEASE
+
+
+ com.xforwardai
+ super-data-api
+ 1.0-SNAPSHOT
+
+
+ 1.8
+ 2.6.2
+ 2.17.0
+ 1.2.10
+ 2.1.1
+ 2.9.2
+ 1.9.6
+ 1.2.62
+ 3.2.0
+ 2.3.28
+ 1.1.21
+ 1.2.10
+ 3.17
+ 5.8.0
+ 3.0
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.github.ulisesbocchio
+ jasypt-spring-boot-starter
+ ${jasypt-spring-boot}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ io.springfox
+ springfox-swagger2
+ ${springfox-swagger}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${springfox-swagger}
+
+
+ com.github.xiaoymin
+ swagger-bootstrap-ui
+ ${swagger-bootstrap-ui}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-elasticsearch
+
+
+
+ com.alibaba
+ fastjson
+ ${com.alibaba}
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus}
+
+
+ org.freemarker
+ freemarker
+ ${org.freemarker}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+ com.alibaba
+ druid
+ ${com.alibaba.version}
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.version}
+
+
+ org.mybatis
+ mybatis
+
+
+ org.mybatis
+ mybatis-spring
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ org.apache.poi
+ poi
+ ${apache.poi.version}
+
+
+ org.apache.poi
+ poi-ooxml
+ ${apache.poi.version}
+
+
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${maven.plugin.version}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/xforwardai/superdata/SuperDataApiApplication.java b/src/main/java/com/xforwardai/superdata/SuperDataApiApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e26c4d3cceec481db9e2f1b07f6f0f0c5172bba
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/SuperDataApiApplication.java
@@ -0,0 +1,19 @@
+package com.xforwardai.superdata;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@EnableAsync
+@EnableScheduling
+@MapperScan("com.xforwardai.superdata.mysql.mapper")
+public class SuperDataApiApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SuperDataApiApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/xforwardai/superdata/annotation/MysqlCheckInject.java b/src/main/java/com/xforwardai/superdata/annotation/MysqlCheckInject.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b35b28b613fafd4262f299b53159eb2c96b0a59
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/annotation/MysqlCheckInject.java
@@ -0,0 +1,30 @@
+package com.xforwardai.superdata.annotation;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.lang.annotation.*;
+
+/**
+ * @Description:
+ * @ClassName: com.xforwardai.wisdom.machine.room.annotation.MysqlCheckInject.java
+ * @date: 2021/12/28 11:21
+ * @author xujian
+ */
+@Documented
+@Inherited
+@Target(value = {ElementType.METHOD, ElementType.TYPE, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MysqlCheckInject {
+
+ //字段唯一值判断
+ String uniqueField() default "";
+
+ //字段唯一值条件
+ String[] conditionUniqueField() default {};
+
+ //方法类型 add update
+ String method() default "add";
+
+ Class mapper() default BaseMapper.class;
+
+}
diff --git a/src/main/java/com/xforwardai/superdata/annotation/aspect/MysqlCheckAspect.java b/src/main/java/com/xforwardai/superdata/annotation/aspect/MysqlCheckAspect.java
new file mode 100644
index 0000000000000000000000000000000000000000..41034a94f29e4cd221fd3bfb5454102c3a9d0d64
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/annotation/aspect/MysqlCheckAspect.java
@@ -0,0 +1,33 @@
+package com.xforwardai.superdata.annotation.aspect;
+
+import com.xforwardai.superdata.annotation.MysqlCheckInject;
+import com.xforwardai.superdata.util.MysqlCheckUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @ClassName: com.xforwardai.wisdom.machine.room.annotation.aspect.MysqlCheckAspect.java
+ * @date: 2021/12/28 15:17
+ * @author xujian
+ */
+@Aspect
+@Component
+@Slf4j
+@Order(2)
+public class MysqlCheckAspect {
+
+ @Around("@annotation(mysqlCheckInject)")
+ public Object around(ProceedingJoinPoint pjp, MysqlCheckInject mysqlCheckInject) throws Throwable {
+ Object[] args = pjp.getArgs();
+ Object obj = args[0];
+ String method = mysqlCheckInject.method();
+ MysqlCheckUtil.check(obj, method);
+ return pjp.proceed(args);
+ }
+
+}
diff --git a/src/main/java/com/xforwardai/superdata/base/BaseDto.java b/src/main/java/com/xforwardai/superdata/base/BaseDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae44f10f01b58a6078901aeac9ae8f508343f7b8
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/base/BaseDto.java
@@ -0,0 +1,30 @@
+package com.xforwardai.superdata.base;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xforwardai.superdata.constants.CommonConstant;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Description:
+ * @ClassName: com.xforwardai.wisdom.machine.room.base.BaseDto.java
+ * @date: 2022/2/23 13:32
+ * @author xujian
+ */
+@Data
+public class BaseDto extends BasePageDto{
+
+ @ApiModelProperty(value = "主键")
+ private Integer id;
+
+ @ApiModelProperty(value = "创建时间")
+ @JsonFormat(pattern = CommonConstant.CONSTANT_DATETIME_FORMAT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "修改时间")
+ @JsonFormat(pattern = CommonConstant.CONSTANT_DATETIME_FORMAT)
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/xforwardai/superdata/base/BasePageDto.java b/src/main/java/com/xforwardai/superdata/base/BasePageDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..46f367132120531479a8f58aea14af2d6b78a79d
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/base/BasePageDto.java
@@ -0,0 +1,17 @@
+package com.xforwardai.superdata.base;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class BasePageDto implements Serializable {
+
+ @ApiModelProperty(value = "页码")
+ private int page;
+
+ @ApiModelProperty(value = "页数")
+ private int size;
+
+}
diff --git a/src/main/java/com/xforwardai/superdata/base/BasePageResultVo.java b/src/main/java/com/xforwardai/superdata/base/BasePageResultVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..17394480eca9d87b09706941a4efc3ce146e97ae
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/base/BasePageResultVo.java
@@ -0,0 +1,23 @@
+package com.xforwardai.superdata.base;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class BasePageResultVo implements Serializable {
+
+ @ApiModelProperty(value = "总数")
+ private long total;
+
+ @ApiModelProperty(value = "页码")
+ private int page;
+
+ @ApiModelProperty(value = "页数")
+ private int size;
+
+ @ApiModelProperty(value = "业务数据")
+ private T content;
+
+}
diff --git a/src/main/java/com/xforwardai/superdata/base/CommonResponse.java b/src/main/java/com/xforwardai/superdata/base/CommonResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..3606cb9efd2ad3d5ce8e347d364834e96a4450b7
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/base/CommonResponse.java
@@ -0,0 +1,37 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+package com.xforwardai.superdata.base;
+
+import com.xforwardai.superdata.constants.ResultCode;
+
+public class CommonResponse {
+ public CommonResponse() {
+ }
+
+ public static CommonResult success(Object obj) {
+ return new CommonResult(ResultCode.SUCCEED_CODE, "成功", obj, (Object)null);
+ }
+
+ public static CommonResult success(String msg, Object obj) {
+ return new CommonResult(ResultCode.SUCCEED_CODE, msg, obj, (Object)null);
+ }
+
+ public static CommonResult success(String msg, Object obj, Object ext) {
+ return new CommonResult(ResultCode.SUCCEED_CODE, msg, obj, ext);
+ }
+
+ public static CommonResult error(Object obj) {
+ return new CommonResult(ResultCode.ERROR_CODE, "失败", obj, (Object)null);
+ }
+
+ public static CommonResult error(String msg, Object obj) {
+ return new CommonResult(ResultCode.ERROR_CODE, msg, obj, (Object)null);
+ }
+
+ public static CommonResult error(String msg, Object obj, Object ext) {
+ return new CommonResult(ResultCode.ERROR_CODE, msg, obj, ext);
+ }
+}
diff --git a/src/main/java/com/xforwardai/superdata/base/CommonResult.java b/src/main/java/com/xforwardai/superdata/base/CommonResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..7cf3140954e4b49bb94e0ff8c551f70283011a58
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/base/CommonResult.java
@@ -0,0 +1,150 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+package com.xforwardai.superdata.base;
+
+import com.xforwardai.superdata.enums.ResultEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+
+@ApiModel("通用返回结构")
+public class CommonResult implements Serializable {
+ private static final long serialVersionUID = 6116515098874945764L;
+ @ApiModelProperty("操作代码")
+ private int code;
+ @ApiModelProperty("操作信息")
+ private String message;
+ @ApiModelProperty("返回对象")
+ private T data;
+ @ApiModelProperty("附加对象")
+ private Object ext;
+
+ public CommonResult() {
+ this.code = ResultEnum.SUCCEED.getCode();
+ this.message = ResultEnum.SUCCEED.getMessage();
+ }
+
+ public CommonResult(Exception e) {
+ this.code = ResultEnum.ERROR.getCode();
+ this.message = e.getMessage();
+ }
+
+ public CommonResult(T data) {
+ this.code = ResultEnum.SUCCEED.getCode();
+ this.message = ResultEnum.SUCCEED.getMessage();
+ this.data = data;
+ }
+
+ public CommonResult(int code, String message, T data, Object ext) {
+ this.code = code;
+ this.message = message;
+ this.data = data;
+ this.ext = ext;
+ }
+
+ public int getCode() {
+ return this.code;
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+
+ public T getData() {
+ return this.data;
+ }
+
+ public Object getExt() {
+ return this.ext;
+ }
+
+ public void setCode(final int code) {
+ this.code = code;
+ }
+
+ public void setMessage(final String message) {
+ this.message = message;
+ }
+
+ public void setData(final T data) {
+ this.data = data;
+ }
+
+ public void setExt(final Object ext) {
+ this.ext = ext;
+ }
+
+ public boolean equals(final Object o) {
+ if (o == this) {
+ return true;
+ } else if (!(o instanceof CommonResult)) {
+ return false;
+ } else {
+ CommonResult> other = (CommonResult)o;
+ if (!other.canEqual(this)) {
+ return false;
+ } else if (this.getCode() != other.getCode()) {
+ return false;
+ } else {
+ label49: {
+ Object this$message = this.getMessage();
+ Object other$message = other.getMessage();
+ if (this$message == null) {
+ if (other$message == null) {
+ break label49;
+ }
+ } else if (this$message.equals(other$message)) {
+ break label49;
+ }
+
+ return false;
+ }
+
+ Object this$data = this.getData();
+ Object other$data = other.getData();
+ if (this$data == null) {
+ if (other$data != null) {
+ return false;
+ }
+ } else if (!this$data.equals(other$data)) {
+ return false;
+ }
+
+ Object this$ext = this.getExt();
+ Object other$ext = other.getExt();
+ if (this$ext == null) {
+ if (other$ext != null) {
+ return false;
+ }
+ } else if (!this$ext.equals(other$ext)) {
+ return false;
+ }
+
+ return true;
+ }
+ }
+ }
+
+ protected boolean canEqual(final Object other) {
+ return other instanceof CommonResult;
+ }
+
+ public int hashCode() {
+ int result = 1;
+ result = result * 59 + this.getCode();
+ Object $message = this.getMessage();
+ result = result * 59 + ($message == null ? 43 : $message.hashCode());
+ Object $data = this.getData();
+ result = result * 59 + ($data == null ? 43 : $data.hashCode());
+ Object $ext = this.getExt();
+ result = result * 59 + ($ext == null ? 43 : $ext.hashCode());
+ return result;
+ }
+
+ public String toString() {
+ return "CommonResult(code=" + this.getCode() + ", message=" + this.getMessage() + ", data=" + this.getData() + ", ext=" + this.getExt() + ")";
+ }
+}
diff --git a/src/main/java/com/xforwardai/superdata/cache/ApiInfoCacheMap.java b/src/main/java/com/xforwardai/superdata/cache/ApiInfoCacheMap.java
new file mode 100644
index 0000000000000000000000000000000000000000..7440480666b6166d3902795e8eeb0717a7979462
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/cache/ApiInfoCacheMap.java
@@ -0,0 +1,18 @@
+package com.xforwardai.superdata.cache;
+
+import com.xforwardai.superdata.mysql.entity.dto.ApiInfoDetailDto;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @Description:
+ * @ClassName: com.xforwardai.superdata.cache.ApiInfoCacheMap.java
+ * @date: 2022/3/1 17:48
+ * @author xujian
+ */
+public class ApiInfoCacheMap {
+
+ public static Map API_INFO_MAP = new ConcurrentHashMap<>();
+
+}
diff --git a/src/main/java/com/xforwardai/superdata/config/HomeMvcConfigurer.java b/src/main/java/com/xforwardai/superdata/config/HomeMvcConfigurer.java
new file mode 100644
index 0000000000000000000000000000000000000000..630e055e5ea01ae9a2b1d46bc0733b27935a9b65
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/config/HomeMvcConfigurer.java
@@ -0,0 +1,21 @@
+package com.xforwardai.superdata.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class HomeMvcConfigurer {
+
+ @Bean
+ public WebMvcConfigurer webMvcConfigurer() {
+ return new WebMvcConfigurer() {
+ @Override
+ public void addViewControllers(ViewControllerRegistry registry) {
+ registry.addViewController("/").setViewName("home.html");
+ }
+ };
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/xforwardai/superdata/config/RedisConfig.java b/src/main/java/com/xforwardai/superdata/config/RedisConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..175f2d58ace2a1929686408c60ae688daca35485
--- /dev/null
+++ b/src/main/java/com/xforwardai/superdata/config/RedisConfig.java
@@ -0,0 +1,26 @@
+package com.xforwardai.superdata.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.RedisSerializer;
+
+@Configuration
+public class RedisConfig {
+ /**
+ * 默认redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码,
+ * 使用所以自定义序列化类 将key和val设置为string
+ * @param redisConnectionFactory
+ * @return
+ */
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate