feat(商城): 升级至Springboot3.0

master
wayn 2 years ago
parent 2361720a15
commit e044cf1a0e

@ -1 +0,0 @@
FROM maven:3.8.1-openjdk-11

@ -45,14 +45,14 @@ services:
- TZ=Asia/Shanghai
- LOG_PATH_PREFIX=/home/logs
- UPLOAD_DIR=/opt/waynboot-mall/upload
# waynboot-monitor:
# image: ibm-semeru-runtimes:open-17-jdk
# container_name: monitor
# volumes:
# - /etc/localtime:/etc/localtime
# - ./jars/waynboot-monitor.jar:/home/app/waynboot-monitor.jar
# restart: always
# command: java -Xms500m -Xmx500m -Duser.timezone=GMT+8 -Dfile.encoding=utf-8 -jar /home/app/waynboot-monitor.jar
# network_mode: "host"
# environment:
# - TZ=Asia/Shanghai
waynboot-monitor:
image: ibm-semeru-runtimes:open-17-jdk
container_name: monitor
volumes:
- /etc/localtime:/etc/localtime
- ./jars/waynboot-monitor.jar:/home/app/waynboot-monitor.jar
restart: always
command: java -Xms500m -Xmx500m -Duser.timezone=GMT+8 -Dfile.encoding=utf-8 -jar /home/app/waynboot-monitor.jar
network_mode: "host"
environment:
- TZ=Asia/Shanghai

@ -1,24 +0,0 @@
#!/usr/bin/env bash
# waynboot-mall项目-阿里云容器服务-docker方式部署脚本
app_name="waynboot_mall"
docker_redistry_prefix="registry.cn-shanghai.aliyuncs.com/wayn111/"
waynboot_mall=("waynboot-mobile-api:82" "waynboot-admin-api:81" "waynboot-message-consumer:85")
echo "${app_name}项目开始安装"
echo "------------------------------------------------------------------"
for var in "${waynboot_mall[@]}"; do
echo "${var}:初始化安装开始"
port=${var#*:}
name=${var%:*}
docker stop ${name}
docker rm ${name}
docker rmi "${docker_redistry_prefix}${name}"
docker pull "${docker_redistry_prefix}${name}"
docker run -d -p ${port}:${port} --net=host --name ${name} "${docker_redistry_prefix}${name}"
echo "${var}:初始化安装结束"
echo "------------------------------------------------------------------"
done
echo "${app_name}项目安装成功"

@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<version>3.0.1</version>
</parent>
<modules>
<module>waynboot-common</module>
@ -21,7 +21,7 @@
</modules>
<groupId>com.wayn</groupId>
<artifactId>waynboot</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
<packaging>pom</packaging>
<name>waynboot</name>
<description>waynboot mall商城</description>
@ -30,23 +30,23 @@
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<spring-boot.version>2.7.5</spring-boot.version>
<mysql.connector.java.version>8.0.28</mysql.connector.java.version>
<spring-boot.version>3.0.1</spring-boot.version>
<mysql.connector.java.version>8.0.30</mysql.connector.java.version>
<elasticsearch.version>7.13.4</elasticsearch.version>
<mybatis-plus.version>3.5.2</mybatis-plus.version>
<druid.version>1.2.14</druid.version>
<mybatis-plus.version>3.5.3</mybatis-plus.version>
<druid.version>1.2.15</druid.version>
<commons.io.version>2.11.0</commons.io.version>
<commons.collections.version>4.4</commons.collections.version>
<commons.fileupload.version>1.4</commons.fileupload.version>
<commons-lang3.version>3.12.0</commons-lang3.version>
<fastjson.version>2.0.19</fastjson.version>
<fastjson.version>2.0.21</fastjson.version>
<easy-captcha.version>1.6.2</easy-captcha.version>
<jwt.version>4.2.1</jwt.version>
<qiniu.version>7.12.0</qiniu.version>
<mail.version>1.6.2</mail.version>
<spring-boot-admin.version>2.7.7</spring-boot-admin.version>
<mail.version>2.0.1</mail.version>
<spring-boot-admin.version>3.0.0-M8</spring-boot-admin.version>
<xxl-job.version>2.3.1</xxl-job.version>
<hutool.version>5.8.9</hutool.version>
<hutool.version>5.8.11</hutool.version>
<easyexcel.version>3.1.3</easyexcel.version>
</properties>
@ -55,6 +55,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
@ -127,11 +132,6 @@
<version>${mysql.connector.java.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Apache工具组件 -->
<dependency>
@ -189,9 +189,10 @@
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<artifactId>jakarta.mail</artifactId>
<version>${mail.version}</version>
</dependency>
<!-- 分布式任务调度 -->
<dependency>
<groupId>com.xuxueli</groupId>
@ -203,6 +204,23 @@
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

@ -2,7 +2,7 @@
waynboot-mall是一套全部开源的微商城项目包含一个运营后台、h5商城和后台接口。
实现了一个商城所需的首页展示、商品分类、商品详情、sku详情、商品搜索、加入购物车、结算下单、订单状态流转、商品评论等一系列功能。
技术上基于Springboot2.7+,jdk17整合了Redis、RabbitMQ、ElasticSearch等常用中间件
技术上基于最新得Springboot3.0+,jdk17整合了Redis、RabbitMQ、ElasticSearch等常用中间件
贴近生产环境实际经验开发而来不断完善、优化、改进中。
[h5商城项目](https://github.com/wayn111/waynboot-mobile)
@ -11,7 +11,7 @@ waynboot-mall是一套全部开源的微商城项目包含一个运营后台
## 技术特点
11. 商城接口代码清晰、注释完善、模块拆分合理
1. 商城接口代码清晰、注释完善、模块拆分合理
2. 使用Spring-Security进行访问权限控制
3. 使用jwt进行接口授权验证
4. ORM层使用Mybatis Plus提升开发效率
@ -19,16 +19,13 @@ waynboot-mall是一套全部开源的微商城项目包含一个运营后台
6. 使用springboot admin进行服务监控
7. 集成七牛云存储配置,上传文件至七牛
8. 集成常用邮箱配置,方便发送邮件
9. 商城前台使用hikari连接池提升性能后台使用druid连接池进行sql监控
# 10. 使用knife4j增强swagger管理接口文档
11. 添加策略模式使用示例,优化首页金刚区跳转逻辑
12. 拆分出通用的数据访问模块统一redis & elastic配置与访问
13. 使用elasticsearch-rest-high-level-client客户端对elasticsearch进行操作
14. 支持商品数据同步elasticsearch操作以及elasticsearch商品搜索
15. RabbitMQ生产者发送消息采用异步confirm模式消费者消费消息时需手动确认
16. 下单处理过程引入rabbitMQ异步生成订单记录提高系统下单处理能力
17. 引入google jib加速和简化构建Docker应用镜像
18. ...
9. 添加策略模式使用示例,优化首页金刚区跳转逻辑
10. 拆分出通用的数据访问模块统一redis & elastic配置与访问
11. 使用elasticsearch-rest-high-level-client客户端对elasticsearch进行操作
12. 支持商品数据同步elasticsearch操作以及elasticsearch商品搜索
13. RabbitMQ生产者发送消息采用异步confirm模式消费者消费消息时需手动确认
14. 下单处理过程引入rabbitMQ异步生成订单记录提高系统下单处理能力
15. ...
## 问题整理
### 1. 库存扣减操作是在下单操作扣减还是在支付成功时扣减ps扣减库存使用乐观锁机制 `where goods_num - num >= 0`
@ -42,7 +39,7 @@ waynboot-mall是一套全部开源的微商城项目包含一个运营后台
### 2. 首页商品展示接口利用多线程技术进行查询优化将多个sql语句的排队查询变成异步查询接口时长只跟查询时长最大的sql查询挂钩
```java
# 使用CompletableFuture异步查询
// 使用CompletableFuture异步查询
List<CompletableFuture<Void>> list = new ArrayList<>();
CompletableFuture<Void> f1 = CompletableFuture.supplyAsync(() -> iBannerService.list(Wrappers.lambdaQuery(Banner.class).eq(Banner::getStatus, 0).orderByAsc(Banner::getSort)), homeThreadPoolTaskExecutor).thenAccept(data -> {
String key = "bannerList";
@ -56,7 +53,7 @@ CompletableFuture<Void> f2 = CompletableFuture.supplyAsync(() -> iDiamondService
});
list.add(f1);
list.add(f2);
# 主线程等待子线程执行完毕
// 主线程等待子线程执行完毕
CompletableFuture.allOf(list.toArray(new CompletableFuture[0])).join();
```
@ -153,14 +150,17 @@ private static String encryptUserId(String userId, int num) {
6. 用户支付完成后,返回支付状态查看页面。
### 6. 金刚区跳转使用策略模式
```java
# 1. 定义金刚位跳转策略接口以及跳转枚举类
# 1.定义金刚位跳转策略接口以及跳转枚举类
public interface DiamondJumpType {
List<Goods> getGoods(Page<Goods> page, Diamond diamond);
Integer getType();
}
// 金刚位跳转类型枚举
public enum JumpTypeEnum {
COLUMN(0),
@ -182,8 +182,10 @@ public enum JumpTypeEnum {
}
}
# 2. 定义策略实现类,并使用@Component注解注入spring
# 2.定义策略实现类,并使用
@Component注解注入spring
// 分类策略实现
@Component
public class CategoryStrategy implements DiamondJumpType {
@ -228,11 +230,12 @@ public class ColumnStrategy implements DiamondJumpType {
}
}
# 3. 定义策略上下文通过构造器注入spring定义map属性通过key获取对应策略实现类
# 3.定义策略上下文通过构造器注入spring定义map属性通过key获取对应策略实现类
@Component
public class DiamondJumpContext {
private Map<Integer, DiamondJumpType> map = new HashMap<>();
private final Map<Integer, DiamondJumpType> map = new HashMap<>();
/**
* 由spring自动注入DiamondJumpType子类
@ -256,98 +259,9 @@ private DiamondJumpContext diamondJumpContext;
@Test
public void test(){
DiamondJumpType diamondJumpType = diamondJumpContext.getInstance(JumpTypeEnum.COLUMN.getType());
}
```
### 7. google jib加速和简化docker镜像构建
```xml
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<!-- 1. 配置基本镜像-->
<from>
<image>adoptopenjdk:11-jre-openj9</image>
</from>
<!-- 2. 配置最终推送的地址仓库名镜像名默认是docker hub这里配置的是阿里云容器服务地址-->
<to>
<image>registry.cn-shanghai.aliyuncs.com/${aliyun-docker-namespace}/${project.artifactId}
</image>
<tags>
<!-- 3. 配置镜像标签,这里使用项目版本号-->
<tag>${project.version}</tag>
</tags>
<auth>
<!-- 4. 配置docker镜像仓库的认证信息-->
<username>填写你的阿里云账号</username>
<password>填写你的密码 site:https://cr.console.aliyun.com/cn-shanghai/instance/credentials</password>
</auth>
</to>
<container>
<!-- 6. 配置项目启动类以及jvm参数-->
<mainClass>填写项目启动类路劲 eg:com.wayn.AdminApplication</mainClass>
<jvmFlags>
<jvmFlag>-Xms812m</jvmFlag>
<jvmFlag>-Xmx812m</jvmFlag>
<jvmFlag>-Xss512k</jvmFlag>
<jvmFlag>-XX:+HeapDumpOnOutOfMemoryError</jvmFlag>
<jvmFlag>-XX:HeapDumpPath=./</jvmFlag>
</jvmFlags>
</container>
</configuration>
<!-- 绑定到maven lifecicle-->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
```
### 8. 生产环境Redis连接长时间无响应被服务器断开问题通过`lettuceConnectionFactory.resetConnection();`重置redis连接
```java
@Autowired
private LettuceConnectionFactory lettuceConnectionFactory;
/**
* 获得缓存的基本对象。
*
* @param key 缓存键值
* @return 缓存键值对应的数据
*/
public <T> T getCacheObject(final String key) {
try {
ValueOperations<String, T> operation = redisTemplate.opsForValue();
return operation.get(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
return retryGetCacheObject(key, 1);
DiamondJumpType diamondJumpType=diamondJumpContext.getInstance(JumpTypeEnum.COLUMN.getType());
}
}
public <T> T retryGetCacheObject(final String key, int retryCount) {
try {
log.info("retryGetCacheObject, key:{}, retryCount:{}", key, retryCount);
if (retryCount <= 0) {
return null;
}
lettuceConnectionFactory.resetConnection();
Thread.sleep(200L);
retryCount--;
ValueOperations<String, T> operation = redisTemplate.opsForValue();
return operation.get(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
return retryGetCacheObject(key, retryCount);
}
}
```
- todo

@ -1,13 +0,0 @@
# 该镜像需要依赖的基础镜像
FROM adoptopenjdk:11-jre-openj9
WORKDIR /root/workspace
# 将当前目录下的jar包复制到docker容器的/目录下
ADD waynboot-admin-api/target/waynboot-admin-api-1.1.0.jar /opt/waynboot-mall/waynboot-admin-api-1.1.0.jar
# 运行过程中创建一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /opt/waynboot-mall/waynboot-admin-api-1.1.0.jar'
# 声明服务运行在8080端口
EXPOSE 81
# 指定docker容器启动时运行jar包
ENTRYPOINT ["sh", "-c", "exec java -jar -Xms812m -Xmx812m -Xss512k /opt/waynboot-mall/waynboot-admin-api-1.1.0.jar"]
# 指定维护者的名字
MAINTAINER wayn111

@ -5,7 +5,7 @@
<parent>
<artifactId>waynboot</artifactId>
<groupId>com.wayn</groupId>
<version>1.1.0</version>
<version>1.2.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -31,17 +31,9 @@
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
@ -56,7 +48,7 @@
<dependency>
<groupId>com.wayn</groupId>
<artifactId>waynboot-common</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
@ -76,7 +68,7 @@
<dependency>
<groupId>com.wayn</groupId>
<artifactId>waynboot-message-core</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
@ -94,11 +86,11 @@
</dependency>
<!-- 滑块验证码 -->
<dependency>
<!--<dependency>
<groupId>com.anji-plus</groupId>
<artifactId>spring-boot-starter-captcha</artifactId>
<version>1.3.0</version>
</dependency>
</dependency>-->
<dependency>
<groupId>com.hierynomus</groupId>

@ -1,28 +0,0 @@
#!/usr/bin/env bash
# 定义应用组名
group_name='waynboot-mall'
# 定义应用名称
app_name='waynboot-admin-api'
app_port=81
# 定义应用版本
app_version='1.1.0'
# 定义应用环境
profile_active='dev'
# coding docker host
coding_docker_host="waynaqua-docker.pkg.coding.net/wayn"
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${coding_docker_host}/${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 获取docker镜像
docker pull ${coding_docker_host}/${group_name}/${app_name}:${app_version}
echo '----pull image----'
docker run -p ${app_port}:${app_port} --name ${app_name} \
-e 'spring.profiles.active'=${profile_active} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d ${coding_docker_host}/${group_name}/${app_name}:${app_version}
echo '----start container----'

@ -5,7 +5,7 @@ import com.wayn.common.core.domain.vo.SendMailVO;
import com.wayn.common.core.service.tool.IMailConfigService;
import com.wayn.common.util.R;
import com.wayn.common.util.mail.MailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -16,10 +16,10 @@ import java.util.Collections;
*
*/
@RestController
@AllArgsConstructor
@RequestMapping("message/email")
public class EmailController {
@Autowired
private IMailConfigService mailConfigService;
@PostMapping

@ -6,7 +6,7 @@ import com.wayn.common.base.controller.BaseController;
import com.wayn.common.core.domain.shop.Address;
import com.wayn.common.core.service.shop.IAddressService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@ -21,10 +21,10 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2020-07-21
*/
@RestController
@AllArgsConstructor
@RequestMapping("shop/address")
public class AddressController extends BaseController {
@Autowired
private IAddressService iAddressService;
@GetMapping("list")

@ -7,20 +7,17 @@ import com.wayn.common.core.domain.shop.Order;
import com.wayn.common.core.domain.vo.ShipVO;
import com.wayn.common.core.service.shop.IAdminOrderService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@AllArgsConstructor
@RequestMapping("shop/order")
@EnableConfigurationProperties(value = ExpressProperties.class)
public class AdminOrderController extends BaseController {
@Autowired
private ExpressProperties expressProperties;
@Autowired
private IAdminOrderService iAdminOrderService;
@GetMapping("list")

@ -5,7 +5,7 @@ import com.wayn.common.base.controller.BaseController;
import com.wayn.common.core.domain.shop.Banner;
import com.wayn.common.core.service.shop.IBannerService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -13,10 +13,10 @@ import java.util.Date;
import java.util.List;
@RestController
@AllArgsConstructor
@RequestMapping("shop/banner")
public class BannerController extends BaseController {
@Autowired
private IBannerService iBannerService;

@ -5,7 +5,7 @@ import com.wayn.common.base.controller.BaseController;
import com.wayn.common.core.domain.shop.Category;
import com.wayn.common.core.service.shop.ICategoryService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -21,10 +21,10 @@ import java.util.List;
* @since 2020-06-26
*/
@RestController
@AllArgsConstructor
@RequestMapping("/shop/category")
public class CategoryController extends BaseController {
@Autowired
private ICategoryService iCategoryService;
@GetMapping("/list")

@ -6,7 +6,7 @@ import com.wayn.common.core.domain.shop.Channel;
import com.wayn.common.core.service.shop.IChannelService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -14,10 +14,10 @@ import java.util.Date;
import java.util.List;
@RestController
@AllArgsConstructor
@RequestMapping("shop/channel")
public class ChannelController extends BaseController {
@Autowired
private IChannelService iChannelService;
@GetMapping("/list")

@ -12,10 +12,10 @@ import com.wayn.common.core.service.shop.IColumnGoodsRelationService;
import com.wayn.common.core.service.shop.IColumnService;
import com.wayn.common.core.service.shop.IGoodsService;
import com.wayn.common.util.R;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -25,16 +25,14 @@ import java.util.stream.Collectors;
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("shop/column")
public class ColumnController extends BaseController {
@Autowired
private IColumnService iColumnService;
@Autowired
private IColumnGoodsRelationService iColumnGoodsRelationService;
@Autowired
private IGoodsService iGoodsService;
@GetMapping("/list")

@ -6,7 +6,7 @@ import com.wayn.common.base.controller.BaseController;
import com.wayn.common.core.domain.shop.Comment;
import com.wayn.common.core.service.shop.ICommentService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@ -21,10 +21,10 @@ import java.util.List;
* @since 2020-10-03
*/
@RestController
@AllArgsConstructor
@RequestMapping("shop/comment")
public class CommentController extends BaseController {
@Autowired
private ICommentService iCommentService;
@GetMapping("list")

@ -6,7 +6,7 @@ import com.wayn.common.base.controller.BaseController;
import com.wayn.common.core.domain.shop.Diamond;
import com.wayn.common.core.service.shop.IDiamondService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -14,10 +14,10 @@ import java.util.Date;
import java.util.List;
@RestController
@AllArgsConstructor
@RequestMapping("shop/diamond")
public class DiamondController extends BaseController {
@Autowired
private IDiamondService iDiamondService;
@GetMapping("/list")

@ -13,8 +13,8 @@ import com.wayn.data.elastic.constant.EsConstants;
import com.wayn.data.elastic.manager.ElasticDocument;
import com.wayn.data.elastic.manager.ElasticEntity;
import com.wayn.data.redis.manager.RedisCache;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -36,14 +36,12 @@ import java.util.concurrent.TimeUnit;
*/
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/shop/goods")
public class GoodsController extends BaseController {
@Autowired
private IGoodsService iGoodsService;
@Autowired
private ElasticDocument elasticDocument;
@Autowired
private RedisCache redisCache;
@GetMapping("/list")

@ -5,7 +5,7 @@ import com.wayn.common.base.controller.BaseController;
import com.wayn.common.core.domain.shop.Keyword;
import com.wayn.common.core.service.shop.IKeywordService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -21,10 +21,10 @@ import java.util.List;
* @since 2020-10-03
*/
@RestController
@AllArgsConstructor
@RequestMapping("shop/keyword")
public class KeywordController extends BaseController {
@Autowired
private IKeywordService iKeywordService;
@GetMapping("list")

@ -6,7 +6,7 @@ import com.wayn.common.base.controller.BaseController;
import com.wayn.common.core.domain.shop.Member;
import com.wayn.common.core.service.shop.IMemberService;
import com.wayn.common.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -21,10 +21,10 @@ import java.util.Date;
* @since 2020-07-21
*/
@RestController
@AllArgsConstructor
@RequestMapping("shop/member")
public class MemberController extends BaseController {
@Autowired
private IMemberService iMemberService;
@GetMapping("list")

@ -6,7 +6,7 @@ import com.wayn.common.core.service.system.IDeptService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.security.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -15,10 +15,10 @@ import java.util.Date;
import java.util.List;
@RestController
@AllArgsConstructor
@RequestMapping("system/dept")
public class DeptController {
@Autowired
private IDeptService iDeptService;
@PreAuthorize("@ss.hasPermi('system:dept:list')")

@ -9,7 +9,7 @@ import com.wayn.common.core.service.system.IDictService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.security.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -19,13 +19,12 @@ import java.util.List;
@RestController
@AllArgsConstructor
@RequestMapping("system/dict/data")
public class DictDataController extends BaseController {
@Autowired
private IDictService iDictService;
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@GetMapping("/list")
public R list(Dict dict) {

@ -2,30 +2,27 @@ package com.wayn.admin.api.controller.system;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wayn.common.base.controller.BaseController;
import com.wayn.common.config.WaynConfig;
import com.wayn.common.constant.SysConstants;
import com.wayn.common.core.domain.system.Dict;
import com.wayn.common.core.domain.system.User;
import com.wayn.common.core.service.system.IDictService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.excel.ExcelUtil;
import com.wayn.common.util.security.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
@RestController
@AllArgsConstructor
@RequestMapping("system/dict/type")
public class DictTypeController extends BaseController {
@Autowired
private IDictService iDictService;

@ -14,13 +14,13 @@ import com.wayn.common.util.IdUtil;
import com.wayn.common.util.R;
import com.wayn.data.redis.manager.RedisCache;
import com.wf.captcha.SpecCaptcha;
import jakarta.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@ -10,8 +10,8 @@ import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.ServletUtils;
import com.wayn.common.util.security.SecurityUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -21,13 +21,12 @@ import java.util.List;
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("system/menu")
public class MenuController extends BaseController {
@Autowired
private IMenuService iMenuService;
@Autowired
private TokenService tokenService;
@PreAuthorize("@ss.hasPermi('system:menu:list')")

@ -11,25 +11,23 @@ import com.wayn.common.util.R;
import com.wayn.common.util.ServletUtils;
import com.wayn.common.util.file.FileUploadUtil;
import com.wayn.common.util.security.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import jakarta.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@RestController
@AllArgsConstructor
@RequestMapping("system/user/profile")
public class ProfileController {
@Autowired
private IUserService iUserService;
@Autowired
private TokenService tokenService;
@Autowired
private UploadService uploadService;
@GetMapping

@ -2,17 +2,15 @@ package com.wayn.admin.api.controller.system;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wayn.common.base.controller.BaseController;
import com.wayn.common.config.WaynConfig;
import com.wayn.common.constant.SysConstants;
import com.wayn.common.core.domain.system.Dict;
import com.wayn.common.core.domain.system.Role;
import com.wayn.common.core.service.system.IRoleService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.excel.ExcelUtil;
import com.wayn.common.util.security.SecurityUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -22,13 +20,12 @@ import java.util.List;
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("system/role")
public class RoleController extends BaseController {
@Autowired
private IRoleService iRoleService;
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list")
public R list(Role role) {

@ -1,51 +0,0 @@
package com.wayn.admin.api.controller.system;
import com.anji.captcha.model.common.ResponseModel;
import com.anji.captcha.model.vo.CaptchaVO;
import com.anji.captcha.service.CaptchaService;
import com.wayn.admin.framework.security.service.LoginService;
import com.wayn.common.constant.SysConstants;
import com.wayn.common.core.model.LoginObj;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@AllArgsConstructor
public class SliderLoginController {
private LoginService loginService;
private CaptchaService captchaService;
@PostMapping("/slider/login")
public R sliderLogin(@RequestBody LoginObj loginObj) {
// 必传参数captchaVerification
// 调用滑块验证码后台二次验证逻辑
CaptchaVO captchaVO = new CaptchaVO();
captchaVO.setCaptchaVerification(loginObj.getCaptchaVerification());
ResponseModel response = captchaService.verification(captchaVO);
if (!response.isSuccess()) {
//验证码校验失败,返回信息告诉前端
//repCode 0000 无异常,代表成功
//repCode 9999 服务器内部异常
//repCode 0011 参数不能为空
//repCode 6110 验证码已失效,请重新获取
//repCode 6111 验证失败
//repCode 6112 获取验证码失败,请联系管理员
//repCode 6113 底图未初始化成功,请检查路径
//repCode 6201 get接口请求次数超限请稍后再试!
//repCode 6206 无效请求,请重新获取验证码
//repCode 6202 接口验证失败数过多,请稍后再试
//repCode 6204 check接口请求次数超限请稍后再试!
return R.error(ReturnCodeEnum.CUSTOM_ERROR.getCode(), response.getRepMsg());
}
// 生成令牌
String token = loginService.login(loginObj.getUsername(), loginObj.getPassword());
return R.success().add(SysConstants.TOKEN, token);
}
}

@ -10,27 +10,26 @@ import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.excel.ExcelUtil;
import com.wayn.common.util.security.SecurityUtils;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("system/user")
public class UserController extends BaseController {
@Autowired
private IUserService iUserService;
@Autowired
private IRoleService iRoleService;
@PreAuthorize("@ss.hasPermi('system:user:list')")

@ -6,15 +6,15 @@ import com.wayn.common.core.service.tool.IMailConfigService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.mail.MailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@AllArgsConstructor
@RequestMapping("tool/email")
public class EmailConfigController {
@Autowired
private IMailConfigService mailConfigService;
@GetMapping

@ -10,8 +10,8 @@ import com.wayn.common.core.service.tool.IQiniuConfigService;
import com.wayn.common.core.service.tool.IQiniuContentService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -19,13 +19,12 @@ import javax.validation.Valid;
import java.io.IOException;
@RestController
@AllArgsConstructor
@RequestMapping("tool/qiniu")
public class QiniuController extends BaseController {
@Autowired
private IQiniuConfigService iQiniuConfigService;
@Autowired
private IQiniuContentService iQiniuContentService;
@GetMapping("/list")

@ -1,12 +1,12 @@
package com.wayn.admin.api.controller.websocket;
import jakarta.annotation.PostConstruct;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;

@ -1,40 +0,0 @@
package com.wayn.admin.api.service.impl;
import com.anji.captcha.service.CaptchaCacheService;
import com.wayn.data.redis.manager.RedisCache;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.concurrent.TimeUnit;
@RequiredArgsConstructor
public class CaptchaCacheServiceRedisImpl implements CaptchaCacheService {
@Autowired
private RedisCache redisCache;
@Override
public void set(String key, String value, long expiresInSeconds) {
redisCache.setCacheObject(key, value, (int) expiresInSeconds, TimeUnit.SECONDS);
}
@Override
public boolean exists(String key) {
return redisCache.existsKey(key);
}
@Override
public void delete(String key) {
redisCache.deleteObject(key);
}
@Override
public String get(String key) {
return redisCache.getCacheObject(key);
}
@Override
public String type() {
return "redis";
}
}

@ -1,71 +0,0 @@
package com.wayn.admin.framework.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import com.alibaba.druid.util.Utils;
import com.wayn.admin.framework.config.properties.DruidProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.sql.DataSource;
import java.io.IOException;
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties("spring.datasource.master")
public DataSource dataSource(DruidProperties druidProperties) {
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);
}
/**
* 广
*/
@SuppressWarnings({"rawtypes", "unchecked"})
@Bean
@ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")
public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) {
// 获取web监控页面的参数
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
// 提取common.js的配置路径
String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
final String filePath = "support/http/resources/js/common.js";
// 创建filter进行过滤
Filter filter = new Filter() {
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response);
// 重置缓冲区,响应头不会被重置
response.resetBuffer();
// 获取common.js
String text = Utils.readFromResource(filePath);
// 正则替换banner, 除去底部的广告信息
text = text.replaceAll("<a.*?banner\"></a><br/>", "");
text = text.replaceAll("powered.*?shrek.wang</a>", "");
response.getWriter().write(text);
}
@Override
public void destroy() {
}
};
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns(commonJsPattern);
return registrationBean;
}
}

@ -0,0 +1,26 @@
package com.wayn.admin.framework.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
public class HikariCpConfig {
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return new HikariDataSource();
}
@Bean(name = "masterTransactionManager")
public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}

@ -1,14 +1,14 @@
package com.wayn.admin.framework.config;
import com.wayn.common.constant.Constants;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.connection.channel.direct.Parameters;
import net.schmizz.sshj.transport.verification.PromiscuousVerifier;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
@ -23,7 +23,7 @@ public class SSHProxyConfig {
public static final String localHost = "localhost";
private SSHClient client;
private SSHProxyProperties sshProxyProperties;
private final SSHProxyProperties sshProxyProperties;
public SSHProxyConfig(SSHProxyProperties sshProxyProperties) {
this.sshProxyProperties = sshProxyProperties;

@ -4,11 +4,12 @@ import com.wayn.admin.framework.security.filter.JwtAuthenticationTokenFilter;
import com.wayn.admin.framework.security.handle.AuthenticationEntryPointImpl;
import com.wayn.admin.framework.security.handle.LogoutSuccessHandlerImpl;
import com.wayn.admin.framework.security.service.UserDetailsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
@ -21,19 +22,16 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@Configuration
@EnableWebSecurity
// @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
@AllArgsConstructor
@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Autowired
private AuthenticationEntryPointImpl unauthorizedHandler;
@Autowired
private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
@Autowired
private LogoutSuccessHandlerImpl logoutSuccessHandler;
@Bean
@ -49,24 +47,24 @@ public class SecurityConfig {
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.exceptionHandling().and()
// 过滤请求
.authorizeRequests()
.authorizeHttpRequests()
// 处理跨域请求中的Preflight请求(cors)设置corsConfigurationSource后无需使用
// .requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
// 对于登录login 验证码captchaImage 允许匿名访问
.antMatchers("/favicon.ico", "/login", "/favicon.ico", "/actuator/**").anonymous()
.antMatchers("/slider/**").anonymous()
.antMatchers("/captcha/**").anonymous()
.antMatchers("/upload/**").anonymous()
.antMatchers("/common/download**").anonymous()
.antMatchers("/doc.html").anonymous()
.antMatchers("/swagger-ui/**").anonymous()
.antMatchers("/swagger-resources/**").anonymous()
.antMatchers("/webjars/**").anonymous()
.antMatchers("/*/api-docs").anonymous()
.antMatchers("/druid/**").anonymous()
.antMatchers("/elastic/**").anonymous()
.antMatchers("/message/**").anonymous()
.antMatchers("/ws/**").anonymous()
.requestMatchers("/favicon.ico", "/login", "/favicon.ico", "/actuator/**").anonymous()
.requestMatchers("/slider/**").anonymous()
.requestMatchers("/captcha/**").anonymous()
.requestMatchers("/upload/**").anonymous()
.requestMatchers("/common/download**").anonymous()
.requestMatchers("/doc.html").anonymous()
.requestMatchers("/swagger-ui/**").anonymous()
.requestMatchers("/swagger-resources/**").anonymous()
.requestMatchers("/webjars/**").anonymous()
.requestMatchers("/*/api-docs").anonymous()
.requestMatchers("/druid/**").anonymous()
.requestMatchers("/elastic/**").anonymous()
.requestMatchers("/message/**").anonymous()
.requestMatchers("/ws/**").anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated().and()
.headers().frameOptions().disable();

@ -1,69 +0,0 @@
package com.wayn.admin.framework.config.properties;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
* druid
*
* @author ruoyi
*/
@Configuration
public class DruidProperties {
@Value("${spring.datasource.druid.initialSize}")
private int initialSize;
@Value("${spring.datasource.druid.minIdle}")
private int minIdle;
@Value("${spring.datasource.druid.maxActive}")
private int maxActive;
@Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}")
private int maxEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.druid.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.testOnReturn}")
private boolean testOnReturn;
public DruidDataSource dataSource(DruidDataSource datasource) {
/** 配置初始化大小、最小、最大 */
datasource.setInitialSize(initialSize);
datasource.setMaxActive(maxActive);
datasource.setMinIdle(minIdle);
/** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
/** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
/**
* sqlselect 'x'validationQuerynulltestOnBorrowtestOnReturntestWhileIdle
*/
datasource.setValidationQuery(validationQuery);
/** 建议配置为true不影响性能并且保证安全性。申请连接的时候检测如果空闲时间大于timeBetweenEvictionRunsMillis执行validationQuery检测连接是否有效。 */
datasource.setTestWhileIdle(testWhileIdle);
/** 申请连接时执行validationQuery检测连接是否有效做了这个配置会降低性能。 */
datasource.setTestOnBorrow(testOnBorrow);
/** 归还连接时执行validationQuery检测连接是否有效做了这个配置会降低性能。 */
datasource.setTestOnReturn(testOnReturn);
return datasource;
}
}

@ -1,12 +1,13 @@
package com.wayn.admin.framework.config.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
//@Configuration
@Configuration
@ConfigurationProperties(prefix = "shop.express")
public class ExpressProperties {
private boolean enable;

@ -1,25 +0,0 @@
package com.wayn.admin.framework.manager.datasource;
import com.wayn.admin.framework.manager.datasource.thread.DataSourceHolder;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import javax.sql.DataSource;
import java.util.Map;
/**
* <br>
* determineCurrentLookupKeykey
*/
public class RoutingDataSource extends AbstractRoutingDataSource {
public RoutingDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
super.setDefaultTargetDataSource(defaultTargetDataSource);
super.setTargetDataSources(targetDataSources);
super.afterPropertiesSet();
}
@Override
protected Object determineCurrentLookupKey() {
return DataSourceHolder.get();
}
}

@ -1,24 +0,0 @@
package com.wayn.admin.framework.manager.datasource.thread;
import com.wayn.common.enums.DataSourceEnum;
/**
* threadLocal
*/
public class DataSourceHolder {
private static ThreadLocal<DataSourceEnum> dataSourceEnumThreadLocal = ThreadLocal.withInitial(() -> DataSourceEnum.MASTER);
public static void set(DataSourceEnum dataSourceEnum) {
dataSourceEnumThreadLocal.set(dataSourceEnum);
}
public static DataSourceEnum get() {
return dataSourceEnumThreadLocal.get();
}
public static void remove() {
dataSourceEnumThreadLocal.remove();
}
}

@ -6,8 +6,12 @@ import com.wayn.common.core.model.LoginUserDetail;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.json.JsonUtil;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.RedisConnectionFailureException;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@ -16,10 +20,6 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Objects;
@ -28,9 +28,9 @@ import java.util.Objects;
*/
@Slf4j
@Component
@AllArgsConstructor
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Autowired
private TokenService tokenService;
@Override

@ -3,14 +3,14 @@ package com.wayn.admin.framework.security.handle;
import com.wayn.common.constant.Constants;
import com.wayn.common.util.R;
import com.wayn.common.util.json.JsonUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.Serial;
import java.io.Serializable;

@ -4,27 +4,24 @@ import com.wayn.admin.framework.security.service.TokenService;
import com.wayn.common.core.model.LoginUserDetail;
import com.wayn.common.util.R;
import com.wayn.common.util.json.JsonUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Objects;
/**
* 退
*
* @author ruoyi
*/
@Configuration
@AllArgsConstructor
public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler {
@Autowired
private TokenService tokenService;
@SneakyThrows

@ -2,9 +2,9 @@ package com.wayn.admin.framework.security.service;
import com.wayn.common.core.model.LoginUserDetail;
import com.wayn.common.exception.BusinessException;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@ -13,12 +13,11 @@ import org.springframework.stereotype.Component;
@Slf4j
@Component
@AllArgsConstructor
public class LoginService {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private TokenService tokenService;

@ -3,24 +3,21 @@ package com.wayn.admin.framework.security.service;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.json.JsonUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
@Component
public class MyAuthenticationFailureHandler implements AuthenticationFailureHandler {
@SneakyThrows
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws ServletException {
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) {
log.info("登录失败");
//设置状态码
response.setStatus(500);

@ -3,20 +3,16 @@ package com.wayn.admin.framework.security.service;
import com.wayn.common.core.domain.system.Role;
import com.wayn.common.core.model.LoginUserDetail;
import com.wayn.common.util.ServletUtils;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Objects;
import java.util.Set;
/**
* RuoYi ssSpringSecurity
*
* @author ruoyi
*/
@Service("ss")
@AllArgsConstructor
public class PermissionService {
/**
*
@ -32,7 +28,6 @@ public class PermissionService {
private static final String PERMISSION_DELIMETER = ",";
@Autowired
private TokenService tokenService;
/**

@ -3,7 +3,7 @@ package com.wayn.admin.framework.security.service;
import com.wayn.common.core.domain.system.User;
import com.wayn.common.core.service.system.IMenuService;
import com.wayn.common.core.service.system.IRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.HashSet;
@ -13,11 +13,10 @@ import java.util.Set;
*
*/
@Component
@AllArgsConstructor
public class SysPermissionService {
@Autowired
private IRoleService roleService;
@Autowired
private IMenuService menuService;
/**

@ -1,40 +1,31 @@
package com.wayn.admin.framework.security.service;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.wayn.common.config.TokenConfig;
import com.wayn.common.constant.SysConstants;
import com.wayn.common.core.model.LoginUserDetail;
import com.wayn.common.core.service.system.IUserService;
import com.wayn.common.util.jwt.JwtUtil;
import com.wayn.data.redis.constant.CacheConstants;
import com.wayn.data.redis.manager.RedisCache;
import jakarta.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@Component
@AllArgsConstructor
public class TokenService {
protected static final long MILLIS_SECOND = 1000;
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
private static final Long MILLIS_MINUTE_TEN = 20 * 60 * MILLIS_SECOND;
// 令牌自定义标识
@Value("${token.header}")
private String header;
// 令牌秘钥
@Value("${token.secret}")
private String secret;
// 令牌有效期默认30分钟
@Value("${token.expireTime}")
private int expireTime;
@Autowired
private RedisCache redisCache;
@Autowired
private IUserService iUserService;
private TokenConfig config;
public LoginUserDetail getLoginUser(HttpServletRequest request) {
// 获取请求携带的令牌
@ -53,7 +44,7 @@ public class TokenService {
String token = UUID.randomUUID().toString().replaceAll("-", "");
loginUser.setToken(token);
refreshToken(loginUser);
return JwtUtil.sign(token, secret);
return JwtUtil.sign(token, config.getSecret());
}
public void delLoginUser(String token) {
@ -65,10 +56,10 @@ public class TokenService {
public void refreshToken(LoginUserDetail loginUser) {
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
loginUser.setExpireTime(loginUser.getLoginTime() + config.getExpireTime() * MILLIS_MINUTE);
// 根据uuid将loginUser缓存
String userKey = CacheConstants.LOGIN_TOKEN_KEY + loginUser.getToken();
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
redisCache.setCacheObject(userKey, loginUser, config.getExpireTime(), TimeUnit.MINUTES);
}
public void verifyToken(LoginUserDetail loginUser) {
@ -86,7 +77,7 @@ public class TokenService {
* @return token
*/
private String getToken(HttpServletRequest request) {
String token = request.getHeader(header);
String token = request.getHeader(config.getHeader());
if (StringUtils.isNotEmpty(token) && token.startsWith(SysConstants.TOKEN_PREFIX)) {
token = token.replace(SysConstants.TOKEN_PREFIX, "");
}

@ -6,8 +6,8 @@ import com.wayn.common.core.model.LoginUserDetail;
import com.wayn.common.core.service.system.IDeptService;
import com.wayn.common.core.service.system.IUserService;
import com.wayn.common.enums.UserStatusEnum;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
@ -19,15 +19,13 @@ import java.util.Objects;
@Slf4j
@Service
@AllArgsConstructor
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private IUserService iUserService;
@Autowired
private IDeptService iDeptService;
@Autowired
private SysPermissionService permissionService;
public static void main(String[] args) {

@ -1,42 +0,0 @@
# druid数据源配置
spring:
datasource:
druid:
initialSize: 10
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 50
# 配置获取连接等待超时的时间
# maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username:
login-password:
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true

@ -6,7 +6,7 @@ spring:
application:
name: waynboot-admin-api
profiles:
active: dev,druid,express
active: dev,express
thymeleaf:
cache: false
suffix: .html
@ -71,7 +71,7 @@ mybatis-plus:
# wayn配置
wayn:
name: wayn
version: 1.1.0
version: 1.2.0
email: 166738430@qq.com
uploadDir: ${UPLOAD_DIR:D:/wayn/upload}
adminUrl: http://localhost:81
@ -85,23 +85,3 @@ wayn:
localPort: # 代理本地端口
remoteHost: # 需要代理的服务host
remotePort: # 需要代理的服务port
#滑块验证码配置
aj:
captcha:
aes-status: true
cache-type: redis
font-size: 25
font-style: 1
history-data-clear-enable: false
interference-options: 0
jigsaw: classpath:images/capthcha
req-check-minute-limit: 60
req-frequency-limit-enable: true
req-get-lock-limit: 2
req-get-lock-seconds: 360
req-get-minute-limit: 30
req-verify-minute-limit: 60
slip-offset: 5
type: default
water-mark: wayn

@ -5,11 +5,11 @@
<parent>
<artifactId>waynboot</artifactId>
<groupId>com.wayn</groupId>
<version>1.1.0</version>
<version>1.2.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>waynboot-common</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
<dependencies>
<dependency>
@ -123,37 +123,38 @@
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<artifactId>jakarta.mail</artifactId>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>4.4.5.B</version>
<version>4.4.7.B</version>
</dependency>
<!--支付宝依赖-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.34.52.ALL</version>
<version>4.35.9.ALL</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>com.wayn</groupId>
<artifactId>waynboot-data-redis</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.wayn</groupId>
<artifactId>waynboot-data-elastic</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
</dependency>
</dependencies>

@ -4,8 +4,6 @@ import java.lang.annotation.*;
/**
*
*
* @author ruoyi
*/
@Inherited
@Target(ElementType.METHOD)
@ -13,4 +11,4 @@ import java.lang.annotation.*;
@Documented
public @interface RepeatSubmit {
}
}

@ -8,14 +8,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wayn.common.constant.Constants;
import com.wayn.common.util.ServletUtils;
import com.wayn.common.util.http.HttpUtil;
import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
/**

@ -9,14 +9,14 @@ import com.wayn.common.exception.BusinessException;
import com.wayn.common.util.R;
import com.wayn.common.util.file.FileUploadUtil;
import com.wayn.common.util.file.FileUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.ArrayList;
import java.util.Base64;
@ -24,16 +24,14 @@ import java.util.List;
/**
*
*
* @author ruoyi
*/
@Slf4j
@Controller
@AllArgsConstructor
@RequestMapping("common")
public class CommonController {
public static final String IMAGE_BASE64_FLAG = ";base64,";
@Autowired
private UploadService uploadService;
/**

@ -15,8 +15,8 @@ import com.wayn.common.util.ServletUtils;
import com.wayn.common.util.file.FileUtils;
import com.wayn.common.util.file.QiniuUtil;
import com.wayn.common.util.http.HttpUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
@ -34,11 +34,11 @@ import java.io.File;
* @version: V1.0
* @modified: yangkai.shen
*/
@Service
@Slf4j
@Service
@AllArgsConstructor
public class UploadServiceImpl implements UploadService {
@Autowired
private IQiniuConfigService iQiniuConfigService;
/**

@ -0,0 +1,47 @@
package com.wayn.common.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "token")
public class TokenConfig {
/**
*
*/
private String header;
/**
*
*/
private String secret;
/**
* 30
*/
private int expireTime;
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public int getExpireTime() {
return expireTime;
}
public void setExpireTime(int expireTime) {
this.expireTime = expireTime;
}
}

@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.Banner;
import com.wayn.common.core.mapper.shop.BannerMapper;
import com.wayn.common.core.service.shop.IBannerService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@ -14,9 +14,9 @@ import org.springframework.stereotype.Service;
import java.util.List;
@Service
@AllArgsConstructor
public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> implements IBannerService {
@Autowired
private BannerMapper bannerMapper;
@Override

@ -6,16 +6,16 @@ import com.wayn.common.constant.SysConstants;
import com.wayn.common.core.domain.shop.Channel;
import com.wayn.common.core.mapper.shop.ChannelMapper;
import com.wayn.common.core.service.shop.IChannelService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Service
@AllArgsConstructor
public class ChannelServiceImpl extends ServiceImpl<ChannelMapper, Channel> implements IChannelService {
@Autowired
private ChannelMapper channelMapper;
@Override

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.ColumnGoodsRelation;
import com.wayn.common.core.mapper.shop.ColumnGoodsRelationMapper;
import com.wayn.common.core.service.shop.IColumnGoodsRelationService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
@ -16,9 +16,9 @@ import org.springframework.stereotype.Service;
* @since 2020-10-10
*/
@Service
@AllArgsConstructor
public class ColumnGoodsRelationServiceImpl extends ServiceImpl<ColumnGoodsRelationMapper, ColumnGoodsRelation> implements IColumnGoodsRelationService {
@Autowired
private ColumnGoodsRelationMapper columnGoodsRelationMapper;
@Override

@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.Column;
import com.wayn.common.core.mapper.shop.ColumnMapper;
import com.wayn.common.core.service.shop.IColumnService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
@ -18,9 +18,9 @@ import org.springframework.stereotype.Service;
* @since 2020-10-10
*/
@Service
@AllArgsConstructor
public class ColumnServiceImpl extends ServiceImpl<ColumnMapper, Column> implements IColumnService {
@Autowired
private ColumnMapper columnMapper;
@Override

@ -10,8 +10,8 @@ import com.wayn.common.core.mapper.shop.CommentMapper;
import com.wayn.common.core.service.shop.ICommentService;
import com.wayn.common.core.service.shop.IOrderGoodsService;
import com.wayn.common.exception.BusinessException;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -26,12 +26,11 @@ import java.util.Date;
* @since 2020-10-03
*/
@Service
@AllArgsConstructor
public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> implements ICommentService {
@Autowired
private CommentMapper commentMapper;
@Autowired
private IOrderGoodsService iOrderGoodsService;
@Override

@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.Diamond;
import com.wayn.common.core.mapper.shop.DiamondMapper;
import com.wayn.common.core.service.shop.IDiamondService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
@ -18,9 +18,9 @@ import org.springframework.stereotype.Service;
* @since 2020-10-10
*/
@Service
@AllArgsConstructor
public class DiamondServiceImpl extends ServiceImpl<DiamondMapper, Diamond> implements IDiamondService {
@Autowired
private DiamondMapper diamondMapper;
@Override

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.GoodsProduct;
import com.wayn.common.core.mapper.shop.GoodsProductMapper;
import com.wayn.common.core.service.shop.IGoodsProductService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
@ -16,9 +16,9 @@ import org.springframework.stereotype.Service;
* @since 2020-07-06
*/
@Service
@AllArgsConstructor
public class GoodsProductServiceImpl extends ServiceImpl<GoodsProductMapper, GoodsProduct> implements IGoodsProductService {
@Autowired
private GoodsProductMapper goodsProductMapper;
@Override

@ -6,13 +6,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.Address;
import com.wayn.common.core.mapper.shop.AddressMapper;
import com.wayn.common.core.service.shop.IAddressService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class IAddressServiceImpl extends ServiceImpl<AddressMapper, Address> implements IAddressService {
@Autowired
private AddressMapper addressMapper;
@Override

@ -2,10 +2,10 @@ package com.wayn.common.core.service.shop.impl;
import com.wayn.common.core.service.shop.IMailService;
import com.wayn.common.util.IdUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
@ -13,8 +13,8 @@ import java.util.Map;
@Slf4j
@Service
@AllArgsConstructor
public class IMailServiceImpl implements IMailService {
@Autowired
RabbitTemplate rabbitTemplate; //使用RabbitTemplate,这提供了接收/发送等等方法
@Override

@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.Keyword;
import com.wayn.common.core.mapper.shop.KeywordMapper;
import com.wayn.common.core.service.shop.IKeywordService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
@ -18,9 +18,9 @@ import org.springframework.stereotype.Service;
* @since 2020-11-02
*/
@Service
@AllArgsConstructor
public class KeywordServiceImpl extends ServiceImpl<KeywordMapper, Keyword> implements IKeywordService {
@Autowired
private KeywordMapper keywordMapper;
@Override

@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wayn.common.core.domain.shop.Member;
import com.wayn.common.core.mapper.shop.MemberMapper;
import com.wayn.common.core.service.shop.IMemberService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
@ -18,9 +18,9 @@ import org.springframework.stereotype.Service;
* @since 2020-07-21
*/
@Service
@AllArgsConstructor
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements IMemberService {
@Autowired
private MemberMapper memberMapper;
@Override

@ -9,7 +9,7 @@ import com.wayn.common.core.domain.vo.TreeVO;
import com.wayn.common.core.mapper.system.DeptMapper;
import com.wayn.common.core.service.system.IDeptService;
import com.wayn.common.core.service.system.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@ -18,12 +18,11 @@ import java.util.Objects;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
@Autowired
private DeptMapper deptMapper;
@Autowired
private IUserService iUserService;
@Override

@ -8,7 +8,7 @@ import com.wayn.common.constant.SysConstants;
import com.wayn.common.core.domain.system.Dict;
import com.wayn.common.core.mapper.system.DictMapper;
import com.wayn.common.core.service.system.IDictService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -16,9 +16,9 @@ import java.util.List;
import java.util.Objects;
@Service
@AllArgsConstructor
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
@Autowired
private DictMapper dictMapper;
@Override

@ -13,8 +13,8 @@ import com.wayn.common.core.mapper.system.MenuMapper;
import com.wayn.common.core.service.system.IMenuService;
import com.wayn.common.core.service.system.IRoleMenuService;
import com.wayn.common.util.security.SecurityUtils;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@ -24,12 +24,11 @@ import java.util.Objects;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
@Autowired
private MenuMapper menuMapper;
@Autowired
private IRoleMenuService iRoleMenuService;
@Override

@ -14,7 +14,7 @@ import com.wayn.common.core.service.system.IRoleMenuService;
import com.wayn.common.core.service.system.IRoleService;
import com.wayn.common.core.service.system.IUserRoleService;
import com.wayn.common.exception.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -23,19 +23,15 @@ import java.util.Objects;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
@Autowired
private RoleMapper roleMapper;
@Autowired
private IRoleMenuService iRoleMenuService;
@Autowired
private IUserRoleService iUserRoleService;
@Override
public List<String> selectRoleByUserId(Long userId) {
return roleMapper.selectRoleByUserId(userId);
}

@ -2,7 +2,6 @@ package com.wayn.common.core.service.system.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.read.listener.ReadListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -16,12 +15,11 @@ import com.wayn.common.core.mapper.system.RoleMapper;
import com.wayn.common.core.mapper.system.UserMapper;
import com.wayn.common.core.service.system.IUserRoleService;
import com.wayn.common.core.service.system.IUserService;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.exception.BusinessException;
import com.wayn.common.util.R;
import com.wayn.common.util.security.SecurityUtils;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -32,15 +30,13 @@ import java.util.*;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Autowired
private UserMapper userMapper;
@Autowired
private RoleMapper roleMapper;
@Autowired
private IUserRoleService iUserRoleService;
@Override

@ -20,8 +20,8 @@ import com.wayn.common.core.service.tool.IQiniuConfigService;
import com.wayn.common.core.service.tool.IQiniuContentService;
import com.wayn.common.util.file.FileUtils;
import com.wayn.common.util.file.QiniuUtil;
import lombok.AllArgsConstructor;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -37,12 +37,11 @@ import java.util.Date;
* @since 2020-11-15
*/
@Service
@AllArgsConstructor
public class QiniuContentServiceImpl extends ServiceImpl<QiniuContentMapper, QiniuContent> implements IQiniuContentService {
@Autowired
private QiniuContentMapper qiniuContentMapper;
@Autowired
private IQiniuConfigService iQiniuConfigService;
@Override

@ -23,8 +23,8 @@ public class SexConverter extends AbstractIntConverter {
WOMAN(1, "女");
private Integer type;
private String desc;
private final Integer type;
private final String desc;
SexEnum(Integer type, String desc) {
this.type = type;

@ -23,8 +23,8 @@ public class StatusConverter extends AbstractIntConverter {
WOMAN(1, "禁用");
private Integer type;
private String desc;
private final Integer type;
private final String desc;
StatusEnum(Integer type, String desc) {
this.type = type;

@ -1,9 +1,9 @@
package com.wayn.common.task;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Executors;

@ -1,114 +0,0 @@
package com.wayn.common.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
*
*
* @author ruoyi
*/
public class Arith
{
/** 默认除法运算精度 */
private static final int DEF_DIV_SCALE = 10;
/** 这个类不能实例化 */
private Arith()
{
}
/**
*
* @param v1
* @param v2
* @return
*/
public static double add(double v1, double v2)
{
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
*
* @param v1
* @param v2
* @return
*/
public static double sub(double v1, double v2)
{
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
*
* @param v1
* @param v2
* @return
*/
public static double mul(double v1, double v2)
{
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
*
* 10
* @param v1
* @param v2
* @return
*/
public static double div(double v1, double v2)
{
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* scale
*
* @param v1
* @param v2
* @param scale
* @return
*/
public static double div(double v1, double v2, int scale)
{
if (scale < 0)
{
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
if (b1.compareTo(BigDecimal.ZERO) == 0)
{
return BigDecimal.ZERO.doubleValue();
}
return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
}
/**
*
* @param v
* @param scale
* @return
*/
public static double round(double v, int scale)
{
if (scale < 0)
{
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();
}
}

@ -11,7 +11,7 @@ import java.io.*;
*/
public class SerializeUtils {
private static Logger logger = LoggerFactory.getLogger(SerializeUtils.class);
private static final Logger logger = LoggerFactory.getLogger(SerializeUtils.class);
/**
*
@ -80,4 +80,4 @@ public class SerializeUtils {
}
return result;
}
}
}

@ -1,13 +1,12 @@
package com.wayn.common.util;
import com.wayn.common.constant.Constants;
import com.wayn.common.util.file.FileUtils;
import com.wayn.common.util.http.HttpUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
@ -15,7 +14,7 @@ import java.util.Map;
public class ServletUtils {
private static ServletUtils getInstance;
private static final ServletUtils getInstance;
static {
getInstance = new ServletUtils();

@ -19,7 +19,6 @@ public class ThreadUtil {
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
return;
}
}

@ -46,7 +46,7 @@ public class MyBeanUtil extends BeanUtils {
//1.获取bean信息
BeanInfo beanInfo = Introspector.getBeanInfo(source.getClass());
PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
if (properties != null && properties.length > 0) {
if (properties != null) {
for (PropertyDescriptor prop : properties) {
//2.得到属性名
String name = prop.getName();
@ -82,7 +82,7 @@ public class MyBeanUtil extends BeanUtils {
BeanInfo beanInfo = Introspector.getBeanInfo(source.getClass());
PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
if (properties != null && properties.length > 0) {
if (properties != null) {
for (PropertyDescriptor prop : properties) {
//2.得到属性名
String name = prop.getName();
@ -92,8 +92,7 @@ public class MyBeanUtil extends BeanUtils {
Method getter = prop.getReadMethod();
//5.获取属性值
Object value = getter.invoke(source);
return value;
return getter.invoke(source);
}
}

@ -9,8 +9,6 @@ import java.util.Date;
/**
*
*
* @author ruoyi
*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static String YYYY = "yyyy";
@ -23,7 +21,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static String[] parsePatterns = {
private static final String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};

@ -2,10 +2,10 @@ package com.wayn.common.util.excel;
import com.alibaba.excel.EasyExcel;
import com.wayn.common.util.ServletUtils;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

@ -1,9 +1,9 @@
package com.wayn.common.util.file;
import com.wayn.common.util.security.Md5Utils;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@ -11,8 +11,6 @@ import java.text.DecimalFormat;
/**
*
*
* @author ruoyi
*/
@Slf4j
public class FileUtils extends org.apache.commons.io.FileUtils {

@ -2,8 +2,6 @@ package com.wayn.common.util.file;
/**
*
*
* @author ruoyi
*/
public class MimeTypeUtils
{

@ -1,11 +1,11 @@
package com.wayn.common.util.http;
import com.wayn.common.constant.Constants;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.net.URLEncoder;

@ -1,15 +1,13 @@
package com.wayn.common.util.ip;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* IP
*
* @author ruoyi
*/
public class IpUtils {
public static String getIpAddr(HttpServletRequest request) {
@ -65,9 +63,8 @@ public class IpUtils {
return true;
}
case SECTION_5:
switch (b1) {
case SECTION_6:
return true;
if (b1 == SECTION_6) {
return true;
}
default:
return false;
@ -91,7 +88,7 @@ public class IpUtils {
long l;
int i;
switch (elements.length) {
case 1:
case 1 -> {
l = Long.parseLong(elements[0]);
if ((l < 0L) || (l > 4294967295L))
return null;
@ -99,8 +96,8 @@ public class IpUtils {
bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
bytes[3] = (byte) (int) (l & 0xFF);
break;
case 2:
}
case 2 -> {
l = Integer.parseInt(elements[0]);
if ((l < 0L) || (l > 255L))
return null;
@ -111,8 +108,8 @@ public class IpUtils {
bytes[1] = (byte) (int) (l >> 16 & 0xFF);
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
bytes[3] = (byte) (int) (l & 0xFF);
break;
case 3:
}
case 3 -> {
for (i = 0; i < 2; ++i) {
l = Integer.parseInt(elements[i]);
if ((l < 0L) || (l > 255L))
@ -124,17 +121,18 @@ public class IpUtils {
return null;
bytes[2] = (byte) (int) (l >> 8 & 0xFF);
bytes[3] = (byte) (int) (l & 0xFF);
break;
case 4:
}
case 4 -> {
for (i = 0; i < 4; ++i) {
l = Integer.parseInt(elements[i]);
if ((l < 0L) || (l > 255L))
return null;
bytes[i] = (byte) (int) (l & 0xFF);
}
break;
default:
}
default -> {
return null;
}
}
} catch (NumberFormatException e) {
return null;

@ -3,15 +3,15 @@ package com.wayn.common.util.mail;
import com.sun.mail.util.MailSSLSocketFactory;
import com.wayn.common.core.domain.tool.EmailConfig;
import com.wayn.common.core.domain.vo.SendMailVO;
import jakarta.mail.Authenticator;
import jakarta.mail.PasswordAuthentication;
import jakarta.mail.Session;
import jakarta.mail.Transport;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.List;
import java.util.Properties;

@ -9,8 +9,6 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
*
*
* @author ruoyi
*/
public class SecurityUtils {

@ -38,7 +38,7 @@ public class SpringContextUtil implements BeanFactoryPostProcessor {
* @throws BeansException
*/
public static <T> T getBean(Class<T> clz) throws BeansException {
return (T) beanFactory.getBean(clz);
return beanFactory.getBean(clz);
}
/**

@ -4,9 +4,17 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# 主库数据源
master:
url: jdbc:mysql://127.0.0.1:3306/wayn_shop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
jdbc-url: jdbc:mysql://127.0.0.1:3306/wayn_shop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password:
pool-name: hikariCP
minimum-idle: 100
maximum-pool-size: 200
auto-commit: true
idle-timeout: 10000
max-lifetime: 30000
connection-timeout: 30000
connection-test-query: SELECT 1
# 从库数据源
slave:
# 从数据源开关/默认关闭
@ -15,15 +23,15 @@ spring:
username:
password:
redis:
host: 127.0.0.1
port: 6379
password:
database: 2
timeout: 300
expire: 400
lettuce:
shutdown-timeout: 100ms
data:
redis:
host: 127.0.0.1
port: 6379
password:
database: 2
timeout: 300
lettuce:
shutdown-timeout: 100ms
#配置rabbitMq 服务器
rabbitmq:
host: 127.0.0.1
@ -37,11 +45,12 @@ spring:
publisher-returns: true
es:
host: 127.0.0.1
port: 9200
scheme: http
shards: 3
replicas: 2
config:
host: 127.0.0.1
port: 9200
scheme: http
shards: 3
replicas: 2
# alipay 需要自行申请支付宝的沙箱账号、申请appID并依次配置AppID、密钥、公钥否则无法发起支付宝支付。
alipay:

@ -5,7 +5,7 @@
<parent>
<artifactId>waynboot</artifactId>
<groupId>com.wayn</groupId>
<version>1.1.0</version>
<version>1.2.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<artifactId>waynboot-data</artifactId>
<groupId>com.wayn</groupId>
<version>1.1.0</version>
<version>1.2.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -15,25 +15,6 @@
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
</dependencies>

@ -0,0 +1,27 @@
package com.wayn.data.elastic.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ElasticClientConfig {
@Bean
public RestClientBuilder restClientBuilder(ElasticConfig config) {
return RestClient.builder(new HttpHost(config.getHost(), config.getPort(), config.getScheme()));
}
@Bean
public RestClient elasticsearchRestClient(ElasticConfig config) {
return RestClient.builder(new HttpHost(config.getHost(), config.getPort(), config.getScheme())).build();
}
@Bean
public RestHighLevelClient restHighLevelClient(@Autowired RestClientBuilder restClientBuilder) {
return new RestHighLevelClient(restClientBuilder);
}
}

@ -1,45 +1,56 @@
package com.wayn.data.elastic.config;
import lombok.Data;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "es.config")
public class ElasticConfig {
@Value("${es.host}")
public String host;
@Value("${es.port}")
public int port;
@Value("${es.scheme}")
public String scheme;
@Value("${es.shards}")
public int shards;
@Value("${es.replicas}")
public int replicas;
@Bean
public RestClientBuilder restClientBuilder() {
return RestClient.builder(makeHttpHost());
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getScheme() {
return scheme;
}
public void setScheme(String scheme) {
this.scheme = scheme;
}
public int getShards() {
return shards;
}
@Bean
public RestClient elasticsearchRestClient() {
return RestClient.builder(new HttpHost(host, port, scheme)).build();
public void setShards(int shards) {
this.shards = shards;
}
private HttpHost makeHttpHost() {
return new HttpHost(host, port, scheme);
public int getReplicas() {
return replicas;
}
@Bean
public RestHighLevelClient restHighLevelClient(@Autowired RestClientBuilder restClientBuilder) {
return new RestHighLevelClient(restClientBuilder);
public void setReplicas(int replicas) {
this.replicas = replicas;
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save