Bläddra i källkod

修复数据源的BUG。

yangzhijie 6 år sedan
förälder
incheckning
f6ffc51032

+ 10 - 12
src/main/java/com/leanwo/gateway/MyGlobalFilter.java

@@ -2,6 +2,7 @@ package com.leanwo.gateway;
 
 import java.util.List;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
@@ -23,6 +24,11 @@ import reactor.core.publisher.Mono;
 @Component//注入Spring容器
 public class MyGlobalFilter implements GlobalFilter, Ordered{
 
+
+	@Autowired
+	private GatewayService gatewayService;
+	
+	
 	/**
      * 当前过滤器的执行顺序:
      * 数字越小,越早执行
@@ -47,19 +53,11 @@ public class MyGlobalFilter implements GlobalFilter, Ordered{
         int endIndex = url.length() - path.length();
         //获取域名
         String domainName = url.substring(0, endIndex);
-        GatewayService gatewayService = (GatewayService)SpringUtil.getSingleBean(GatewayService.class);
-    	List<AccountManagementDto> accountManagementDtos = gatewayService.getAccountManagementDtoCache();
-    	Long accountId = 2l;
-    	if(accountManagementDtos != null && accountManagementDtos.size() > 0) {
-    		for(AccountManagementDto accountManagementDto : accountManagementDtos) {
-    			if(accountManagementDto != null) {
-    				if(domainName.contains(accountManagementDto.getDomainName())) {
-    					accountId = accountManagementDto.getAccount();
-    				}
-    			}
-    		}
-    	}
+        
+        Long accountId = gatewayService.getAccountIdByDomainName(domainName);
+    	
     	request.mutate().header("account", accountId.toString()).build();
+    	
         //放行
         return chain.filter(exchange);//代表放行请求
 	}

+ 26 - 11
src/main/java/com/leanwo/gateway/imp/GatewayServiceImpl.java

@@ -1,6 +1,5 @@
 package com.leanwo.gateway.imp;
 
-
 import java.rmi.ServerException;
 import java.util.List;
 
@@ -12,29 +11,45 @@ import com.leanwo.gateway.dto.AccountManagementDto;
 import com.leanwo.gateway.server.ProdogServer;
 import com.leanwo.gateway.service.GatewayService;
 
-// TODO: Auto-generated Javadoc
 /**
- * The Class TokenServiceImpl.
+ * 网关服务
  */
 @Service
 public class GatewayServiceImpl implements GatewayService {
 
-	/** The Constant logger. */
 	private final static Logger logger = LoggerFactory.getLogger(GatewayServiceImpl.class.getName());
 
 	@Autowired
 	private ProdogServer prodogServer;
-	
+
+	/** 账套缓存 */
+	private List<AccountManagementDto> accountManagementDtos = null;
+
+	@Override
+	public Long getAccountIdByDomainName(String domainName) {
+		if (accountManagementDtos == null) {
+			reloadAccountManagement();
+		}
+
+		if (accountManagementDtos != null && accountManagementDtos.size() > 0) {
+			for (AccountManagementDto accountManagementDto : accountManagementDtos) {
+				if (accountManagementDto != null) {
+					if (domainName.contains(accountManagementDto.getDomainName())) {
+						return accountManagementDto.getAccount();
+					}
+				}
+			}
+		}
+
+		return -1L;
+	}
+
 	@Override
-	public List<AccountManagementDto> getAccountManagementDtoCache() {
-		List<AccountManagementDto> accountManagementDtos = null;
+	public void reloadAccountManagement() {
 		try {
 			accountManagementDtos = prodogServer.getAccountManagementDtoCache();
 		} catch (ServerException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			logger.error("网关服务器从应用服务器获取账套信息失败。", e);
 		}
-		return accountManagementDtos;
 	}
-    
 }

+ 10 - 3
src/main/java/com/leanwo/gateway/service/GatewayService.java

@@ -7,10 +7,17 @@ import com.leanwo.gateway.dto.AccountManagementDto;
 public interface GatewayService {
 	
 	/**
-	 * 查询账套
-	 * @return
+	 * 根据域名查询账套Id
+	 * @return 账套Id
 	 * @author GuoZhiBo 20200618
 	 */
-	List<AccountManagementDto> getAccountManagementDtoCache();
+	Long getAccountIdByDomainName(String domainName);
 
+	/**
+	 * 重新加载账套信息,并放到缓存中
+	 * @author YangZhiJie 20200702
+	 */
+	void reloadAccountManagement();
+	
+	
 }