Skip to content

Commit cef09a4

Browse files
committed
优化GrayClientHolder代码
1 parent db560c4 commit cef09a4

File tree

6 files changed

+67
-29
lines changed

6 files changed

+67
-29
lines changed

spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/GrayLoadBalanceRule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package cn.springcloud.gray.client.netflix.ribbon;
22

3+
import cn.springcloud.gray.GrayClientHolder;
34
import cn.springcloud.gray.GrayManager;
4-
import cn.springcloud.gray.client.netflix.GrayClientHolder;
55
import cn.springcloud.gray.model.GrayService;
66
import cn.springcloud.gray.request.GrayRequest;
77
import cn.springcloud.gray.request.RequestLocalStorage;
Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,28 @@
11
package cn.springcloud.gray.client.netflix.ribbon.configuration;
22

33
import cn.springcloud.gray.GrayManager;
4-
import cn.springcloud.gray.client.netflix.GrayClientHolder;
54
import cn.springcloud.gray.client.netflix.ribbon.GrayLoadBalanceRule;
6-
import cn.springcloud.gray.servernode.ServerExplainer;
75
import cn.springcloud.gray.request.RequestLocalStorage;
6+
import cn.springcloud.gray.servernode.ServerExplainer;
87
import com.netflix.client.config.IClientConfig;
98
import com.netflix.loadbalancer.IRule;
109
import com.netflix.loadbalancer.Server;
11-
import org.springframework.beans.factory.InitializingBean;
1210
import org.springframework.beans.factory.annotation.Autowired;
1311
import org.springframework.context.annotation.Bean;
1412
import org.springframework.context.annotation.Configuration;
1513

1614
@Configuration
17-
public class GrayRibbonClientsConfiguration implements InitializingBean {
18-
19-
@Autowired
20-
private GrayManager grayManager;
21-
@Autowired
22-
private RequestLocalStorage requestLocalStorage;
23-
@Autowired
24-
private ServerExplainer<Server> serverExplainer;
15+
public class GrayRibbonClientsConfiguration {
2516

2617
@Bean
27-
public IRule ribbonRule(@Autowired(required = false) IClientConfig config) {
18+
public IRule ribbonRule(
19+
@Autowired(required = false) IClientConfig config,
20+
GrayManager grayManager,
21+
RequestLocalStorage requestLocalStorage,
22+
ServerExplainer<Server> serverExplainer) {
2823
GrayLoadBalanceRule rule = new GrayLoadBalanceRule(grayManager, requestLocalStorage, serverExplainer);
2924
rule.initWithNiwsConfig(config);
3025
return rule;
3126
}
3227

33-
34-
@Override
35-
public void afterPropertiesSet() throws Exception {
36-
GrayClientHolder.setGrayManager(grayManager);
37-
GrayClientHolder.setRequestLocalStorage(requestLocalStorage);
38-
GrayClientHolder.setServerExplainer(serverExplainer);
39-
}
4028
}
Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
package cn.springcloud.gray.client.netflix;
1+
package cn.springcloud.gray;
22

3-
import cn.springcloud.gray.GrayManager;
4-
import cn.springcloud.gray.servernode.ServerExplainer;
53
import cn.springcloud.gray.request.RequestLocalStorage;
6-
import com.netflix.loadbalancer.Server;
4+
import cn.springcloud.gray.servernode.ServerExplainer;
75

86
public class GrayClientHolder {
97

108
private static GrayManager grayManager;
119
private static RequestLocalStorage requestLocalStorage;
12-
private static ServerExplainer<Server> serverExplainer;
10+
private static ServerExplainer<?> serverExplainer;
1311

1412
public static GrayManager getGrayManager() {
1513
return grayManager;
@@ -27,11 +25,11 @@ public static void setRequestLocalStorage(RequestLocalStorage requestLocalStorag
2725
GrayClientHolder.requestLocalStorage = requestLocalStorage;
2826
}
2927

30-
public static ServerExplainer<Server> getServerExplainer() {
31-
return serverExplainer;
28+
public static <SERVER> ServerExplainer<SERVER> getServerExplainer() {
29+
return (ServerExplainer<SERVER>) serverExplainer;
3230
}
3331

34-
public static void setServerExplainer(ServerExplainer<Server> serverExplainer) {
32+
public static void setServerExplainer(ServerExplainer<?> serverExplainer) {
3533
GrayClientHolder.serverExplainer = serverExplainer;
3634
}
3735
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package cn.springcloud.gray;
2+
3+
import cn.springcloud.gray.request.RequestLocalStorage;
4+
import cn.springcloud.gray.servernode.ServerExplainer;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.beans.BeansException;
7+
import org.springframework.beans.factory.InitializingBean;
8+
import org.springframework.context.ApplicationContext;
9+
import org.springframework.context.ApplicationContextAware;
10+
11+
@Slf4j
12+
public class GrayClientInitializer implements ApplicationContextAware, InitializingBean {
13+
private ApplicationContext cxt;
14+
15+
@Override
16+
public void afterPropertiesSet() throws Exception {
17+
GrayClientHolder.setGrayManager(getBean("grayManager", GrayManager.class));
18+
GrayClientHolder.setRequestLocalStorage(getBean("requestLocalStorage", RequestLocalStorage.class));
19+
GrayClientHolder.setServerExplainer(getBean("serverExplainer", ServerExplainer.class));
20+
}
21+
22+
23+
@Override
24+
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
25+
this.cxt = applicationContext;
26+
}
27+
28+
29+
private <T> T getBean(String beanName, Class<T> cls) {
30+
T t = null;
31+
try {
32+
t = cxt.getBean(beanName, cls);
33+
} catch (BeansException e) {
34+
log.warn("没有从spring容器中找到name为'{}', class为'{}'的Bean", beanName, cls);
35+
}
36+
if (t == null) {
37+
t = cxt.getBean(cls);
38+
}
39+
return t;
40+
}
41+
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientAutoConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,10 @@ public RequestLocalStorage requestLocalStorage() {
6464
return new ThreadLocalRequestStorage();
6565
}
6666

67+
68+
@Bean
69+
public GrayClientInitializer grayClientInitializer() {
70+
return new GrayClientInitializer();
71+
}
72+
6773
}

spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/GrayServerInitializingDestroyBean.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,12 @@ private void initGrayInstanceRecordEvictionTask() {
7373
}
7474

7575
private <T> T getBean(String beanName, Class<T> cls) {
76-
T t = appCxt.getBean(beanName, cls);
76+
T t = null;
77+
try {
78+
t = appCxt.getBean(beanName, cls);
79+
} catch (BeansException e) {
80+
log.warn("没有从spring容器中找到name为'{}', class为'{}'的Bean", beanName, cls);
81+
}
7782
if (t == null) {
7883
t = appCxt.getBean(cls);
7984
}

0 commit comments

Comments
 (0)