From 3cb78efaf4a5ae4251820e650f97b5ba9bdac0ab Mon Sep 17 00:00:00 2001 From: zheng Date: Sat, 6 Jul 2024 21:23:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[=E9=87=8D=E6=9E=84]=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=BE=AE=E6=9C=8D=E5=8A=A1=E9=85=8D=E7=BD=AE=E5=8F=8A=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=9C=8D=E5=8A=A1=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将订单服务接口及实现类更名为更通用的`OrderService`。 -移除`SuccessKilledMongoService`及相关DTO,改为使用`OrderDTO`。 - 应用`@FeignClient`注解并实现fallback机制。 - 修改了配置文件中的数据源配置及Nacos配置。 - 移除无用的`bootstrap.properties`文件。 - 更新了POM文件,移除了一些不必要的依赖。 - 优化了日志记录方式。 - 删除了废弃的Controller和Service实现。 此次重构主要集中在订单服务的实现和微服务配置的调整上,旨在提高代码的可读性和可维护性,同时减少了一些不必要的资源开销。 --- .../src/main/resources/application.yml | 41 +--- .../common/controller/OssFileController.java | 3 + .../common/model/mongo/FileNameMapping.java | 4 +- .../src/main/resources/application.yml | 15 +- goodskill-gateway/pom.xml | 8 +- .../service/DynamicRouteConfigWatcher.java | 6 +- .../src/main/resources/application.yml | 71 ++----- .../src/main/resources/bootstrap.yml | 24 --- goodskill-job/pom.xml | 8 +- .../src/main/resources/application.yml | 7 + .../src/main/resources/bootstrap.properties | 7 - .../goodskill-order-api/pom.xml | 4 + .../com/goodskill/order/api/OrderService.java | 70 ++++++ .../order/api/OrderServiceFallback.java | 21 ++ .../order/api/SuccessKilledMongoService.java | 33 --- .../{SuccessKilledDto.java => OrderDTO.java} | 2 +- .../goodskill-order-service/pom.xml | 14 +- .../com/goodskill/order/OrderApplication.java | 38 ++-- .../order/controller/OrderController.java | 41 ++++ .../SuceessKillMongoController.java | 37 ---- .../entity/{SuccessKilled.java => Order.java} | 21 +- .../order/repository/OrderRepository.java | 13 ++ .../repository/SuceessKillRepository.java | 15 -- .../impl/MongoReactiveServiceImpl.java | 40 ---- .../order/service/impl/OrderServiceImpl.java | 42 ++++ .../src/main/resources/application.yml | 51 +---- .../src/main/resources/bootstrap.properties | 7 - .../goodskill-service/pom.xml | 12 +- .../goodskill/service/SeckillApplication.java | 1 + .../service/controller/GoodsController.java | 50 +---- .../handler/MongoPreRequestHandler.java | 6 +- .../impl/dubbo/SeckillServiceImpl.java | 6 +- .../src/main/resources/application.yml | 200 ++++-------------- .../src/main/resources/bootstrap.properties | 13 -- .../handler/MongoPreRequestHandlerTest.java | 6 +- .../service/impl/SeckillServiceImplTest.java | 8 +- .../oss/MinioAutoConfiguration.java | 2 + goodskill-web/pom.xml | 14 +- .../src/main/resources/application.yml | 73 +------ .../src/main/resources/bootstrap.properties | 8 - 40 files changed, 385 insertions(+), 657 deletions(-) delete mode 100644 goodskill-gateway/src/main/resources/bootstrap.yml delete mode 100644 goodskill-job/src/main/resources/bootstrap.properties create mode 100644 goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderService.java create mode 100644 goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderServiceFallback.java delete mode 100644 goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/SuccessKilledMongoService.java rename goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/entity/{SuccessKilledDto.java => OrderDTO.java} (89%) create mode 100644 goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/OrderController.java delete mode 100644 goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/SuceessKillMongoController.java rename goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/entity/{SuccessKilled.java => Order.java} (69%) create mode 100644 goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/OrderRepository.java delete mode 100644 goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/SuceessKillRepository.java delete mode 100644 goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/MongoReactiveServiceImpl.java create mode 100644 goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/OrderServiceImpl.java delete mode 100644 goodskill-order-provider/goodskill-order-service/src/main/resources/bootstrap.properties delete mode 100644 goodskill-seckill-provider/goodskill-service/src/main/resources/bootstrap.properties delete mode 100644 goodskill-web/src/main/resources/bootstrap.properties diff --git a/goodskill-auth/auth-service/src/main/resources/application.yml b/goodskill-auth/auth-service/src/main/resources/application.yml index a9ecae93..8d2358f4 100644 --- a/goodskill-auth/auth-service/src/main/resources/application.yml +++ b/goodskill-auth/auth-service/src/main/resources/application.yml @@ -4,17 +4,18 @@ server: spring: application: name: goodskill-auth - datasource: - username: root - password: Password123 - url: jdbc:mysql://mysql:3306/seckill?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false cloud: nacos: username: nacos password: nacos server-addr: nacos:8848 config: - import: optional:nacos:goodskill-auth-service.yml + import: optional:nacos:goodskill-common-connection.yml + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://mysql:3306/seckill?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false + username: root + password: Password123 flyway: ##是否开启自动升级表结构功能 enabled: true @@ -22,37 +23,7 @@ spring: clean-disabled: true locations: - classpath:db/migration/mysql - data: - redis: - password: 123456 - -management: - endpoint: - health: - show-details: always - endpoints: - web: - exposure: - include: '*' -############## Sa-Token 配置 (文档: https://sa-token.cc) ############## -sa-token: - # token 名称(同时也是 cookie 名称) - token-name: access_token - # token 有效期(单位:秒) 默认30天,-1 代表永久有效 - timeout: 2592000 - # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 - active-timeout: -1 - # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) - is-concurrent: true - # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) - is-share: true - # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) - token-style: simple-uuid - # 是否输出操作日志 - is-log: true - # 关闭banner打印 - is-print: true logging: level: com.goodskill: debug diff --git a/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/controller/OssFileController.java b/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/controller/OssFileController.java index ba0354f8..b0c396b3 100644 --- a/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/controller/OssFileController.java +++ b/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/controller/OssFileController.java @@ -19,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; +import java.util.Date; import java.util.Optional; import java.util.UUID; @@ -76,6 +77,8 @@ public Result uploadFile(@RequestParam("file") MultipartFile file) { fileNameMapping.setOriginalFileName(file.getOriginalFilename()); fileNameMapping.setUniqueFileName(uniqueFileName); fileNameMapping.setFileMd5(fileMd5); + fileNameMapping.setCreateTime(new Date()); + fileNameMapping.setUpdateTime(new Date()); fileNameMappingRepository.save(fileNameMapping); // 返回上传文件的 URL diff --git a/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/model/mongo/FileNameMapping.java b/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/model/mongo/FileNameMapping.java index e3601924..d6738de5 100644 --- a/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/model/mongo/FileNameMapping.java +++ b/goodskill-common/goodskill-common-service/src/main/java/com/goodskill/common/model/mongo/FileNameMapping.java @@ -2,15 +2,15 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; -import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.MongoId; import java.util.Date; @Document(collection = "oss_file_name_mapping") @Data public class FileNameMapping { - @Id + @MongoId private String id; /** diff --git a/goodskill-common/goodskill-common-service/src/main/resources/application.yml b/goodskill-common/goodskill-common-service/src/main/resources/application.yml index cace286d..e4fa721a 100644 --- a/goodskill-common/goodskill-common-service/src/main/resources/application.yml +++ b/goodskill-common/goodskill-common-service/src/main/resources/application.yml @@ -2,21 +2,18 @@ server: port: 18049 spring: + profiles: + active: dev #系统名称 application: name: goodskill-common - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://mysql:3306/gs_sys?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false - username: root - password: Password123 cloud: nacos: username: nacos password: nacos server-addr: nacos:8848 config: - import: optional:nacos:goodskill-common-service.yml + import: optional:nacos:goodskill-common-connection.yml main: allow-circular-references: true flyway: @@ -41,12 +38,6 @@ dubbo: # cloud: # subscribed-services: "" -## oss配置 -minio: - endpoint: http://localhost:19000 - accessKey: YghdgTEEJnvvrUm5nX70 - secretKey: hCv6xU4TEembK6Fr2pHvJWxlijKUXySDIS4sSTMK - bucketName: goodskill seata: enabled: false diff --git a/goodskill-gateway/pom.xml b/goodskill-gateway/pom.xml index 4c3db3fe..6561aa4a 100644 --- a/goodskill-gateway/pom.xml +++ b/goodskill-gateway/pom.xml @@ -78,10 +78,10 @@ com.github.xiaoymin knife4j-gateway-spring-boot-starter - - org.springframework.cloud - spring-cloud-starter-bootstrap - + + + + com.goodskill goodskill-core diff --git a/goodskill-gateway/src/main/java/com/goodskill/gateway/service/DynamicRouteConfigWatcher.java b/goodskill-gateway/src/main/java/com/goodskill/gateway/service/DynamicRouteConfigWatcher.java index 1bd5f1c0..5f2ff893 100644 --- a/goodskill-gateway/src/main/java/com/goodskill/gateway/service/DynamicRouteConfigWatcher.java +++ b/goodskill-gateway/src/main/java/com/goodskill/gateway/service/DynamicRouteConfigWatcher.java @@ -32,13 +32,13 @@ public class DynamicRouteConfigWatcher implements CommandLineRunner { private DynamicRouteRefresh dynamicRouteService; private ConfigService configService; - @Value("${spring.cloud.nacos.discovery.server-addr}") + @Value("${spring.cloud.nacos.server-addr}") private String NACOS_SERVER_ADDR; - @Value("${spring.cloud.nacos.discovery.namespace:}") + @Value("${spring.cloud.nacos.namespace:}") private String NACOS_NAMESPACE; - @Value("${spring.cloud.nacos.discovery.group:DEFAULT_GROUP}") + @Value("${spring.cloud.nacos.group:DEFAULT_GROUP}") private String NACOS_ROUTE_GROUP; @Value("${spring.cloud.nacos.username}") diff --git a/goodskill-gateway/src/main/resources/application.yml b/goodskill-gateway/src/main/resources/application.yml index 405cc1ba..b5933c9a 100644 --- a/goodskill-gateway/src/main/resources/application.yml +++ b/goodskill-gateway/src/main/resources/application.yml @@ -1,26 +1,28 @@ server: port: 80 spring: + profiles: + active: dev + application: + name: goodskill-gateway + config: + import: optional:nacos:goodskill-common-connection.yml + main: + allow-bean-definition-overriding: true cloud: + nacos: + username: nacos + password: nacos + server-addr: nacos:8848 sentinel: filter: ## 网关服务此项需配置为false(若在网关流控控制台上看到了 URL 资源,就是此配置项没有置为 false) enabled: false - transport: - port: 8719 - ## 默认端口8080,已改为自定义18088端口,通过http://127.0.0.1:18088/#/dashboard访问 - dashboard: localhost:18088 ##使用nacos配置中心存储限流规则 datasource: ds0: nacos: - data-id: ${spring.application.name}-flow-rules - # data-type: json - group-id: DEFAULT_GROUP rule-type: gw-flow - server-addr: nacos:8848 - username: nacos - password: nacos gateway: ##开启指标监控 metrics: @@ -63,22 +65,7 @@ spring: - Path=/api/test filters: - RedirectTo=302, https://www.baidu.com, true - data: - redis: - password: 123456 - host: redis - main: - allow-bean-definition-overriding: true -# 监控 -management: - endpoint: - health: - show-details: always - endpoints: - web: - exposure: - include: '*' nacos: router: @@ -88,9 +75,11 @@ nacos: #接口白名单 security: ignore: + ##普通接口白名单 whiteUrl: - "/api/auth/login" - "/api/web/**" + ##登录用户接口白名单 loginUserWhiteUrls: - "/api/xxx" @@ -131,37 +120,5 @@ knife4j: # 指定版本号(Swagger2|OpenAPI3) version : openapi3 -############## Sa-Token 配置 (文档: https://sa-token.cc) ############## -sa-token: - # token 名称(同时也是 cookie 名称) - token-name: access_token - # token 有效期(单位:秒) 默认30天,-1 代表永久有效 - timeout: 2592000 - # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 - active-timeout: -1 - # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) - is-concurrent: true - # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) - is-share: true - # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) - token-style: simple-uuid - # 是否输出操作日志 - is-log: true - # 关闭banner打印 - is-print: true - ---- -spring: - config: - activate: - on-profile: docker,dev - cloud: - nacos: - server-addr: nacos:8848 - sentinel: - datasource: - ds0: - nacos: - server-addr: nacos:8848 diff --git a/goodskill-gateway/src/main/resources/bootstrap.yml b/goodskill-gateway/src/main/resources/bootstrap.yml deleted file mode 100644 index 97b31de6..00000000 --- a/goodskill-gateway/src/main/resources/bootstrap.yml +++ /dev/null @@ -1,24 +0,0 @@ -spring: - #系统名称 - application: - name: goodskill-gateway - #微服务配置 - cloud: - nacos: - username: nacos - password: nacos - discovery: - enabled: true - server-addr: nacos:8848 - config: - enabled: ${spring.cloud.nacos.discovery.enabled} - server-addr: ${spring.cloud.nacos.discovery.server-addr} - file-extension: yml - prefix: ${spring.application.name} - profiles: - active: dev - main: - allow-circular-references: true - allow-bean-definition-overriding: true - - diff --git a/goodskill-job/pom.xml b/goodskill-job/pom.xml index ec94c645..993ed4da 100644 --- a/goodskill-job/pom.xml +++ b/goodskill-job/pom.xml @@ -63,10 +63,10 @@ org.springframework.cloud spring-cloud-starter-openfeign - - org.springframework.cloud - spring-cloud-starter-bootstrap - + + + + diff --git a/goodskill-job/src/main/resources/application.yml b/goodskill-job/src/main/resources/application.yml index 13eb2514..2f7d44a5 100644 --- a/goodskill-job/src/main/resources/application.yml +++ b/goodskill-job/src/main/resources/application.yml @@ -27,6 +27,13 @@ elasticjob: spring: application: name: goodskill-job + cloud: + nacos: + username: nacos + password: nacos + server-addr: nacos:8848 + config: + import: optional:nacos:goodskill-common-connection.yml main: allow-circular-references: true diff --git a/goodskill-job/src/main/resources/bootstrap.properties b/goodskill-job/src/main/resources/bootstrap.properties deleted file mode 100644 index c5053d95..00000000 --- a/goodskill-job/src/main/resources/bootstrap.properties +++ /dev/null @@ -1,7 +0,0 @@ -spring.application.name=goodskill-job -spring.cloud.nacos.config.server-addr=nacos:8848 -spring.cloud.nacos.discovery.server-addr=nacos:8848 -spring.cloud.nacos.config.file-extension=yml -spring.profiles.active=dev -spring.cloud.nacos.username=nacos -spring.cloud.nacos.password=nacos \ No newline at end of file diff --git a/goodskill-order-provider/goodskill-order-api/pom.xml b/goodskill-order-provider/goodskill-order-api/pom.xml index c1a6a763..1de9d799 100644 --- a/goodskill-order-provider/goodskill-order-api/pom.xml +++ b/goodskill-order-provider/goodskill-order-api/pom.xml @@ -30,6 +30,10 @@ spring-cloud-stream provided + + org.springframework.cloud + spring-cloud-commons + diff --git a/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderService.java b/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderService.java new file mode 100644 index 00000000..66f5c1ee --- /dev/null +++ b/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderService.java @@ -0,0 +1,70 @@ +package com.goodskill.order.api; + +import com.goodskill.order.entity.OrderDTO; +import org.springframework.cloud.client.circuitbreaker.NoFallbackAvailableException; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +/** + * @author techa03 + * @date 2019/4/6 + */ +@FeignClient(value = "goodskill-order", fallback = OrderServiceFallback.class) +public interface OrderService { + + /** + * @param seckillId + */ + @DeleteMapping("/deleteRecord") + Boolean deleteRecord(@RequestParam("seckillId") long seckillId); + + /** + * @param orderDTO + * @return + */ + @PostMapping("/saveRecord") + Boolean saveRecord(@RequestBody OrderDTO orderDTO); + + /** + * + * @param seckillId@return + */ + @GetMapping("/count") + long count(@RequestParam("seckillId") long seckillId); + + +} + + +//@Component +class OrderServiceFallbackFactory implements FallbackFactory { + + @Override + public OrderServiceFallback create(Throwable cause) { + cause.printStackTrace(); + return new OrderServiceFallback(); + } +} + +@Component +class OrderServiceFallback implements OrderService { + public Boolean deleteRecord(long seckillId) { + return false; + } + + public Boolean saveRecord(OrderDTO orderDTO) { + return false; + } + + public long count(long seckillId) { + throw new NoFallbackAvailableException("Boom!", new RuntimeException()); + } + +} + + + + + diff --git a/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderServiceFallback.java b/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderServiceFallback.java new file mode 100644 index 00000000..47b0ab01 --- /dev/null +++ b/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/OrderServiceFallback.java @@ -0,0 +1,21 @@ +//package com.goodskill.order.api; +// +//import com.goodskill.order.api.OrderService; +//import com.goodskill.order.entity.OrderDTO; +//import org.springframework.cloud.client.circuitbreaker.NoFallbackAvailableException; +//import org.springframework.stereotype.Component; +// +//@Component +//public class OrderServiceFallback implements OrderService { +// public Boolean deleteRecord(long seckillId) { +// return false; +// } +// +// public Boolean saveRecord(OrderDTO orderDTO) { +// return false; +// } +// +// public long count(long seckillId) { +// throw new NoFallbackAvailableException("Boom!", new RuntimeException()); +// } +//} diff --git a/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/SuccessKilledMongoService.java b/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/SuccessKilledMongoService.java deleted file mode 100644 index b1795b4b..00000000 --- a/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/api/SuccessKilledMongoService.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.goodskill.order.api; - -import com.goodskill.order.entity.SuccessKilledDto; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.*; - -/** - * @author techa03 - * @date 2019/4/6 - */ -@FeignClient("goodskill-order") -public interface SuccessKilledMongoService { - - /** - * @param seckillId - */ - @DeleteMapping("/deleteRecord") - Boolean deleteRecord(@RequestParam("seckillId") long seckillId); - - /** - * @param successKilledDto - * @return - */ - @PostMapping("/saveRecord") - Boolean saveRecord(@RequestBody SuccessKilledDto successKilledDto); - - /** - * - * @param seckillId@return - */ - @GetMapping("/count") - long count(@RequestParam("seckillId") long seckillId); -} diff --git a/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/entity/SuccessKilledDto.java b/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/entity/OrderDTO.java similarity index 89% rename from goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/entity/SuccessKilledDto.java rename to goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/entity/OrderDTO.java index 4b64f8bf..bd010816 100644 --- a/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/entity/SuccessKilledDto.java +++ b/goodskill-order-provider/goodskill-order-api/src/main/java/com/goodskill/order/entity/OrderDTO.java @@ -12,7 +12,7 @@ * @date 2019/4/3 */ @Data -public class SuccessKilledDto implements Serializable { +public class OrderDTO implements Serializable { @Serial private static final long serialVersionUID=1L; diff --git a/goodskill-order-provider/goodskill-order-service/pom.xml b/goodskill-order-provider/goodskill-order-service/pom.xml index f88fab5f..9a4fc28b 100644 --- a/goodskill-order-provider/goodskill-order-service/pom.xml +++ b/goodskill-order-provider/goodskill-order-service/pom.xml @@ -21,10 +21,6 @@ org.springframework.boot spring-boot-starter-data-mongodb - - org.mongodb - mongodb-driver-reactivestreams - io.projectreactor reactor-core @@ -55,7 +51,7 @@ org.springframework.boot - spring-boot-starter-webflux + spring-boot-starter com.alibaba.cloud @@ -78,10 +74,14 @@ + + + + - org.springframework.cloud - spring-cloud-starter-bootstrap + org.springframework.boot + spring-boot-starter-web diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/OrderApplication.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/OrderApplication.java index bfa1a5e1..0784d1f2 100644 --- a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/OrderApplication.java +++ b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/OrderApplication.java @@ -1,14 +1,15 @@ package com.goodskill.order; -import com.goodskill.order.entity.SuccessKilledDto; -import com.goodskill.order.service.impl.MongoReactiveServiceImpl; +import com.goodskill.order.entity.OrderDTO; +import com.goodskill.order.service.impl.OrderServiceImpl; import com.goodskill.order.vo.SeckillMockSaveVo; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.annotation.Bean; -import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories; -import reactor.core.publisher.Flux; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import java.math.BigInteger; import java.util.Date; @@ -18,14 +19,18 @@ * @author heng */ @SpringBootApplication -@EnableReactiveMongoRepositories(basePackages = "com.goodskill.order.repository") +@EnableMongoRepositories(basePackages = "com.goodskill.order.repository") +@Slf4j public class OrderApplication { @Autowired - private MongoReactiveServiceImpl mongoReactiveService; + private OrderServiceImpl mongoService; public static void main(String[] args) { - SpringApplication.run(OrderApplication.class, args); + new SpringApplicationBuilder(OrderApplication.class) + .web(WebApplicationType.SERVLET) + .registerShutdownHook(true) + .run(args); } /** @@ -34,14 +39,15 @@ public static void main(String[] args) { * @return */ @Bean - public Consumer> seckillMongoSave() { - return saveVoFlux -> saveVoFlux.flatMap(it -> { - SuccessKilledDto successKilledDto = new SuccessKilledDto(); - successKilledDto.setSeckillId(BigInteger.valueOf(it.getSeckillId())); - successKilledDto.setUserPhone(it.getUserPhone()); - successKilledDto.setCreateTime(new Date()); - return mongoReactiveService.saveRecord(successKilledDto); - }).subscribe(); + public Consumer seckillMongoSave() { + return it -> { + log.info("接收到消息:{}", it); + OrderDTO orderDTO = new OrderDTO(); + orderDTO.setSeckillId(BigInteger.valueOf(it.getSeckillId())); + orderDTO.setUserPhone(it.getUserPhone()); + orderDTO.setCreateTime(new Date()); + mongoService.saveRecord(orderDTO); + }; } } diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/OrderController.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/OrderController.java new file mode 100644 index 00000000..e58f1002 --- /dev/null +++ b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/OrderController.java @@ -0,0 +1,41 @@ +package com.goodskill.order.controller; + +import com.goodskill.order.entity.OrderDTO; +import com.goodskill.order.service.impl.OrderServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author heng + */ +@Slf4j +@RestController +public class OrderController { + @Autowired + private OrderServiceImpl orderService; + + @DeleteMapping("/deleteRecord") + public Boolean deleteRecord(long seckillId) { + return orderService.deleteRecord(seckillId); + } + + @PostMapping("/saveRecord") + public Boolean saveRecord(OrderDTO orderDTO) { + return orderService.saveRecord(orderDTO); + } + + @GetMapping("/count") + public Long count(long seckillId) throws InterruptedException { + // 模拟一个空指针 + String str = null; + str.length(); + log.info("count start"); + Thread.sleep(10000L); + return orderService.count(seckillId); + } + +} diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/SuceessKillMongoController.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/SuceessKillMongoController.java deleted file mode 100644 index c7a50a89..00000000 --- a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/controller/SuceessKillMongoController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.goodskill.order.controller; - -import com.goodskill.order.entity.SuccessKilledDto; -import com.goodskill.order.service.impl.MongoReactiveServiceImpl; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; -import reactor.core.publisher.Mono; - -/** - * @author heng - */ -@Slf4j -@RestController -public class SuceessKillMongoController { - @Autowired - private MongoReactiveServiceImpl mongoReactiveService; - - @DeleteMapping("/deleteRecord") - public Mono deleteRecord(long seckillId) { - return mongoReactiveService.deleteRecord(seckillId); - } - - @PostMapping("/saveRecord") - public Mono saveRecord(SuccessKilledDto successKilledDto) { - return mongoReactiveService.saveRecord(successKilledDto); - } - - @GetMapping("/count") - public Mono count(long seckillId) { - return mongoReactiveService.count(seckillId); - } - -} diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/entity/SuccessKilled.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/entity/Order.java similarity index 69% rename from goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/entity/SuccessKilled.java rename to goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/entity/Order.java index 18cd40da..ad44844e 100644 --- a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/entity/SuccessKilled.java +++ b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/entity/Order.java @@ -9,28 +9,47 @@ import java.util.Date; /** + * 库存实体 * @author techa03 * @date 2020/5/24 */ @Data @Builder @Document -public class SuccessKilled { +public class Order { @Id private String id; + /** + * 秒杀活动id + */ private BigInteger seckillId; + /** + * 用户手机号 + */ private String userPhone; + /** + * 状态 + */ private Byte status; private Date createTime; + /** + * 服务器ip + */ private String serverIp; + /** + * 用户ip + */ private String userIp; + /** + * 用户id + */ private String userId; } diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/OrderRepository.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/OrderRepository.java new file mode 100644 index 00000000..3ccc3edc --- /dev/null +++ b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/OrderRepository.java @@ -0,0 +1,13 @@ +package com.goodskill.order.repository; + +import com.goodskill.order.entity.Order; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.math.BigInteger; + +public interface OrderRepository extends MongoRepository { + + void deleteBySeckillId(BigInteger seckillId); + + long countBySeckillId(BigInteger seckillId); +} diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/SuceessKillRepository.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/SuceessKillRepository.java deleted file mode 100644 index 1a65866e..00000000 --- a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/repository/SuceessKillRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.goodskill.order.repository; - -import com.goodskill.order.entity.SuccessKilled; -import org.springframework.data.mongodb.repository.ReactiveMongoRepository; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -import java.math.BigInteger; - -public interface SuceessKillRepository extends ReactiveMongoRepository { - - Mono deleteBySeckillId(BigInteger seckillId); - - Flux findBySeckillId(BigInteger seckillId); -} diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/MongoReactiveServiceImpl.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/MongoReactiveServiceImpl.java deleted file mode 100644 index e9c24bf7..00000000 --- a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/MongoReactiveServiceImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.goodskill.order.service.impl; - -import com.goodskill.order.entity.SuccessKilled; -import com.goodskill.order.entity.SuccessKilledDto; -import com.goodskill.order.repository.SuceessKillRepository; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import reactor.core.publisher.Mono; - -import java.math.BigInteger; -import java.util.UUID; - -/** - * @author heng - */ -@Slf4j -@Service -public class MongoReactiveServiceImpl { - @Autowired - private SuceessKillRepository suceessKillRepository; - - public Mono deleteRecord(long seckillId) { - return suceessKillRepository.deleteBySeckillId(BigInteger.valueOf(seckillId)).thenReturn(true); - } - - public Mono saveRecord(SuccessKilledDto successKilledDto) { - return suceessKillRepository.insert(SuccessKilled.builder() - .id(UUID.randomUUID().toString()) - .seckillId(successKilledDto.getSeckillId()) - .userPhone(successKilledDto.getUserPhone()) - .build()) - .doOnSuccess(n -> log.info("mongo秒杀记录插入成功:{}", n)).thenReturn(true); - } - - public Mono count(long seckillId) { - return suceessKillRepository.findBySeckillId(BigInteger.valueOf(seckillId)).count(); - } - -} diff --git a/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/OrderServiceImpl.java b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/OrderServiceImpl.java new file mode 100644 index 00000000..4cc1971e --- /dev/null +++ b/goodskill-order-provider/goodskill-order-service/src/main/java/com/goodskill/order/service/impl/OrderServiceImpl.java @@ -0,0 +1,42 @@ +package com.goodskill.order.service.impl; + +import com.goodskill.order.entity.Order; +import com.goodskill.order.entity.OrderDTO; +import com.goodskill.order.repository.OrderRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigInteger; +import java.util.UUID; + +/** + * @author heng + */ +@Slf4j +@Service +public class OrderServiceImpl { + @Autowired + private OrderRepository orderRepository; + + public Boolean deleteRecord(long seckillId) { + orderRepository.deleteBySeckillId(BigInteger.valueOf(seckillId)); + return true; + } + + public Boolean saveRecord(OrderDTO orderDTO) { + Order order = Order.builder() + .id(UUID.randomUUID().toString()) + .seckillId(orderDTO.getSeckillId()) + .userPhone(orderDTO.getUserPhone()) + .build(); + orderRepository.insert(order); + log.info("保存成功,{}", order); + return true; + } + + public Long count(long seckillId) { + return orderRepository.countBySeckillId(BigInteger.valueOf(seckillId)); + } + +} diff --git a/goodskill-order-provider/goodskill-order-service/src/main/resources/application.yml b/goodskill-order-provider/goodskill-order-service/src/main/resources/application.yml index 8922cc21..e367dbae 100644 --- a/goodskill-order-provider/goodskill-order-service/src/main/resources/application.yml +++ b/goodskill-order-provider/goodskill-order-service/src/main/resources/application.yml @@ -2,11 +2,19 @@ server: port: 0 shutdown: graceful spring: + profiles: + active: dev application: name: goodskill-order main: allow-circular-references: true + config: + import: optional:nacos:goodskill-common-connection.yml cloud: + nacos: + username: nacos + password: nacos + server-addr: nacos:8848 function: ## 绑定的消息处理函数名 definition: seckillMongoSave @@ -17,22 +25,6 @@ spring: ##解决重复消费问题,注意:同一组下只消费一次 group: default destination: seckill-order-save - sentinel: - transport: - port: 8719 - ## 默认端口8080,已改为自定义18088端口,通过http://127.0.0.1:18088/#/dashboard访问 - dashboard: localhost:18088 - ##使用nacos配置中心存储限流规则 - datasource: - ds0: - nacos: - data-id: ${spring.application.name}-flow-rules - data-type: json - group-id: DEFAULT_GROUP - rule-type: flow - server-addr: nacos:8848 - username: nacos - password: nacos logging: level: @@ -40,31 +32,4 @@ logging: springframework: data: mongodb: debug -management: - endpoint: - shutdown: - enabled: true - endpoints: - web: - exposure: - include: '*' ---- -spring: - rabbitmq: - host: rabbitmq - port: 5672 - username: guest - password: guest - data: - mongodb: - database: test - cloud: - sentinel: - datasource: - ds0: - nacos: - server-addr: nacos:8848 - config: - activate: - on-profile: docker,dev diff --git a/goodskill-order-provider/goodskill-order-service/src/main/resources/bootstrap.properties b/goodskill-order-provider/goodskill-order-service/src/main/resources/bootstrap.properties deleted file mode 100644 index afa10b9c..00000000 --- a/goodskill-order-provider/goodskill-order-service/src/main/resources/bootstrap.properties +++ /dev/null @@ -1,7 +0,0 @@ -spring.application.name=goodskill-order -spring.cloud.nacos.config.server-addr=nacos:8848 -spring.cloud.nacos.discovery.server-addr=nacos:8848 -spring.cloud.nacos.config.file-extension=yml -spring.cloud.nacos.username=nacos -spring.cloud.nacos.password=nacos -spring.profiles.active=dev diff --git a/goodskill-seckill-provider/goodskill-service/pom.xml b/goodskill-seckill-provider/goodskill-service/pom.xml index 808073f2..f543b0a2 100644 --- a/goodskill-seckill-provider/goodskill-service/pom.xml +++ b/goodskill-seckill-provider/goodskill-service/pom.xml @@ -121,7 +121,7 @@ com.goodskill goodskill-core - + cn.hutool hutool-all @@ -137,7 +137,7 @@ com.goodskill goodskill-core - + net.logstash.logback logstash-logback-encoder @@ -185,10 +185,10 @@ org.springframework.boot spring-boot-starter-graphql - - org.springframework.cloud - spring-cloud-starter-bootstrap - + + + + org.springframework.boot spring-boot-starter-data-elasticsearch diff --git a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/SeckillApplication.java b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/SeckillApplication.java index e6dca73f..c57dae30 100644 --- a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/SeckillApplication.java +++ b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/SeckillApplication.java @@ -19,6 +19,7 @@ @SpringBootApplication(scanBasePackages = { "com.goodskill.service.**", "com.goodskill.common.core", + "com.goodskill.order.api", }) @EnableTransactionManagement @MapperScan("com.goodskill.service.mapper") diff --git a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/controller/GoodsController.java b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/controller/GoodsController.java index 7c0a6f77..96a7dd9e 100644 --- a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/controller/GoodsController.java +++ b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/controller/GoodsController.java @@ -1,56 +1,26 @@ package com.goodskill.service.controller; -import com.goodskill.api.service.GoodsService; -import com.goodskill.api.vo.GoodsVO; -import com.goodskill.service.util.UploadFileUtil; +import com.goodskill.order.api.OrderService; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import org.springframework.stereotype.Controller; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.util.Date; -import java.util.List; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; /** * Created by heng on 17/1/18. */ @Tag(name = "商品管理") -@Controller +@RestController @RequestMapping("/seckill/goods") public class GoodsController { @Resource - private GoodsService goodsService; - @Resource - private UploadFileUtil uploadFileUtil; - - @GetMapping("/new") - public String addGoodsPage(){ - return "addGoods"; - } + private OrderService orderService; - @Transactional - @RequestMapping(value = "/create",method = RequestMethod.POST) - public String add(GoodsVO goods, @RequestParam("file") MultipartFile file){ - goods.setCreateTime(new Date()); - String url = uploadFileUtil.uploadFile(file); - goods.setPhotoUrl(url); - goodsService.addGoods(goods); - return url; + @GetMapping("/orders/count") + public Long countOrders(@RequestParam("seckillId") long seckillId) { + return orderService.count(seckillId); } - @RequestMapping(value = "/list",method = RequestMethod.GET,produces = { - "application/json;charset=UTF-8"}) - @ResponseBody - public List list(){ - return goodsService.findMany(); - } - - @RequestMapping(value = "/{goodsId}", method = RequestMethod.GET, produces = { - "application/json;charset=UTF-8"}) - @ResponseBody - public GoodsVO getGoodsById(@PathVariable(value = "goodsId") long goodsId) { - return goodsService.findById(goodsId); - } } diff --git a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/handler/MongoPreRequestHandler.java b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/handler/MongoPreRequestHandler.java index 388d2938..d3515767 100644 --- a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/handler/MongoPreRequestHandler.java +++ b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/handler/MongoPreRequestHandler.java @@ -1,7 +1,7 @@ package com.goodskill.service.handler; import com.goodskill.common.core.pojo.dto.SeckillWebMockRequestDTO; -import com.goodskill.order.api.SuccessKilledMongoService; +import com.goodskill.order.api.OrderService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -10,11 +10,11 @@ @Slf4j public class MongoPreRequestHandler extends AbstractPreRequestHandler { @Resource - private SuccessKilledMongoService successKilledMongoService; + private OrderService orderService; @Override public void handle(SeckillWebMockRequestDTO request) { - successKilledMongoService.deleteRecord(request.getSeckillId()); + orderService.deleteRecord(request.getSeckillId()); } @Override diff --git a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/impl/dubbo/SeckillServiceImpl.java b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/impl/dubbo/SeckillServiceImpl.java index a59cc719..94aabecf 100644 --- a/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/impl/dubbo/SeckillServiceImpl.java +++ b/goodskill-seckill-provider/goodskill-service/src/main/java/com/goodskill/service/impl/dubbo/SeckillServiceImpl.java @@ -15,7 +15,7 @@ import com.goodskill.common.core.exception.SeckillCloseException; import com.goodskill.common.core.pojo.dto.SeckillWebMockRequestDTO; import com.goodskill.common.core.util.MD5Util; -import com.goodskill.order.api.SuccessKilledMongoService; +import com.goodskill.order.api.OrderService; import com.goodskill.service.common.RedisService; import com.goodskill.service.common.enums.GoodsKillStrategyEnum; import com.goodskill.service.entity.Seckill; @@ -61,7 +61,7 @@ @DubboService public class SeckillServiceImpl extends ServiceImpl implements SeckillService { @Resource - private SuccessKilledMongoService successKilledMongoService; + private OrderService orderService; @Resource private SuccessKilledMapper successKilledMapper; @Resource @@ -163,7 +163,7 @@ public long getSuccessKillCount(Long seckillId) { long count = successKilledMapper.selectCount(new QueryWrapper<>(example)); if (count == 0) { try { - count = successKilledMongoService.count(seckillId); + count = orderService.count(seckillId); } catch (Exception e) { log.error("mongo服务不可用,请检查!", e); throw e; diff --git a/goodskill-seckill-provider/goodskill-service/src/main/resources/application.yml b/goodskill-seckill-provider/goodskill-service/src/main/resources/application.yml index 0ea1b767..2401fcb0 100644 --- a/goodskill-seckill-provider/goodskill-service/src/main/resources/application.yml +++ b/goodskill-seckill-provider/goodskill-service/src/main/resources/application.yml @@ -2,11 +2,12 @@ server: port: 0 spring: + profiles: + active: dev + config: + import: optional:nacos:goodskill-common-connection.yml application: name: goodskill-seckill - graphql: - graphiql: - enabled: true kafka: consumer: group-id: seckill @@ -23,64 +24,53 @@ spring: singleServerConfig: password: 123456 address: "redis://redis:6379" - output: - ansi: - enabled: ALWAYS - data: - mongodb: - database: test flyway: enabled: false baseline-on-migrate: true clean-disabled: true locations: - classpath:db/migration/mysql - elasticsearch: - uris: http://elasticsearch:9200 + datasource: - driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver -# driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:shardingsphere:classpath:sharding-sphere.yml -# url: jdbc:mysql://mysql:3306/seckill?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false + # driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver + driver-class-name: com.mysql.cj.jdbc.Driver + # url: jdbc:shardingsphere:classpath:sharding-sphere.yml + url: jdbc:mysql://mysql:3306/seckill?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false&rewriteBatchedStatements=true username: root password: Password123 -# shardingsphere: -# datasource: -# names: ds0,ds1 -# ds0: -# driver-class-name: com.mysql.cj.jdbc.Driver -# type: com.zaxxer.hikari.HikariDataSource -# ds1: -# driver-class-name: com.mysql.cj.jdbc.Driver -# type: com.zaxxer.hikari.HikariDataSource -# sharding: -# binding-tables: success_killed -# tables: -# success_killed: -# actual-data-nodes: ds$->{0..1}.success_killed_$->{0..1} -# database-strategy: -# inline: -# algorithm-expression: ds$->{seckill_id % 2} -# sharding-column: seckill_id -# table-strategy: -# inline: -# algorithm-expression: success_killed_$->{user_phone.toLong() % 2} -# sharding-column: user_phone -# #必须配置,否则未配置的表会被应用分库分表规则 -# default-data-source-name: ds0 -# props: -# sql: -# show: false - mvc: - format: - date: yyyy-MM-dd HH:mm:ss - date-time: yyyy-MM-dd HH:mm:ss - time: HH:mm:ss - rabbitmq: - port: 5672 - username: guest - password: guest + # shardingsphere: + # datasource: + # names: ds0,ds1 + # ds0: + # driver-class-name: com.mysql.cj.jdbc.Driver + # type: com.zaxxer.hikari.HikariDataSource + # ds1: + # driver-class-name: com.mysql.cj.jdbc.Driver + # type: com.zaxxer.hikari.HikariDataSource + # sharding: + # binding-tables: success_killed + # tables: + # success_killed: + # actual-data-nodes: ds$->{0..1}.success_killed_$->{0..1} + # database-strategy: + # inline: + # algorithm-expression: ds$->{seckill_id % 2} + # sharding-column: seckill_id + # table-strategy: + # inline: + # algorithm-expression: success_killed_$->{user_phone.toLong() % 2} + # sharding-column: user_phone + # #必须配置,否则未配置的表会被应用分库分表规则 + # default-data-source-name: ds0 + # props: + # sql: + # show: false + cloud: + nacos: + username: nacos + password: nacos + server-addr: nacos:8848 function: definition: seckill stream: @@ -94,22 +84,7 @@ spring: seckillMongoSave-out-0: destination: seckill-order-save default-binder: rabbit - sentinel: - transport: - port: 8719 - ## 默认端口8080,已改为自定义18088端口,通过http://127.0.0.1:18088/#/dashboard访问 - dashboard: localhost:18088 - ##使用nacos配置中心存储限流规则 - datasource: - ds0: - nacos: - data-id: ${spring.application.name}-flow-rules - data-type: json - group-id: DEFAULT_GROUP - rule-type: flow - server-addr: nacos:8848 - username: nacos - password: nacos + dubbo: scan: base-packages: com.goodskill.service.impl.dubbo @@ -119,7 +94,6 @@ dubbo: port: -1 status: server registry: - address: zookeeper://zookeeper:2181 timeout: 30000 id: my-registry provider: @@ -130,19 +104,6 @@ dubbo: register-mode: instance qos-port: 22222 -minio: - endpoint: http://localhost:19000 - accessKey: goodskill - secretKey: password - bucketName: goodskill - -mybatis-plus: - global-config: - db-config: - logic-delete-field: deleteFlag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) - logic-delete-value: 1 # 逻辑已删除值(默认为 1) - logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) - seata: enabled: false #1.4.2使用此配置禁用seata数据源代理 @@ -167,76 +128,7 @@ seata: username: nacos password: nacos -management: - endpoint: - health: - show-details: always - endpoints: - web: - exposure: - include: '*' - health: - db: - enabled: false ---- -######################docker环境配置##################### -spring: - ##下面是redis哨兵模式的配置信息 - # redisson: - # config: | - # sentinelServersConfig: - # checkSentinelsList: false - # masterName: mymaster - # sentinelAddresses: - # - "redis://127.0.0.1:26379" - # - "redis://127.0.0.1:26380" - # - "redis://127.0.0.1:26381" - # sentinel: - # master: mymaster - # nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381 - kafka: - bootstrap-servers: kafka:9092 - shardingsphere: - datasource: - ds0: - password: Password123 - jdbcUrl: jdbc:mysql://mysql:3306/seckill?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false - username: root - ds1: - password: Password123 - jdbcUrl: jdbc:mysql://mysql:3306/seckill_01?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false - username: root - cloud: - nacos: - server-addr: nacos:8848 - sentinel: - datasource: - ds0: - nacos: - server-addr: nacos:8848 - elasticsearch: - uris: http://elasticsearch:9200 - rabbitmq: - host: rabbitmq - port: 5672 - username: guest - password: guest - config: - activate: - on-profile: docker,dev - data: - redis: - port: 6379 - host: redis - password: 123456 -dubbo: - registry: - address: zookeeper://zookeeper:2181 - provider: - timeout: 30000 - -zookeeper_ip: zookeeper:2181 - - - - +feign: + sentinel: + ##开启sentinel对feign的支持 + enabled: false diff --git a/goodskill-seckill-provider/goodskill-service/src/main/resources/bootstrap.properties b/goodskill-seckill-provider/goodskill-service/src/main/resources/bootstrap.properties deleted file mode 100644 index 59681d40..00000000 --- a/goodskill-seckill-provider/goodskill-service/src/main/resources/bootstrap.properties +++ /dev/null @@ -1,13 +0,0 @@ -spring.application.name=goodskill-sekill -spring.cloud.nacos.config.server-addr=nacos:8848 -spring.cloud.nacos.discovery.server-addr=nacos:8848 -spring.cloud.nacos.config.file-extension=yml -spring.profiles.active=dev -spring.main.allow-bean-definition-overriding=true -spring.main.allow-circular-references=true - -spring-cloud.version=@spring-cloud.version@ -spring.cloud.alibaba.version=@spring.cloud.alibaba.version@ - -spring.cloud.nacos.username=nacos -spring.cloud.nacos.password=nacos diff --git a/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/handler/MongoPreRequestHandlerTest.java b/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/handler/MongoPreRequestHandlerTest.java index fb945a74..051ede77 100644 --- a/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/handler/MongoPreRequestHandlerTest.java +++ b/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/handler/MongoPreRequestHandlerTest.java @@ -1,7 +1,7 @@ package com.goodskill.service.handler; import com.goodskill.common.core.pojo.dto.SeckillWebMockRequestDTO; -import com.goodskill.order.api.SuccessKilledMongoService; +import com.goodskill.order.api.OrderService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -15,7 +15,7 @@ public class MongoPreRequestHandlerTest { @Mock - private SuccessKilledMongoService successKilledMongoService; + private OrderService orderService; @InjectMocks private MongoPreRequestHandler mongoPreRequestHandler; @@ -32,6 +32,6 @@ public void shouldDeleteSuccessKilledRecord() { mongoPreRequestHandler.handle(request); - verify(successKilledMongoService, times(1)).deleteRecord(anyLong()); + verify(orderService, times(1)).deleteRecord(anyLong()); } } diff --git a/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/impl/SeckillServiceImplTest.java b/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/impl/SeckillServiceImplTest.java index 1655df0f..832c4cd3 100644 --- a/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/impl/SeckillServiceImplTest.java +++ b/goodskill-seckill-provider/goodskill-service/src/test/java/com/goodskill/service/impl/SeckillServiceImplTest.java @@ -8,7 +8,7 @@ import com.goodskill.api.service.SeckillService; import com.goodskill.api.vo.GoodsVO; import com.goodskill.api.vo.SeckillVO; -import com.goodskill.order.api.SuccessKilledMongoService; +import com.goodskill.order.api.OrderService; import com.goodskill.service.common.RedisService; import com.goodskill.service.entity.Seckill; import com.goodskill.service.entity.SuccessKilled; @@ -58,7 +58,7 @@ public class SeckillServiceImplTest { @Mock private SuccessKilledMapper successKilledMapper; @Mock - private SuccessKilledMongoService successKilledMongoService; + private OrderService orderService; @Mock private RedisTemplate redisTemplate; @Mock @@ -105,7 +105,7 @@ public void deleteSuccessKillRecord() { @Test public void getSuccessKillCount() { when(successKilledMapper.selectCount(any())).thenReturn(0L); - when(successKilledMongoService.count(1L)).thenReturn(1L); + when(orderService.count(1L)).thenReturn(1L); assertEquals(seckillService.getSuccessKillCount(1L), 1L); } @@ -114,7 +114,7 @@ public void prepareSeckill() { long seckillId = 1L; Seckill t = new Seckill(); seckillService.prepareSeckill(seckillId, 10, "1"); - verify(successKilledMongoService, times(0)).deleteRecord(seckillId); + verify(orderService, times(0)).deleteRecord(seckillId); } @Test diff --git a/goodskill-spring-boot-starter/src/main/java/com/goodskill/autoconfigure/oss/MinioAutoConfiguration.java b/goodskill-spring-boot-starter/src/main/java/com/goodskill/autoconfigure/oss/MinioAutoConfiguration.java index 900612d0..36a0733b 100644 --- a/goodskill-spring-boot-starter/src/main/java/com/goodskill/autoconfigure/oss/MinioAutoConfiguration.java +++ b/goodskill-spring-boot-starter/src/main/java/com/goodskill/autoconfigure/oss/MinioAutoConfiguration.java @@ -1,6 +1,7 @@ package com.goodskill.autoconfigure.oss; import io.minio.MinioClient; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -15,6 +16,7 @@ @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(MinioProperties.class) @ConditionalOnProperty(prefix = "minio", name = "endpoint") +@ConditionalOnClass(MinioClient.class) public class MinioAutoConfiguration { @Bean diff --git a/goodskill-web/pom.xml b/goodskill-web/pom.xml index 3cb0325c..500af7b5 100644 --- a/goodskill-web/pom.xml +++ b/goodskill-web/pom.xml @@ -30,15 +30,15 @@ com.goodskill goodskill-api - + com.goodskill goodskill-core - + com.goodskill goodskill-spring-boot-starter - + org.springframework.boot spring-boot-starter-actuator @@ -115,10 +115,10 @@ org.springframework.boot spring-boot-starter-data-redis - - org.springframework.cloud - spring-cloud-starter-bootstrap - + + + + diff --git a/goodskill-web/src/main/resources/application.yml b/goodskill-web/src/main/resources/application.yml index 4ef2385a..c31429fc 100644 --- a/goodskill-web/src/main/resources/application.yml +++ b/goodskill-web/src/main/resources/application.yml @@ -10,27 +10,18 @@ server: spring: profiles: active: dev + config: + import: optional:nacos:goodskill-common-connection.yml application: name: goodskill-web main: allow-bean-definition-overriding: true allow-circular-references: true - mvc: - # json格式请求前台到后台的格式转换 - format: - date: yyyy-MM-dd HH:mm:ss - date-time: yyyy-MM-dd HH:mm:ss - time: HH:mm:ss - output: - ansi: - enabled: always - rabbitmq: - host: localhost - port: 5672 - username: guest - password: guest cloud: nacos: + username: nacos + password: nacos + server-addr: nacos:8848 discovery: metadata: management: @@ -52,22 +43,6 @@ spring: ##解决重复消费问题,注意:同一组下只消费一次 group: default destination: seckill-canal-result - sentinel: - transport: - port: 8719 - ##默认端口8080,已改为自定义18088端口,通过http://127.0.0.1:18088/#/dashboard访问 - dashboard: localhost:18088 - ##使用nacos配置中心存储限流规则 - datasource: - ds0: - nacos: - data-id: ${spring.application.name}-flow-rules - data-type: json - group-id: DEFAULT_GROUP - rule-type: flow - server-addr: nacos:8848 - username: nacos - password: nacos ##dubbo配置 dubbo: @@ -81,16 +56,6 @@ dubbo: enable-file-cache: false qos-port: 22224 -##监控配置 -management: - endpoints: - web: - exposure: - include: '*' - endpoint: - health: - show-details: always - springdoc: version: '@springdoc.version@' swagger-ui: @@ -104,33 +69,5 @@ springdoc: - group: web paths-to-match: /** ---- -spring: - config: - activate: - on-profile: docker,dev - cloud: - nacos: - server-addr: nacos:8848 - sentinel: - datasource: - ds0: - nacos: - server-addr: nacos:8848 - kafka: - bootstrap-servers: kafka:9092 - rabbitmq: - host: rabbitmq - port: 5672 - username: guest - password: guest - data: - redis: - host: redis - port: 6379 - password: 123456 -dubbo: - registry: - address: zookeeper://zookeeper:2181 diff --git a/goodskill-web/src/main/resources/bootstrap.properties b/goodskill-web/src/main/resources/bootstrap.properties deleted file mode 100644 index e94d47d9..00000000 --- a/goodskill-web/src/main/resources/bootstrap.properties +++ /dev/null @@ -1,8 +0,0 @@ -spring.application.name=goodskill-web -spring.cloud.nacos.config.server-addr=nacos:8848 -spring.cloud.nacos.discovery.server-addr=nacos:8848 -spring.cloud.nacos.config.file-extension=yml -spring.profiles.active=dev -spring.main.allow-bean-definition-overriding=true -spring.cloud.nacos.username=nacos -spring.cloud.nacos.password=nacos \ No newline at end of file From 33d1ae3114b2c3ef5a2e01e45c2c110592e12066 Mon Sep 17 00:00:00 2001 From: zheng Date: Fri, 12 Jul 2024 21:55:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E6=9C=8D=E5=8A=A1=E5=85=AC=E5=85=B1=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.adoc | 2 + goodskill-common-connection.yml | 103 ++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 goodskill-common-connection.yml diff --git a/README.adoc b/README.adoc index 6b0a6621..2667c8ca 100644 --- a/README.adoc +++ b/README.adoc @@ -180,6 +180,8 @@ docker-compose启动MySQL镜像时会自动执行初始化脚本,如已执行 127.0.0.1 www.goodskill.com ---- +* 在Nacos配置中心中添加DataId为``goodskill-common-connection.yml``的服务公共配置,Group为``DEFAULT_GROUP``,具体内容可参考项目根目录中的``goodskill-common-connection.yml``文件 + * main方法运行``OrderApplication``类(订单服务) * main方法运行``SeckillApplication``类(秒杀管理服务提供者) diff --git a/goodskill-common-connection.yml b/goodskill-common-connection.yml new file mode 100644 index 00000000..3cb8b156 --- /dev/null +++ b/goodskill-common-connection.yml @@ -0,0 +1,103 @@ +spring: + mvc: + # json格式请求前台到后台的格式转换 + format: + date: yyyy-MM-dd HH:mm:ss + date-time: yyyy-MM-dd HH:mm:ss + time: HH:mm:ss + rabbitmq: + host: rabbitmq + port: 5672 + username: guest + password: guest + kafka: + bootstrap-servers: kafka:9092 + elasticsearch: + uris: http://elasticsearch:9200 + data: + redis: + port: 6379 + host: redis + password: 123456 + mongodb: + database: test + output: + ansi: + enabled: ALWAYS + graphql: + graphiql: + enabled: true + cloud: + loadbalancer: + retry: + enabled: false + openfeign: + client: + config: + default: + connect-timeout: 2000 # 连接超时时间,单位为毫秒 + read-timeout: 4000 # 读取超时时间,单位为毫秒 + sentinel: + transport: + port: 8719 + ## 默认端口8080,已改为自定义18088端口,通过http://127.0.0.1:18088/#/dashboard访问 + dashboard: localhost:18088 + ##使用nacos配置中心存储限流规则 + datasource: + ds0: + nacos: + data-id: ${spring.application.name}-flow-rules + data-type: json + group-id: DEFAULT_GROUP + rule-type: flow + server-addr: nacos:8848 + username: nacos + password: nacos + +mybatis-plus: + global-config: + db-config: + logic-delete-field: deleteFlag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + +management: + endpoint: + health: + show-details: always + endpoints: + web: + exposure: + include: '*' + +dubbo: + registry: + address: zookeeper://zookeeper:2181 + +zookeeper_ip: zookeeper:2181 + +## oss配置 +minio: + endpoint: http://localhost:19000 + accessKey: YghdgTEEJnvvrUm5nX70 + secretKey: hCv6xU4TEembK6Fr2pHvJWxlijKUXySDIS4sSTMK + bucketName: goodskill + +############## Sa-Token 配置 (文档: https://sa-token.cc) ############## +sa-token: + # token 名称(同时也是 cookie 名称) + token-name: access_token + # token 有效期(单位:秒) 默认30天,-1 代表永久有效 + timeout: 2592000 + # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + active-timeout: -1 + # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) + is-share: true + # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + token-style: simple-uuid + # 是否输出操作日志 + is-log: true + # 关闭banner打印 + is-print: true