volta 2 лет назад
Родитель
Сommit
d3f5b2a64c

+ 2 - 2
launch-admin/src/main/java/com/webflux/launchadmin/config/AuthenticationFilter.java

@@ -22,9 +22,9 @@ public class AuthenticationFilter implements WebFilter {
         ServerHttpRequest request = exchange.getRequest();
         ServerHttpResponse response = exchange.getResponse();
         response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, CorsConfiguration.ALL);
+        response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, CorsConfiguration.ALL);
+        response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, CorsConfiguration.ALL);
         if (HttpMethod.OPTIONS.matches(request.getMethod().name())) {
-            response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, CorsConfiguration.ALL);
-            response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, CorsConfiguration.ALL);
             response.setStatusCode(HttpStatus.OK);
             return response.setComplete();
         }

+ 0 - 1
launch-admin/src/main/java/com/webflux/launchadmin/config/LoginWebFiter.java

@@ -72,7 +72,6 @@ public class LoginWebFiter implements WebFilter {
                log.error("LoginWebFiter getUserInfo E:"+ e.getMessage());
            }
         }
-        System.out.println("...abcd");
         Mono<Void> filter = chain.filter(exchange); //放行
         //流一旦经过某个操作就会变成新流
         Mono<Void> voidMono = filter.doOnError(err -> {

+ 2 - 0
launch-admin/src/main/java/com/webflux/launchadmin/dispatcher/MailTask.java

@@ -2,6 +2,7 @@ package com.webflux.launchadmin.dispatcher;
 
 import com.webflux.launchadmin.context.UserContext;
 import lombok.extern.slf4j.Slf4j;
+import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -18,6 +19,7 @@ public class MailTask {
 
     //清空用户Map数据 每天凌晨执行
 	@Scheduled(cron="1 1 0 * * ?")
+	@SchedulerLock(name = "launch:MailTask:clearUserContextMap", lockAtLeastForString = "PT5S", lockAtMostForString = "PT15M")
 	public void clearUserContextMap(){
 		log.info("清空用户Map数据》》》》》》》》》》》》》》》》》》》》》》开始");
 		UserContext.cMap.clear();

+ 2 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewCommonOutController.java

@@ -26,6 +26,7 @@ import com.webflux.launchcommon.utils.StringUtils;
 import jakarta.annotation.Resource;
 import jakarta.json.Json;
 import lombok.extern.slf4j.Slf4j;
+import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
@@ -71,6 +72,7 @@ public class PlanNewCommonOutController {
     private static final ConcurrentHashMap<String, Integer> MAP = new ConcurrentHashMap<>();
 
     @Scheduled(cron = "1 1 4 * * ?")
+    @SchedulerLock(name = "launch:PlanNewCommonOutController:clearUserContextHashMap", lockAtLeastForString = "PT5S", lockAtMostForString = "PT15M")
     public void clearUserContextHashMap() {
         log.info("清空计划-H5用户Map数据》》》》》》》》》》》》》》》》》》》》》》开始");
         MAP.clear();

+ 2 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewOutController.java

@@ -22,6 +22,7 @@ import com.webflux.launchcommon.returnObj.RStatus;
 import com.weblux.launchredis.utils.RedisKey;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
@@ -73,6 +74,7 @@ public class PlanNewOutController {
 
     //清空用户Map数据
     @Scheduled(cron="1 1 4 * * ?")
+    @SchedulerLock(name = "launch:PlanNewOutController:clearUserContextMap", lockAtLeastForString = "PT5S", lockAtMostForString = "PT15M")
     public void clearUserContextMap(){
         log.info("清空计划-H5用户Map数据》》》》》》》》》》》》》》》》》》》》》》开始");
         map.clear();

+ 2 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/listening/ListeningPlanServiceImpl.java

@@ -27,6 +27,7 @@ import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
@@ -415,6 +416,7 @@ public class ListeningPlanServiceImpl implements ListeningPlanServiceInterface{
     private static final ConcurrentHashMap<String,Integer> map = new ConcurrentHashMap<>();
     //清空用户Map数据
     @Scheduled(cron="1 2 4 * * ?")
+    @SchedulerLock(name = "launch:ListeningPlanServiceImpl:clearUserContextMap", lockAtLeastForString = "PT5S", lockAtMostForString = "PT15M")
     public void clearUserContextMap(){
         log.info("清空听书裂变计划-H5用户Map数据》》》》》》》》》》》》》》》》》》》》》》开始");
         map.clear();

+ 2 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/task/SyncDomainToRedis.java

@@ -5,6 +5,7 @@ import com.webflux.launchadmin.mysql.entity.listening.ListeningPlanNew;
 import com.webflux.launchadmin.mysql.entity.planNew.DomainSelect;
 import com.weblux.launchredis.utils.RedisKey;
 import jakarta.annotation.Resource;
+import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -26,6 +27,7 @@ public class SyncDomainToRedis {
     private StringRedisTemplate stringRedisTemplate;
 
     @Scheduled(cron = "0 */1 * * * ?")
+    @SchedulerLock(name = "launch:SyncDomainToRedis:syncDomain", lockAtLeastForString = "PT5S", lockAtMostForString = "PT15M")
     public void syncDomain() {
         //.更新相信信息
         //.新增ID

+ 2 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/task/SyncPlanToRedis.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.webflux.launchadmin.mysql.entity.listening.ListeningPlanNew;
 import com.weblux.launchredis.utils.RedisKey;
 import jakarta.annotation.Resource;
+import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -20,6 +21,7 @@ public class SyncPlanToRedis {
     private StringRedisTemplate stringRedisTemplate;
 
     @Scheduled(cron="0 */1 * * * ?")
+    @SchedulerLock(name = "launch:SyncPlanToRedis:syncListenBook", lockAtLeastForString = "PT5S", lockAtMostForString = "PT15M")
     public void syncListenBook(){
         Flux<ListeningPlanNew> plans = template.select(ListeningPlanNew.class).all();
         plans.toIterable().forEach(one -> {

+ 3 - 0
launch-admin/src/main/resources/application-prod.yml

@@ -6,6 +6,9 @@ spring:
       password: MidGroud_666DaTa
       database: 10
       timeout: 10000
+      jedis:
+        pool:
+          max-active: 1000
   r2dbc:
     url: r2dbcs:mysql://rm-uf6xylut5n33hb3o5.mysql.rds.aliyuncs.com:3306/wx_share_8?serverZoneId=GMT%2b8&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&ssl=false&sslMode=DISABLED
     username: wx_share_liuwei

+ 10 - 0
launch-common/pom.xml

@@ -33,6 +33,16 @@
             <artifactId>hutool-all</artifactId>
             <version>5.3.7</version>
         </dependency>
+        <dependency>
+            <groupId>net.javacrumbs.shedlock</groupId>
+            <artifactId>shedlock-spring</artifactId>
+            <version>2.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>net.javacrumbs.shedlock</groupId>
+            <artifactId>shedlock-provider-redis-spring</artifactId>
+            <version>2.3.0</version>
+        </dependency>
 
     </dependencies>
 

+ 30 - 0
launch-common/src/main/java/com/webflux/launchcommon/config/SchedulerLock.java

@@ -0,0 +1,30 @@
+package com.webflux.launchcommon.config;
+
+import net.javacrumbs.shedlock.core.LockProvider;
+import net.javacrumbs.shedlock.provider.redis.spring.RedisLockProvider;
+import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+
+@Configuration
+public class SchedulerLock {
+//defaultLockAtMostFor 指定在执行节点结束时应保留锁的默认时间使用ISO8601 Duration格式
+//作用就是在被加锁的节点挂了时,无法释放锁,造成其他节点无法进行下一任务
+//这里默认55s
+//关于ISO8601 Duration格式用的不到,具体可上网查询下相关资料,应该就是一套规范,规定一些时间表达方式
+    @EnableSchedulerLock(defaultLockAtMostFor = "PT55S")
+    public class ShedLockRedisConfig {
+
+        @Value("${spring.profiles.active}")
+        private String env;
+
+        @Bean
+        public LockProvider lockProvider(RedisConnectionFactory connectionFactory) {
+            //环境变量 -需要区分不同环境避免冲突,如dev环境和test环境,两者都部署时,只有一个实例进行,此时会造成相关环境未启动情况
+            System.out.println(env);
+            return new RedisLockProvider(connectionFactory, env);
+        }
+    }
+}