优化NodeHttpServer.loadRestServlet
This commit is contained in:
@@ -9,6 +9,7 @@ import java.lang.annotation.Annotation;
|
|||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.annotation.*;
|
import javax.annotation.*;
|
||||||
import static org.redkale.boot.Application.RESNAME_SNCP_ADDR;
|
import static org.redkale.boot.Application.RESNAME_SNCP_ADDR;
|
||||||
@@ -244,7 +245,9 @@ public class NodeHttpServer extends NodeServer {
|
|||||||
|
|
||||||
final ClassFilter restFilter = ClassFilter.create(null, restConf.getValue("includes", ""), restConf.getValue("excludes", ""), includeValues, excludeValues);
|
final ClassFilter restFilter = ClassFilter.create(null, restConf.getValue("includes", ""), restConf.getValue("excludes", ""), includeValues, excludeValues);
|
||||||
final boolean finest = logger.isLoggable(Level.FINEST);
|
final boolean finest = logger.isLoggable(Level.FINEST);
|
||||||
super.interceptorServices.forEach((service) -> {
|
final CountDownLatch scdl = new CountDownLatch(super.interceptorServices.size());
|
||||||
|
super.interceptorServices.stream().parallel().forEach((service) -> {
|
||||||
|
try {
|
||||||
final Class stype = Sncp.getServiceType(service);
|
final Class stype = Sncp.getServiceType(service);
|
||||||
final String name = Sncp.getResourceName(service);
|
final String name = Sncp.getResourceName(service);
|
||||||
RestService rs = (RestService) stype.getAnnotation(RestService.class);
|
RestService rs = (RestService) stype.getAnnotation(RestService.class);
|
||||||
@@ -253,11 +256,13 @@ public class NodeHttpServer extends NodeServer {
|
|||||||
final String stypename = stype.getName();
|
final String stypename = stype.getName();
|
||||||
if (!autoload && !includeValues.contains(stypename)) return;
|
if (!autoload && !includeValues.contains(stypename)) return;
|
||||||
if (!restFilter.accept(stypename)) return;
|
if (!restFilter.accept(stypename)) return;
|
||||||
|
synchronized (restedObjects) {
|
||||||
if (restedObjects.contains(service)) {
|
if (restedObjects.contains(service)) {
|
||||||
logger.log(Level.WARNING, stype.getName() + " repeat create rest servlet, so ignore");
|
logger.log(Level.WARNING, stype.getName() + " repeat create rest servlet, so ignore");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
restedObjects.add(service); //避免重复创建Rest对象
|
restedObjects.add(service); //避免重复创建Rest对象
|
||||||
|
}
|
||||||
HttpServlet servlet = httpServer.addRestServlet(serverClassLoader, service, userType, baseServletType, prefix);
|
HttpServlet servlet = httpServer.addRestServlet(serverClassLoader, service, userType, baseServletType, prefix);
|
||||||
if (servlet == null) return; //没有HttpMapping方法的HttpServlet调用Rest.createRestServlet就会返回null
|
if (servlet == null) return; //没有HttpMapping方法的HttpServlet调用Rest.createRestServlet就会返回null
|
||||||
String prefix2 = prefix;
|
String prefix2 = prefix;
|
||||||
@@ -270,9 +275,15 @@ public class NodeHttpServer extends NodeServer {
|
|||||||
for (int i = 0; i < mappings.length; i++) {
|
for (int i = 0; i < mappings.length; i++) {
|
||||||
mappings[i] = prefix2 + mappings[i];
|
mappings[i] = prefix2 + mappings[i];
|
||||||
}
|
}
|
||||||
|
synchronized (ss) {
|
||||||
ss.add(new AbstractMap.SimpleEntry<>(servlet.getClass().getName() + "(rest.name='" + name + "')", mappings));
|
ss.add(new AbstractMap.SimpleEntry<>(servlet.getClass().getName() + "(rest.name='" + name + "')", mappings));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
scdl.countDown();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
scdl.await();
|
||||||
}
|
}
|
||||||
if (webSocketFilter != null) { //加载RestWebSocket
|
if (webSocketFilter != null) { //加载RestWebSocket
|
||||||
final Set<String> includeValues = new HashSet<>();
|
final Set<String> includeValues = new HashSet<>();
|
||||||
|
|||||||
Reference in New Issue
Block a user