diff --git a/pom.xml b/pom.xml
index d4335ef..7a46557 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,7 +74,7 @@
- -H:DashboardDump=dailylove -H:+DashboardAll
+
-H:+ReportExceptionStackTraces
--enable-monitoring=jfr
@@ -89,12 +89,12 @@
-
+
diff --git a/src/main/java/com/bamanker/dailylove/config/ClassReflectConfig.java b/src/main/java/com/bamanker/dailylove/config/ClassReflectConfig.java
new file mode 100644
index 0000000..e5c689d
--- /dev/null
+++ b/src/main/java/com/bamanker/dailylove/config/ClassReflectConfig.java
@@ -0,0 +1,138 @@
+package com.bamanker.dailylove.config;
+
+import cn.hutool.core.util.ClassUtil;
+import jakarta.annotation.PostConstruct;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 反射将所有项目类扫描加入到服务, 大力出奇迹的操作,感觉不太合适,不过先让服务跑起来
+ *
+ * @author bamanker
+ */
+@Component
+public class ClassReflectConfig {
+
+ static boolean begin = true;
+
+ @Value("${scanclass}")
+ private Boolean scanclass;
+
+ @Autowired
+ private ThreadPoolTaskExecutor executorService;
+
+ @PostConstruct
+ public void init() {
+
+ if (scanclass) {
+ System.err.println("配置文件下 scanclass 开启了生成反射类");
+ } else {
+ System.err.println("配置文件下 scanclass 关闭了生成反射类");
+ }
+
+ synchronized (ClassReflectConfig.class) {
+ if (begin && scanclass) {
+ begin = false;
+ executorService.submit(() -> {
+
+// {
+// // 先抓取上一次的文件,生成
+// try {
+// BufferedReader utf8Reader = ResourceUtil
+// .getUtf8Reader("classpath:/META-INF/native-image/reflect-config.json");
+// String res = utf8Reader.lines().collect(Collectors.joining());
+// List object = ProJsonUtil.toObject(res, List.class);
+// for (Object object2 : object) {
+// try {
+// Map object22 = (Map) object2;
+// handlerClass(Class.forName(ProMapUtil.getStr(object22, "name")));
+// } catch (Exception e) {
+// }
+// }
+// } catch (Exception e) {
+// log.error("生成文件异常", e);
+// }
+// }
+
+ {
+ // 扫描系统第二级开始的包
+ String packageName = ClassReflectConfig.class.getPackageName();
+ String proPackageName = packageName.substring(0,
+ packageName.indexOf(".", packageName.indexOf(".") + 1));
+
+ // 可以在这个地方,添加除了服务以外其他的包,将会加入反射,以供graalvm生成配置
+ List asList = Arrays.asList(proPackageName);
+
+ for (String spn : asList) {
+ try {
+ Set> doScan = ClassUtil.scanPackage(spn);
+ for (Class clazz : doScan) {
+ handlerClass(clazz);
+ }
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ // handlerClass(RedisMessageListenerContainer.class);
+
+ });
+ }
+ }
+
+
+ }
+
+ private void handlerClass(Class clazz) {
+ if (clazz.equals(ClassReflectConfig.class)) {
+ // 跳过自己,避免形成循环
+ return;
+ }
+
+ executorService.submit(() -> {
+ try {
+ System.err.println("反射注入:" + clazz.getName());
+ // 生成所有的构造器
+ Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
+ // 找到无参构造器然后实例化
+ Constructor declaredConstructor = clazz.getDeclaredConstructor();
+ declaredConstructor.setAccessible(true);
+ Object newInstance = declaredConstructor.newInstance();
+ Method[] methods = clazz.getDeclaredMethods();
+ for (Method method : methods) {
+ try {
+ // 实例化成功,那么调用一下
+ method.setAccessible(true);
+ // graalvm必须需要声明方法
+ method.invoke(newInstance);
+ } catch (Throwable e) {
+ }
+ }
+ Field[] fields = clazz.getDeclaredFields();
+ for (Field field : fields) {
+ try {
+ field.setAccessible(true);
+ field.getType();
+ String name = field.getName();
+ field.get(newInstance);
+
+ } catch (Throwable e) {
+ }
+ }
+ System.err.println("反射注入完成:" + clazz.getName());
+ } catch (Throwable e) {
+ }
+ });
+ }
+
+}
diff --git a/src/main/java/com/bamanker/dailylove/config/DailyLoveConfigure.java b/src/main/java/com/bamanker/dailylove/config/DailyLoveConfigure.java
index 8062298..b7263b7 100644
--- a/src/main/java/com/bamanker/dailylove/config/DailyLoveConfigure.java
+++ b/src/main/java/com/bamanker/dailylove/config/DailyLoveConfigure.java
@@ -5,7 +5,6 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
-@RefreshScope
public class DailyLoveConfigure {
// public static String Access_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
// public static String Send_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}";
diff --git a/src/main/java/com/bamanker/dailylove/config/PushTask.java b/src/main/java/com/bamanker/dailylove/config/PushTask.java
index eb7877c..910acfc 100644
--- a/src/main/java/com/bamanker/dailylove/config/PushTask.java
+++ b/src/main/java/com/bamanker/dailylove/config/PushTask.java
@@ -8,9 +8,13 @@ import org.springframework.stereotype.Component;
@Component
public class PushTask {
- @Autowired
+ final
PushDailyController pushDailyController;
+ public PushTask(PushDailyController pushDailyController) {
+ this.pushDailyController = pushDailyController;
+ }
+
//每日 早上7.30,晚上22点 定时推送
@Scheduled(cron = "0 30 7 * * ?")
public void scheduledPushMorning(){
diff --git a/src/main/java/com/bamanker/dailylove/controller/PushDailyController.java b/src/main/java/com/bamanker/dailylove/controller/PushDailyController.java
index 4fcd4e7..e9a8e2a 100644
--- a/src/main/java/com/bamanker/dailylove/controller/PushDailyController.java
+++ b/src/main/java/com/bamanker/dailylove/controller/PushDailyController.java
@@ -9,6 +9,7 @@ import com.bamanker.dailylove.service.DataRemoteClient;
import com.bamanker.dailylove.service.WechatRequestClient;
import com.bamanker.dailylove.utils.DataUtils;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -20,12 +21,17 @@ import java.util.Date;
@RestController
public class PushDailyController {
- @Resource
+ final
DataRemoteClient dataRemoteClient;
- @Resource
+ final
WechatRequestClient wechatRequestClient;
+ public PushDailyController(DataRemoteClient dataRemoteClient, WechatRequestClient wechatRequestClient) {
+ this.dataRemoteClient = dataRemoteClient;
+ this.wechatRequestClient = wechatRequestClient;
+ }
+
/**
* 推送晚安
*
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 67e4d45..53fe810 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -4,6 +4,9 @@ server:
spring:
application:
name: dailyLove
+ cloud:
+ refresh:
+ enabled: false
DL:
tianxin-key: 72fbbb9e75e338ea6a240e83972f287c
@@ -49,4 +52,6 @@ tianxin:
logging:
level:
- com.bamanker.dailylove.service: debug #指定openfeign日志以什么级别监控哪个接口(可多个)
\ No newline at end of file
+ com.bamanker.dailylove.service: debug #指定openfeign日志以什么级别监控哪个接口(可多个)
+
+scanclass: false
\ No newline at end of file
diff --git a/target/dailylove b/target/dailylove
index 67f2df6..cbf084e 100755
Binary files a/target/dailylove and b/target/dailylove differ