Pārlūkot izejas kodu

优化数据源的配置、修改动态数据源的代码。

yangzhijie 6 gadi atpakaļ
vecāks
revīzija
866d97b006

+ 4 - 3
src/main/java/com/leanwo/gateway/GlobalAccountFilter.java

@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
 
 import com.leanwo.gateway.dto.AccountManagementDto;
-import com.leanwo.gateway.service.GatewayService;
+import com.leanwo.gateway.service.AccountManagementService;
 import com.leanwo.gateway.util.SpringUtil;
 
 import reactor.core.publisher.Mono;
@@ -26,7 +26,7 @@ public class GlobalAccountFilter implements GlobalFilter, Ordered{
 
 
 	@Autowired
-	private GatewayService gatewayService;
+	private AccountManagementService accountManagementService;
 	
 	
 	/**
@@ -53,8 +53,9 @@ public class GlobalAccountFilter implements GlobalFilter, Ordered{
         int endIndex = url.length() - path.length();
         //获取域名
         String domainName = url.substring(0, endIndex);
+        domainName = domainName.replace("http://", "").replace("https://", "");
         
-        Long accountId = gatewayService.getAccountIdByDomainName(domainName);
+        Long accountId = accountManagementService.getAccountIdByDomainName(domainName);
     	
     	request.mutate().header("account", accountId.toString()).build();
     	

+ 12 - 0
src/main/java/com/leanwo/gateway/exception/ServerException.java

@@ -0,0 +1,12 @@
+package com.leanwo.gateway.exception;
+
+
+public class ServerException extends RuntimeException {
+	
+	public ServerException(){
+	}
+	
+	public ServerException(String message){
+		super(message);
+	}
+}

+ 32 - 0
src/main/java/com/leanwo/gateway/rest/AccountManagementResource.java

@@ -0,0 +1,32 @@
+package com.leanwo.gateway.rest;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.leanwo.gateway.service.AccountManagementService;
+
+
+@RestController
+@RequestMapping("/api/AccountManagmentResource")
+public class AccountManagementResource {
+
+	@Autowired
+	private AccountManagementService accountManagementService;
+	
+	/**
+	 * 重新加载账套数据并且重新加载数据源
+	 * @author GuoZhiBo 20200616
+	 * @return
+	 */
+	@RequestMapping(value = "/loadAccountManagement", method = RequestMethod.POST, produces = "application/json")
+	@ResponseBody
+	public boolean loadAccountManagement() {
+		accountManagementService.loadAccountManagement(true);
+		return true;
+	}
+}

+ 23 - 23
src/main/java/com/leanwo/gateway/service/GatewayService.java → src/main/java/com/leanwo/gateway/service/AccountManagementService.java

@@ -1,23 +1,23 @@
-package com.leanwo.gateway.service;
-
-import java.util.List;
-
-import com.leanwo.gateway.dto.AccountManagementDto;
-
-public interface GatewayService {
-	
-	/**
-	 * 根据域名查询账套Id
-	 * @return 账套Id
-	 * @author GuoZhiBo 20200618
-	 */
-	Long getAccountIdByDomainName(String domainName);
-
-	/**
-	 * 重新加载账套信息,并放到缓存中
-	 * @author YangZhiJie 20200702
-	 */
-	void reloadAccountManagement();
-	
-	
-}
+package com.leanwo.gateway.service;
+
+import java.util.List;
+
+import com.leanwo.gateway.dto.AccountManagementDto;
+
+public interface AccountManagementService {
+
+	/**
+	 * 根据域名查询账套Id
+	 * @return 账套Id
+	 * @author GuoZhiBo 20200618
+	 */
+	Long getAccountIdByDomainName(String domainName);
+	
+	/**
+	 * 重新加载账套
+	 * @param force 是否重新加载
+	 * @return List<AccountManagementDto>
+	 */
+	public List<AccountManagementDto> loadAccountManagement(boolean force);
+	
+}

+ 50 - 55
src/main/java/com/leanwo/gateway/imp/GatewayServiceImpl.java → src/main/java/com/leanwo/gateway/service/AccountManagementServiceImpl.java

@@ -1,55 +1,50 @@
-package com.leanwo.gateway.imp;
-
-import java.rmi.ServerException;
-import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.leanwo.gateway.dto.AccountManagementDto;
-import com.leanwo.gateway.server.ProdogServer;
-import com.leanwo.gateway.service.GatewayService;
-
-/**
- * 网关服务
- */
-@Service
-public class GatewayServiceImpl implements GatewayService {
-
-	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.getAccountId();
-					}
-				}
-			}
-		}
-
-		return 0L;
-	}
-
-	@Override
-	public void reloadAccountManagement() {
-		try {
-			accountManagementDtos = prodogServer.getAccountManagementDtoCache();
-		} catch (ServerException e) {
-			logger.error("网关服务器从应用服务器获取账套信息失败。", e);
-		}
-	}
-}
+package com.leanwo.gateway.service;
+
+import java.util.List;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.leanwo.gateway.dto.AccountManagementDto;
+
+@Service
+public class AccountManagementServiceImpl implements AccountManagementService {
+
+	private static Logger logger = LoggerFactory.getLogger(AccountManagementServiceImpl.class);
+
+	@Autowired
+	private ProdogServer prodogServer;
+
+	
+	private List<AccountManagementDto> accountManagementDtos = null;
+
+	@Override
+	public List<AccountManagementDto> loadAccountManagement(boolean force) {
+		if (accountManagementDtos == null || force) {
+			accountManagementDtos = prodogServer.getAccountManagementDtoCache();
+		}
+		return accountManagementDtos;
+	}
+
+	@Override
+	public Long getAccountIdByDomainName(String domainName) {
+		if (accountManagementDtos == null) {
+			loadAccountManagement(true);
+		}
+
+		if (accountManagementDtos != null && accountManagementDtos.size() > 0) {
+			for (AccountManagementDto accountManagementDto : accountManagementDtos) {
+				if (accountManagementDto != null) {
+					if (domainName.contains(accountManagementDto.getDomainName())) {
+						return accountManagementDto.getAccountId();
+					}
+				}
+			}
+		}
+
+		return 0L;
+	}
+}

+ 2 - 3
src/main/java/com/leanwo/gateway/server/ProdogServer.java → src/main/java/com/leanwo/gateway/service/ProdogServer.java

@@ -1,4 +1,4 @@
-package com.leanwo.gateway.server;
+package com.leanwo.gateway.service;
 
 
 import java.rmi.ServerException;
@@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import com.leanwo.gateway.dto.AccountManagementDto;
-import com.leanwo.gateway.imp.ProdogServerImpl;
 
 
 /**
@@ -29,5 +28,5 @@ public interface ProdogServer {
 	 * @author GuoZhiBo 20200616
 	 */
 	@RequestMapping(value = "/api/AccountManagementResource/getAccountManagementDtoCache", method = RequestMethod.GET, produces = "application/json")
-	List<AccountManagementDto> getAccountManagementDtoCache()  throws ServerException;
+	List<AccountManagementDto> getAccountManagementDtoCache();
 }

+ 3 - 4
src/main/java/com/leanwo/gateway/imp/ProdogServerImpl.java → src/main/java/com/leanwo/gateway/service/ProdogServerImpl.java

@@ -1,12 +1,11 @@
-package com.leanwo.gateway.imp;
+package com.leanwo.gateway.service;
 
-import java.rmi.ServerException;
 import java.util.List;
 
 import org.springframework.stereotype.Component;
 
 import com.leanwo.gateway.dto.AccountManagementDto;
-import com.leanwo.gateway.server.ProdogServer;
+import com.leanwo.gateway.exception.ServerException;
 
 
 @Component
@@ -24,7 +23,7 @@ public class ProdogServerImpl implements ProdogServer {
 	}
 	
 	@Override
-	public List<AccountManagementDto> getAccountManagementDtoCache() throws ServerException {
+	public List<AccountManagementDto> getAccountManagementDtoCache() {
 		throw getDefaultException();
 	}