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); + } + } + +}