From 1b89eda79cdd3b66fd8706a7a909b74941571346 Mon Sep 17 00:00:00 2001 From: jlzhou <12020042@qq.com> Date: Tue, 18 Feb 2025 14:28:24 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=AF=8F=E7=A7=92=E4=BA=8B=E4=BB=B6,?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E9=85=8D=E7=BD=AE=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/event/PerSecondEvent.java | 53 ++++++++++++++++++ .../ruoyi/common/runner/PerSecondRunner.java | 16 ++++++ .../ruoyi/common/utils/DynConfigUtils.java | 26 +++++++++ .../ruoyi/demo/controller/DynConfigApi.java | 7 ++- script/docker/nginx/html/favicon.ico | Bin 0 -> 6647 bytes script/docker/nginx/html/index.html | 11 ++++ 6 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/event/PerSecondEvent.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/runner/PerSecondRunner.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/DynConfigUtils.java create mode 100644 script/docker/nginx/html/favicon.ico create mode 100644 script/docker/nginx/html/index.html diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/event/PerSecondEvent.java b/ruoyi-common/src/main/java/com/ruoyi/common/event/PerSecondEvent.java new file mode 100644 index 0000000..5bbc282 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/event/PerSecondEvent.java @@ -0,0 +1,53 @@ +package com.ruoyi.common.event; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.springframework.context.ApplicationEvent; + +/** + *
+ * - 每秒都会触发的事件
+ * Author : J.L.Zhou
+ * E-Mail : 2233875735@qq.com
+ * Tel : 151 1104 7708
+ * Date : 2022年12月27日 下午3:10:39
+ * Version : 1.0
+ * Copyright 2022 jlzhou.top Inc. All rights reserved.
+ * Warning: this content is only for internal circulation of the company.
+ *          It is forbidden to divulge it or use it for other commercial purposes.
+ * 
+ */ +public class PerSecondEvent extends ApplicationEvent { + + /** + * + */ + private static final long serialVersionUID = 1752655123185832181L; + private static AtomicInteger globalCount = new AtomicInteger(0); + private static final int MAX = 24*365*60*60; + + private int count; + + public PerSecondEvent() { + super(0); + if(globalCount.incrementAndGet()>MAX) { + globalCount.set(0); + } + count=globalCount.get(); + super.source= count; + } + + + public int getCount() { + return count; + } + + + @Override + public String toString() { + return " 每秒都会触发的事件: " + count; + } + + + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/runner/PerSecondRunner.java b/ruoyi-common/src/main/java/com/ruoyi/common/runner/PerSecondRunner.java new file mode 100644 index 0000000..26888cf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/runner/PerSecondRunner.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.runner; + +import com.ruoyi.common.event.PerSecondEvent; +import com.ruoyi.common.utils.spring.SpringUtils; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.Scheduled; + +@Configuration +public class PerSecondRunner { + + @Scheduled(fixedRate = 1000) + public void PerSecondRunner() { + SpringUtils.publishEvent(new PerSecondEvent()); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DynConfigUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DynConfigUtils.java new file mode 100644 index 0000000..95f8e8f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DynConfigUtils.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.utils; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; + +public class DynConfigUtils { + + /** + * 将动态配置类转换为普通bean + * @param config 动态配置bean + * @return 普通bean + * @param + */ + public static T toBean(T config) { + return (T)BeanUtil.toBean(config, config.getClass()); + } + + /** + * 将普通bean非空属性设置到动态配置config中 + * @param bean 普通bean + * @param config 动态配置bean + */ + public static void setBean(Object bean, Object config) { + BeanUtil.copyProperties(bean,config, CopyOptions.create(config.getClass(),true)); + } +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/DynConfigApi.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/DynConfigApi.java index 446984b..7a9f007 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/DynConfigApi.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/DynConfigApi.java @@ -5,6 +5,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import com.ruoyi.common.annotation.Dev; +import com.ruoyi.common.utils.DynConfigUtils; import com.ruoyi.demo.dynconfig.TestDynConfig; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -21,14 +22,16 @@ public class DynConfigApi { @GetMapping public Object get(){ // return config; //java中可以直接使用,但是不能JSON序列号,因为他是经过aop代理后的bean - return BeanUtil.toBean(config, TestDynConfig.class); +// return BeanUtil.toBean(config, TestDynConfig.class); + return DynConfigUtils.toBean(config); } @PostMapping public void set(@RequestBody TestDynConfig config){ // this.config=config;//不能直接赋值 - BeanUtil.copyProperties(config,this.config, CopyOptions.create(TestDynConfig.class,true));//使用属性copy的方法或setter(getter)完成 +// BeanUtil.copyProperties(config,this.config, CopyOptions.create(TestDynConfig.class,true));//使用属性copy的方法或setter(getter)完成 + DynConfigUtils.setBean(config,this.config); this.config.save();//主动异步保存(PS:属性的方法不会触发保存需要主动异步保存),执行set*,put*,add*,remove*方法后会自动异步保存 } } diff --git a/script/docker/nginx/html/favicon.ico b/script/docker/nginx/html/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..86d7bc6ed96f6b973c210084545d53e57654b24c GIT binary patch literal 6647 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 BrYHaa literal 0 HcmV?d00001 diff --git a/script/docker/nginx/html/index.html b/script/docker/nginx/html/index.html new file mode 100644 index 0000000..4aa35cc --- /dev/null +++ b/script/docker/nginx/html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file