diff --git a/etl-spike/src/main/java/com/etl/spike/EtlSpikeApplication.java b/etl-spike/src/main/java/com/etl/spike/EtlSpikeApplication.java
index 4cae432..d51efca 100644
--- a/etl-spike/src/main/java/com/etl/spike/EtlSpikeApplication.java
+++ b/etl-spike/src/main/java/com/etl/spike/EtlSpikeApplication.java
@@ -1,11 +1,15 @@
package com.etl.spike;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.ComponentScan;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
-@ComponentScan("com.etl.spike.entity")
+@MapperScan("com.etl.spike.mapper")
+@EnableScheduling
+@EnableDiscoveryClient
public class EtlSpikeApplication {
public static void main(String[] args) {
SpringApplication.run(EtlSpikeApplication.class, args);
diff --git a/etl-spike/src/main/java/com/etl/spike/config/RedissonConfig.java b/etl-spike/src/main/java/com/etl/spike/config/RedissonConfig.java
new file mode 100644
index 0000000..605c237
--- /dev/null
+++ b/etl-spike/src/main/java/com/etl/spike/config/RedissonConfig.java
@@ -0,0 +1,34 @@
+package com.etl.spike.config;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * redisson配置类
+ */
+@Configuration
+public class RedissonConfig {
+ @Value ("${redisson.address}")
+ private String addressUrl;
+ @Value ("${redisson.password}")
+ private String password;
+
+ /**
+ * 单机模式配置
+ */
+ @Bean
+ public RedissonClient getRedisson(){
+ Config config = new Config ();
+ config.useSingleServer ()
+ .setAddress (addressUrl).setPassword (password)
+ .setReconnectionTimeout (10000)
+ .setRetryInterval (5000)
+ .setTimeout (10000)
+ .setConnectTimeout (10000);
+ return Redisson.create (config);
+ }
+}
diff --git a/etl-spike/src/main/java/com/etl/spike/controller/GoodsController.java b/etl-spike/src/main/java/com/etl/spike/controller/GoodsController.java
index 5d6e186..8413ff0 100644
--- a/etl-spike/src/main/java/com/etl/spike/controller/GoodsController.java
+++ b/etl-spike/src/main/java/com/etl/spike/controller/GoodsController.java
@@ -1,10 +1,16 @@
package com.etl.spike.controller;
+import com.alibaba.csp.sentinel.annotation.SentinelResource;
+import com.etl.common.result.Result;
+import com.etl.spike.entity.Goods;
+import com.etl.spike.service.IGoodsService;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+
/**
*
* sku商品表 前端控制器
@@ -16,5 +22,20 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/goods")
public class GoodsController {
+ private final IGoodsService goodsService;
+ public GoodsController(IGoodsService goodsService){
+ this.goodsService = goodsService;
+ }
+
+ /**
+ * 测试
+ * @return
+ */
+ @SentinelResource
+ @GetMapping("/test")
+ public Result testList(){
+ List list = goodsService.list ();
+ return Result.success (list);
+ }
}
diff --git a/etl-spike/src/main/java/com/etl/spike/controller/OrderController.java b/etl-spike/src/main/java/com/etl/spike/controller/OrderController.java
index ee77821..2847378 100644
--- a/etl-spike/src/main/java/com/etl/spike/controller/OrderController.java
+++ b/etl-spike/src/main/java/com/etl/spike/controller/OrderController.java
@@ -1,13 +1,24 @@
package com.etl.spike.controller;
+import cn.hutool.crypto.digest.DigestUtil;
+import com.alibaba.csp.sentinel.annotation.SentinelResource;
+import com.etl.common.result.Result;
+import com.etl.spike.entity.request.OrderRequest;
+import com.etl.spike.enums.EnumMsg;
+import com.etl.spike.service.IOrderService;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.RestController;
+import java.util.Objects;
+
/**
*
- * 前端控制器
+ * 前端控制器
*
*
* @author test
@@ -16,5 +27,58 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/order")
public class OrderController {
+ private final StringRedisTemplate redisTemplate;
+ private final IOrderService orderService;
+ public OrderController(StringRedisTemplate redisTemplate , IOrderService orderService){
+ this.redisTemplate = redisTemplate;
+ this.orderService = orderService;
+ }
+ /**
+ * 秒杀
+ *
+ * @return
+ */
+ @PostMapping("/orderGoOn")
+ @SentinelResource
+ public Result orderGoOn(@RequestBody @Validated OrderRequest orderRequest){
+ //判断场次是否存在
+ String key = EnumMsg.REDIS_SMALL_KEY.getMessage () +
+ orderRequest.getId ();
+ if ( !redisTemplate.opsForHash ().hasKey (EnumMsg.REDIS_KEY.getMessage () , key) ) {
+ throw new RuntimeException ("您参与的活动场次不存在");
+ }
+ //判断购买数量是否合法
+ if(orderRequest.getNum () != 1) {
+ throw new RuntimeException ("您的购买数量不合法");
+ }
+ //判断商品id是否在缓存中
+ String hashKey = EnumMsg.REDIS_SMALL_KEY.getMessage ()+orderRequest.getGoodsId ();
+ if ( !redisTemplate.opsForHash ().hasKey (EnumMsg.REDIS_KEY.getMessage () , hashKey) ) {
+ throw new RuntimeException ("商品不存在");
+ }
+ //获取当前时间戳()
+ long timeMillis = System.currentTimeMillis ();
+ //转换为分钟级的时间戳
+ long seconds = timeMillis / 1000 / 60;
+ //加密签名是否合法
+ String sign = orderRequest.getId ().toString () + orderRequest.getId ().toString () + "&" + seconds;
+ //生成MD5值
+ String md5Hex = DigestUtil.md5Hex (sign);
+ if ( !md5Hex.equals (orderRequest.getSign ()) ) {
+ throw new RuntimeException ("验签失败");
+ }
+ //检验库存
+ if( !redisTemplate.opsForHash ().hasKey (EnumMsg.REDIS_KEY.getMessage () , orderRequest.getGoodsId ()) ) {
+ throw new RuntimeException ("该商品库存异常");
+ }
+ String num = Objects.requireNonNull (redisTemplate.opsForHash ().get (EnumMsg.REDIS_GOODS_NUM.getMessage () ,
+ orderRequest.getGoodsId ())).toString ();
+ long goodsNum = Long.parseLong (num);
+ if(goodsNum<=0){
+ throw new RuntimeException ("该商品商品不足");
+ }
+ orderService.orderGoOn();
+ return Result.success ();
+ }
}
diff --git a/etl-spike/src/main/java/com/etl/spike/controller/PdfController.java b/etl-spike/src/main/java/com/etl/spike/controller/PdfController.java
new file mode 100644
index 0000000..f540509
--- /dev/null
+++ b/etl-spike/src/main/java/com/etl/spike/controller/PdfController.java
@@ -0,0 +1,29 @@
+package com.etl.spike.controller;
+
+import com.etl.common.result.Result;
+import com.etl.spike.pdf.ExportPdfTest;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/pdf")
+public class PdfController {
+
+ private final ExportPdfTest exportPdfTest;
+
+ public PdfController(ExportPdfTest exportPdfTest){
+ this.exportPdfTest = exportPdfTest;
+ }
+
+ /**
+ * 导出为pdf
+ * @return
+ * @throws Exception
+ */
+ @GetMapping("/test")
+ public Result test() throws Exception{
+ exportPdfTest.export ();
+ return Result.success ();
+ }
+}
diff --git a/etl-spike/src/main/java/com/etl/spike/controller/TimesGoodsController.java b/etl-spike/src/main/java/com/etl/spike/controller/TimesGoodsController.java
index 628cd62..2293a19 100644
--- a/etl-spike/src/main/java/com/etl/spike/controller/TimesGoodsController.java
+++ b/etl-spike/src/main/java/com/etl/spike/controller/TimesGoodsController.java
@@ -2,7 +2,6 @@ package com.etl.spike.controller;
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.RestController;
/**
@@ -17,4 +16,6 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/times-goods")
public class TimesGoodsController {
+
+
}
diff --git a/etl-spike/src/main/java/com/etl/spike/entity/request/OrderRequest.java b/etl-spike/src/main/java/com/etl/spike/entity/request/OrderRequest.java
new file mode 100644
index 0000000..c03ce2f
--- /dev/null
+++ b/etl-spike/src/main/java/com/etl/spike/entity/request/OrderRequest.java
@@ -0,0 +1,39 @@
+package com.etl.spike.entity.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 下单参数
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OrderRequest {
+ /**
+ * 场次ID
+ */
+ @NotNull(message = "场次编号不能为空")
+ private Long id;
+ /**
+ * 商品ID
+ */
+ @NotNull(message = "商品编号不能为空")
+ private Long goodsId;
+ /**
+ * 加密签名
+ */
+ @NotBlank(message = "加密签名不能为空")
+ private String sign;
+ /**
+ * 购买数量
+ */
+ @NotNull(message = "购买数量不能为空")
+ private Long num;
+}
diff --git a/etl-spike/src/main/java/com/etl/spike/enums/EnumMsg.java b/etl-spike/src/main/java/com/etl/spike/enums/EnumMsg.java
new file mode 100644
index 0000000..4a8a220
--- /dev/null
+++ b/etl-spike/src/main/java/com/etl/spike/enums/EnumMsg.java
@@ -0,0 +1,23 @@
+package com.etl.spike.enums;
+
+
+import lombok.Getter;
+
+/**
+ * 枚举常量类
+ */
+@Getter
+public enum EnumMsg {
+ // 定义一个带有错误码和描述性字符串的枚举常量
+ REDIS_KEY(401, "times:"),
+ REDIS_SMALL_KEY(402, "hashKey:"),
+ REDIS_GOODS_NUM(403,"goodNum:");
+
+ private final int code;
+ private final String message;
+
+ EnumMsg(int code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+}
diff --git a/etl-spike/src/main/java/com/etl/spike/handler/CatchExceptions.java b/etl-spike/src/main/java/com/etl/spike/handler/CatchExceptions.java
new file mode 100644
index 0000000..be1de29
--- /dev/null
+++ b/etl-spike/src/main/java/com/etl/spike/handler/CatchExceptions.java
@@ -0,0 +1,22 @@
+package com.etl.spike.handler;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.etl.common.result.Result;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * 全局异常捕获类
+ */
+@RestControllerAdvice
+@Configuration
+@Log4j2
+public class CatchExceptions {
+ @ExceptionHandler(value = RuntimeException.class)
+ public Result catchException(RuntimeException exception) {
+ log.error("请求异常: [{}]",exception.getMessage(),exception);
+ return Result.error(JSONObject.toJSONString(exception.getMessage()));
+ }
+}
diff --git a/etl-spike/src/main/java/com/etl/spike/job/GoodsRedisJob.java b/etl-spike/src/main/java/com/etl/spike/job/GoodsRedisJob.java
new file mode 100644
index 0000000..f46bcff
--- /dev/null
+++ b/etl-spike/src/main/java/com/etl/spike/job/GoodsRedisJob.java
@@ -0,0 +1,77 @@
+package com.etl.spike.job;
+
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.etl.spike.entity.Times;
+import com.etl.spike.entity.TimesGoods;
+import com.etl.spike.enums.EnumMsg;
+import com.etl.spike.service.ITimesGoodsService;
+import com.etl.spike.service.ITimesService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 定时同步redis
+ */
+@Component
+@Slf4j
+public class GoodsRedisJob {
+
+ private final StringRedisTemplate redisTemplate;
+ private final ITimesService timesService;
+ private final ITimesGoodsService timesGoodsService;
+
+ public GoodsRedisJob(StringRedisTemplate redisTemplate , ITimesService timesService , ITimesGoodsService timesGoodsService){
+ this.redisTemplate = redisTemplate;
+ this.timesService = timesService;
+ this.timesGoodsService = timesGoodsService;
+ }
+
+
+ /**
+ * 开启一个定时任务将mysql中的最近三天的场次,商品信息和库存存入redis
+ */
+ @Scheduled(cron = "0 0 0 * * ?")
+ public void testJob(){
+ log.info ("定时任务执行(-------------- redis场次信息同步 --------------)");
+ //计算三天前的日期
+ LocalDate localDate = LocalDate.now ().minusDays (3);
+ //转换类型
+ LocalDateTime startTime = localDate.atStartOfDay ();
+ //获取当前时间
+ LocalDateTime endTime = LocalDateTime.now ();
+ //查询最近三天的场次
+ List timesList = timesService.list (new LambdaQueryWrapper ().between (Times :: getEndTime ,
+ startTime ,
+ endTime));
+ //校验
+ if( CollectionUtils.isEmpty (timesList) ){
+ throw new RuntimeException ("最近三天暂无任何活动");
+ }
+ //获取全部的id集合
+ List integers = timesList.stream ().map (Times :: getId).collect (Collectors.toList ());
+ //查询场次表和商品中间表
+ List timesGoods = timesGoodsService.list (new LambdaQueryWrapper ().in (TimesGoods::getTimesId, integers));
+ //校验
+ if( CollectionUtils.isEmpty (timesGoods) ){
+ throw new RuntimeException ("最近三天暂无任何活动");
+ }
+ //遍历存入redis
+ timesGoods.forEach (item -> {
+ String redisKey = EnumMsg.REDIS_SMALL_KEY.getMessage ()
+ + item.getId ();
+ //存入redis的hash结构,键用event前缀拼接时间戳+场次id
+ redisTemplate.opsForHash ().put (EnumMsg.REDIS_KEY.getMessage (), redisKey , JSON.toJSONString (item));
+ //库存存入redis
+ redisTemplate.opsForHash ().put (EnumMsg.REDIS_GOODS_NUM.getMessage () , item.getGoodsId (), item.getGoodsNum ());
+ });
+ }
+}
diff --git a/etl-spike/src/main/java/com/etl/spike/pdf/ExportPdfTest.java b/etl-spike/src/main/java/com/etl/spike/pdf/ExportPdfTest.java
new file mode 100644
index 0000000..6f0aad4
--- /dev/null
+++ b/etl-spike/src/main/java/com/etl/spike/pdf/ExportPdfTest.java
@@ -0,0 +1,97 @@
+package com.etl.spike.pdf;
+
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.*;
+import com.itextpdf.tool.xml.XMLWorkerFontProvider;
+import com.itextpdf.tool.xml.XMLWorkerHelper;
+import org.jsoup.Jsoup;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ * @description 导出pdf文件
+ * @date 2018/3/16 16:48$
+ */
+@Component
+public class ExportPdfTest {
+
+ public void export() throws Exception {
+ System.out.println ("开始执行");
+ Document document = new Document(PageSize.A4);
+ //设置要导出的文件名
+ OutputStream outputStream = new FileOutputStream (new File("D:\\abc\\test.pdf"));
+ PdfWriter writer = PdfWriter.getInstance(document, outputStream);
+ document.open();
+ //获取字体文件目录
+ String fontDir = this.getClass().getClassLoader().getResource("font").getFile();
+ //注册字体文件
+ XMLWorkerFontProvider xmlWorkerFontProvider = new XMLWorkerFontProvider(fontDir);
+ //设置中文字体,本文举例使用的是仿宋
+ BaseFont baseFont = BaseFont.createFont("font/SIMFANG.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
+ Font font12 = new Font(baseFont, 12);
+
+ //页眉,是可以双层或更多,取决于放置的坐标
+ PdfContentByte cb = writer.getDirectContent();
+ //页眉左上
+ Phrase leftp1 = new Phrase("页眉左上", font12);
+ ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, leftp1, document.left(), document.top() + 13, 0);
+ //页眉左下
+ Phrase leftp2 = new Phrase("页眉左下:", font12);
+ ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, leftp2, document.left(), document.top(), 0);
+ //页眉右上
+ Phrase rightp1 = new Phrase("页眉右上:", font12);
+ float rightp1WidthPoint = baseFont.getWidthPoint(rightp1.getContent(), 12);
+ ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, rightp1, document.right() - rightp1WidthPoint, document.top() + 13, 0);
+ //页眉右下
+ Phrase rightp2 = new Phrase("页眉右下:", font12);
+ float rightp2WidthPoint = baseFont.getWidthPoint(rightp2.getContent(), 12);
+ ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, rightp2, document.right() - rightp2WidthPoint, document.top(), 0);
+
+ //下划线
+ PdfContentByte canvas = writer.getDirectContent();
+ CMYKColor magentaColor = new CMYKColor(1.f, 1.f, 1.f, 1.f);
+ canvas.setColorStroke(magentaColor);
+ canvas.moveTo(document.left(), document.top() - 4);
+ canvas.lineTo(document.right(), document.top() - 4);
+ canvas.closePathStroke();
+
+ //标题
+ Font h1 = new Font(baseFont, 20, Font.BOLD);//创建全文标题字体,参数分别是字体类别,字号,效果
+ Paragraph paragraphTitle = new Paragraph("标题测试", h1);//设置文本内容和要使用的字体
+ paragraphTitle.setAlignment(Element.ALIGN_CENTER);//设置居中
+ document.add(paragraphTitle);
+
+ //正文标题1
+ Font h3 = new Font(baseFont, 14, Font.BOLD);//创建标题字体
+ Paragraph paragraphH1 = new Paragraph("正文标题1", h3);
+ document.add(paragraphH1);
+ //正文1
+ Paragraph paragraphText1 = new Paragraph("你能做到最好,你能做到最好,你能做到最好,你能做到最好,你能做到最好,你能做到最好,你能做到最好。", font12);
+ document.add(paragraphText1);
+
+ //正文2,html标签内容
+ String content = "
eah, you could be the greatest
你会成为最伟大的人
You can be the best
你能做到最好
You can be the King Kong banging on your chest
你能像金刚一样自信满满的敲打胸脯
You could beat the world
你可以征服全世界
You could beat the war
能够赢得一切战争
You could talk to God, go banging on his door
甚至能够与神对话 去敲打他的门
You can throw your hands up
你能自信的举起双手
You can be the clock
你可以与时间抗争
You can move a mountain
你有移山之力
You can break rocks
你能击碎岩石
You can be a master
你可以成为命运主宰
Don't wait for luck
无需等待运气垂青
Dedicate yourself and you can find yourself
放手一搏后你会恍然发现
Standing in the hall of fame
你已身处名人堂之中
";
+ //html转换成普通文字,方法如下:
+ org.jsoup.nodes.Document contentDoc = Jsoup.parseBodyFragment(content);
+ org.jsoup.nodes.Document.OutputSettings outputSettings = new org.jsoup.nodes.Document.OutputSettings();
+ outputSettings.syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml);
+ contentDoc.outputSettings(outputSettings);
+ String parsedHtml = contentDoc.outerHtml();
+ //这儿的font-family不支持汉字,{font-family:仿宋} 是不可以的。
+ InputStream cssIs = new ByteArrayInputStream ("* {font-family: fangsong;}".getBytes("UTF-8"));
+ //第四个参数是html中的css文件的输入流
+ //第五个参数是字体提供者,使用系统默认支持的字体时,可以不传。
+ XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(parsedHtml.getBytes()), cssIs, xmlWorkerFontProvider);
+
+ //页脚
+ PdfContentByte cj = writer.getDirectContent();
+ Phrase leftp3 = new Phrase("页脚左侧", font12);
+ ColumnText.showTextAligned(cj, Element.ALIGN_LEFT, leftp3, document.left(), document.bottom(), 0);
+ Phrase rightp3 = new Phrase("页脚右侧", font12);
+ final float rightp3WidthPoint = baseFont.getWidthPoint(rightp3.getContent(), 12);
+ ColumnText.showTextAligned(cj, Element.ALIGN_LEFT, rightp3, document.right() - rightp3WidthPoint, document.bottom(), 0);
+
+ //关闭
+ document.close();
+}}
diff --git a/etl-spike/src/main/java/com/etl/spike/service/IOrderService.java b/etl-spike/src/main/java/com/etl/spike/service/IOrderService.java
index 4c1d84e..0e73140 100644
--- a/etl-spike/src/main/java/com/etl/spike/service/IOrderService.java
+++ b/etl-spike/src/main/java/com/etl/spike/service/IOrderService.java
@@ -14,4 +14,5 @@ import com.etl.spike.entity.Order;
*/
public interface IOrderService extends IService< Order > {
+ boolean orderGoOn();
}
diff --git a/etl-spike/src/main/java/com/etl/spike/serviceImpl/OrderServiceImpl.java b/etl-spike/src/main/java/com/etl/spike/serviceImpl/OrderServiceImpl.java
index eb35434..c13c1f0 100644
--- a/etl-spike/src/main/java/com/etl/spike/serviceImpl/OrderServiceImpl.java
+++ b/etl-spike/src/main/java/com/etl/spike/serviceImpl/OrderServiceImpl.java
@@ -17,5 +17,12 @@ import org.springframework.stereotype.Service;
*/
@Service
public class OrderServiceImpl extends ServiceImpl< OrderMapper, Order > implements IOrderService {
-
+ /**
+ * 参数校验无误后推送队列
+ * @return
+ */
+ @Override
+ public boolean orderGoOn(){
+ return false;
+ }
}
diff --git a/etl-spike/src/main/resources/application.properties b/etl-spike/src/main/resources/application.properties
index 741395b..2e51f33 100644
--- a/etl-spike/src/main/resources/application.properties
+++ b/etl-spike/src/main/resources/application.properties
@@ -12,3 +12,11 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://47.101.130.221:3306/spike?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=ays@123
+
+spring.cloud.sentinel.transport.dashboard=localhost:8333
+spring.cloud.sentinel.transport.port=localhost:8719
+# ??????
+management.endpoints.web.exposure.include= *
+spring.main.allow-circular-references=true
+redisson.addresses=redis://47.101.130.221:6379
+redisson.password=123456
diff --git a/etl-spike/src/main/resources/font/simfang.ttf b/etl-spike/src/main/resources/font/simfang.ttf
new file mode 100644
index 0000000..68334e2
Binary files /dev/null and b/etl-spike/src/main/resources/font/simfang.ttf differ
diff --git a/etl-spike/src/main/resources/mapper/GoodsMapper.xml b/etl-spike/src/main/resources/mapper/GoodsMapper.xml
deleted file mode 100644
index b7b36ce..0000000
--- a/etl-spike/src/main/resources/mapper/GoodsMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/etl-spike/src/main/resources/mapper/OrderItemMapper.xml b/etl-spike/src/main/resources/mapper/OrderItemMapper.xml
deleted file mode 100644
index 84a658f..0000000
--- a/etl-spike/src/main/resources/mapper/OrderItemMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/etl-spike/src/main/resources/mapper/OrderMapper.xml b/etl-spike/src/main/resources/mapper/OrderMapper.xml
deleted file mode 100644
index 6673198..0000000
--- a/etl-spike/src/main/resources/mapper/OrderMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/etl-spike/src/main/resources/mapper/TimesGoodsMapper.xml b/etl-spike/src/main/resources/mapper/TimesGoodsMapper.xml
deleted file mode 100644
index 5c20a98..0000000
--- a/etl-spike/src/main/resources/mapper/TimesGoodsMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/etl-spike/src/main/resources/mapper/TimesMapper.xml b/etl-spike/src/main/resources/mapper/TimesMapper.xml
deleted file mode 100644
index bbb0757..0000000
--- a/etl-spike/src/main/resources/mapper/TimesMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-