diff --git a/DelayQueue/pom.xml b/DelayQueue/pom.xml
new file mode 100644
index 0000000..2d7fdee
--- /dev/null
+++ b/DelayQueue/pom.xml
@@ -0,0 +1,25 @@
+
+
+
+ JavaBasiceDemo
+ com.wyl.example
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ DelayQueue
+
+
+ 8
+ 8
+
+
+
+ org.redisson
+ redisson
+
+
+
+
\ No newline at end of file
diff --git a/DelayQueue/src/main/java/com/wyl/delayqueue/redis/conf/RedissonConf.java b/DelayQueue/src/main/java/com/wyl/delayqueue/redis/conf/RedissonConf.java
new file mode 100644
index 0000000..b049810
--- /dev/null
+++ b/DelayQueue/src/main/java/com/wyl/delayqueue/redis/conf/RedissonConf.java
@@ -0,0 +1,32 @@
+package com.wyl.delayqueue.redis.conf;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+
+/**
+ *
+ * @ClassName: RedissonConf
+ * @Date: 2022/3/3 22:37
+ * @author wangyl
+ * @version V1.0
+ */
+public class RedissonConf {
+
+ private volatile static RedissonClient redissonClient;
+
+ public static RedissonClient getRedissonClient() {
+ if (redissonClient == null) {
+ synchronized (RedissonConf.class) {
+ if (redissonClient == null) {
+ Config config = new Config();
+ config.useSingleServer()
+ .setAddress("redis://192.168.123.102:6379")
+ .setDatabase(0);
+ return Redisson.create(config);
+ }
+ }
+ }
+ return redissonClient;
+ }
+}
diff --git a/DelayQueue/src/main/java/com/wyl/delayqueue/system/entity/DelayMessage.java b/DelayQueue/src/main/java/com/wyl/delayqueue/system/entity/DelayMessage.java
new file mode 100644
index 0000000..3c9cf2c
--- /dev/null
+++ b/DelayQueue/src/main/java/com/wyl/delayqueue/system/entity/DelayMessage.java
@@ -0,0 +1,63 @@
+package com.wyl.delayqueue.system.entity;
+
+import lombok.Data;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.util.concurrent.Delayed;
+import java.util.concurrent.TimeUnit;
+/**
+ * @author: wangyl
+ * @date: 2022/5/14
+ * @description: 延时消息
+ */
+@Data
+public class DelayMessage implements Delayed {
+
+ /**
+ * 数据
+ */
+ private T data;
+
+ /**
+ * 到期时间
+ */
+ private LocalDateTime delayTime;
+ /**
+ * 获取到期的时间
+ * @param unit
+ * @return long
+ * @Date 2022/5/14
+ * @Author wangyl
+ */
+ @Override
+ public long getDelay(TimeUnit unit) {
+ return unit.convert(Duration.between(LocalDateTime.now(),delayTime).toMillis(),TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * 队列中的元素是否到期
+ * @param o
+ * @return int
+ * @Date 2022/5/14
+ * @Author wangyl
+ */
+ @Override
+ public int compareTo(Delayed o) {
+ return this.getDelay(TimeUnit.MILLISECONDS)>o.getDelay(TimeUnit.MILLISECONDS)?1:-1;
+ }
+ @Override
+ public String toString() {
+ String str = "任务失效时间为:"+delayTime.toString() +"任务内容为:"+data.toString();
+ return str;
+ }
+}
+
+
+
+
+
+
+
+
+
diff --git a/DelayQueue/src/main/java/com/wyl/delayqueue/system/entity/Message.java b/DelayQueue/src/main/java/com/wyl/delayqueue/system/entity/Message.java
new file mode 100644
index 0000000..53b82dd
--- /dev/null
+++ b/DelayQueue/src/main/java/com/wyl/delayqueue/system/entity/Message.java
@@ -0,0 +1,18 @@
+package com.wyl.delayqueue.system.entity;
+
+import lombok.Data;
+/**
+ * @author: wangyl
+ * @date: 2022/5/14
+ * @description: 消息数据
+ */
+@Data
+public class Message {
+ private Integer id;
+ private String message;
+ @Override
+ public String toString() {
+ String str = "id:" + id + " message:" + message;
+ return str;
+ }
+}
diff --git a/DelayQueue/src/test/java/com/wyl/delayqueue/system/SystemDayTest.java b/DelayQueue/src/test/java/com/wyl/delayqueue/system/SystemDayTest.java
new file mode 100644
index 0000000..649f876
--- /dev/null
+++ b/DelayQueue/src/test/java/com/wyl/delayqueue/system/SystemDayTest.java
@@ -0,0 +1,49 @@
+package com.wyl.delayqueue.system;
+
+import com.wyl.delayqueue.system.entity.DelayMessage;
+import com.wyl.delayqueue.system.entity.Message;
+import org.junit.jupiter.api.Test;
+
+import java.time.LocalDateTime;
+import java.util.concurrent.DelayQueue;
+
+public class SystemDayTest {
+
+ @Test
+ public void test() throws InterruptedException {
+ Message message = new Message();
+ message.setId(1);
+ message.setMessage("hello world 1");
+ Message message1 = new Message();
+ message1.setId(2);
+ message1.setMessage("hello world 2");
+ Message message2 = new Message();
+ message2.setId(3);
+ message2.setMessage("hello world 3");
+ DelayMessage messageDelayMessage = new DelayMessage<>();
+ messageDelayMessage.setData(message);
+ messageDelayMessage.setDelayTime(LocalDateTime.now()
+ .plusSeconds(10));
+ DelayMessage messageDelayMessage1 = new DelayMessage<>();
+ messageDelayMessage1.setData(message1);
+ messageDelayMessage1.setDelayTime(LocalDateTime.now()
+ .plusSeconds(20));
+ DelayMessage messageDelayMessage2 = new DelayMessage<>();
+ messageDelayMessage2.setData(message2);
+ messageDelayMessage2.setDelayTime(LocalDateTime.now()
+ .plusSeconds(30));
+ DelayQueue> delayQueue = new DelayQueue<>();
+ delayQueue.add(messageDelayMessage);
+ delayQueue.add(messageDelayMessage1);
+ delayQueue.add(messageDelayMessage2);
+
+ while (true) {
+ DelayMessage take = delayQueue.take();
+ System.out.println(take);
+ if (delayQueue.size()==0){
+ break;
+ }
+ }
+
+ }
+}
diff --git a/pom.xml b/pom.xml
index 552c6ed..2bc3750 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,7 @@
chain-of-responsibility
spring-boot
redis
+ DelayQueue
pom
diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml
index ea27a3a..b56304b 100644
--- a/spring-boot/pom.xml
+++ b/spring-boot/pom.xml
@@ -11,6 +11,7 @@
spring-boot-drools
spring-boot-xxjob
+ spring-boot-common
spring-boot
@@ -29,6 +30,18 @@
pom
import
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.3.2
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
diff --git a/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/BaseTest.java b/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/BaseTest.java
new file mode 100644
index 0000000..f0fd5f0
--- /dev/null
+++ b/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/BaseTest.java
@@ -0,0 +1,18 @@
+package com.wyl.springbootmybatis;
+
+import org.junit.runner.RunWith;
+import org.mybatis.spring.annotation.MapperScan;
+import org.mybatis.spring.annotation.MapperScans;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseTest.Application.class)
+public class BaseTest {
+ @ComponentScan(value = "com.wyl.springbootmybatis")
+ @MapperScan({"com.wyl.springbootmybatis.mybatis.mapper"})
+ public static class Application {
+
+ }
+}
\ No newline at end of file
diff --git a/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/mybatis/SpringBootXxjobApplicationTests.java b/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/mybatis/SpringBootXxjobApplicationTests.java
new file mode 100644
index 0000000..497bf20
--- /dev/null
+++ b/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/mybatis/SpringBootXxjobApplicationTests.java
@@ -0,0 +1,33 @@
+package com.wyl.springbootmybatis.mybatis;
+
+import com.wyl.springbootmybatis.BaseTest;
+import com.wyl.springbootmybatis.mybatis.domain.MybatisTest;
+import com.wyl.springbootmybatis.mybatis.service.MybatisTestService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.UUID;
+
+class SpringBootMybatisApplicationTests extends BaseTest {
+
+ @Autowired
+ MybatisTestService mybatisTestService;
+
+ @Test
+ void getDataTest() {
+ List list = mybatisTestService.list();
+ System.out.println(list);
+ }
+
+ @Test
+ void saveDataTest() {
+ for(int i =0;i<300000;i++)
+ {
+ MybatisTest mybatisTest = new MybatisTest();
+ mybatisTest.setCode(UUID.randomUUID().toString());
+ mybatisTestService.save(mybatisTest);
+ }
+ }
+
+}