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