Revert the bugfix changes and split them into issue #1134.

pull/1133/head
yanrongzhen 3 years ago
parent 5a9a16d1e4
commit aee8f5326c

@ -18,29 +18,22 @@
package cn.hippo4j.adapter.web; package cn.hippo4j.adapter.web;
import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.config.ApplicationContextHolder;
import io.undertow.Undertow;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.context.WebServerApplicationContext; import org.springframework.boot.web.context.WebServerApplicationContext;
import org.springframework.boot.web.server.WebServer; import org.springframework.boot.web.server.WebServer;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
/** /**
* Default WebThreadPoolService abstract class, * Default WebThreadPoolService abstract class,
* reuses common capabilities for web container operations. * reuses common capabilities for web container operations.
*/ */
@Slf4j
public abstract class DefaultAbstractWebThreadPoolService extends AbstractWebThreadPoolService { public abstract class DefaultAbstractWebThreadPoolService extends AbstractWebThreadPoolService {
public DefaultAbstractWebThreadPoolService(IWebThreadPoolHandlerSupport support) { public DefaultAbstractWebThreadPoolService(IWebThreadPoolHandlerSupport support) {
super(support); super(support);
} }
private static final String STARTED_FIELD_NAME = "started";
/** /**
* Get the internal abstract method of the web container thread pool, * Get the internal abstract method of the web container thread pool,
* to be implemented by subclasses. * to be implemented by subclasses.
@ -60,19 +53,6 @@ public abstract class DefaultAbstractWebThreadPoolService extends AbstractWebThr
return getWebServer().getPort(); return getWebServer().getPort();
} }
@Override
public boolean isContainerStarted() {
try {
WebServer container = getWebServer();
Field field = ReflectionUtils.findField(WebServer.class, STARTED_FIELD_NAME);
ReflectionUtils.makeAccessible(field);
return (boolean) ReflectionUtils.getField(field, container);
} catch (Throwable th) {
log.error("Failed to get isStarted flag.", th);
return false;
}
}
/** /**
* Get the thread pool object of the current web container based on the WebServer. * Get the thread pool object of the current web container based on the WebServer.
* @param webServer current Web-Server. * @param webServer current Web-Server.

@ -30,11 +30,6 @@ import java.util.concurrent.Executor;
*/ */
public interface WebThreadPoolService { public interface WebThreadPoolService {
/**
* Determine if the web container has started.
*/
boolean isContainerStarted();
/** /**
* Get web thread pool. * Get web thread pool.
* *

@ -20,25 +20,18 @@ package cn.hippo4j.config.springboot1x.starter.web;
import cn.hippo4j.adapter.web.AbstractWebThreadPoolService; import cn.hippo4j.adapter.web.AbstractWebThreadPoolService;
import cn.hippo4j.adapter.web.IWebThreadPoolHandlerSupport; import cn.hippo4j.adapter.web.IWebThreadPoolHandlerSupport;
import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.config.ApplicationContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.embedded.EmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedWebApplicationContext; import org.springframework.boot.context.embedded.EmbeddedWebApplicationContext;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
/** /**
* Abstract class for adapting WebThreadPoolService to Spring 1.x version. * Abstract class for adapting WebThreadPoolService to Spring 1.x version.
*/ */
@Slf4j
public abstract class AbstractWebThreadPoolService1x extends AbstractWebThreadPoolService { public abstract class AbstractWebThreadPoolService1x extends AbstractWebThreadPoolService {
public AbstractWebThreadPoolService1x(IWebThreadPoolHandlerSupport support) { public AbstractWebThreadPoolService1x(IWebThreadPoolHandlerSupport support) {
super(support); super(support);
} }
private static final String STARTED_FIELD_NAME = "started";
/** /**
* Get the embedded Servlet container from the Spring application context. * Get the embedded Servlet container from the Spring application context.
*/ */
@ -53,17 +46,4 @@ public abstract class AbstractWebThreadPoolService1x extends AbstractWebThreadPo
public Integer getPort() { public Integer getPort() {
return getContainer().getPort(); return getContainer().getPort();
} }
@Override
public boolean isContainerStarted() {
try {
EmbeddedServletContainer container = getContainer();
Field field = ReflectionUtils.findField(EmbeddedServletContainer.class, STARTED_FIELD_NAME);
ReflectionUtils.makeAccessible(field);
return (boolean) ReflectionUtils.getField(field, container);
} catch (Throwable th) {
log.error("Failed to get isStarted flag.", th);
return false;
}
}
} }

@ -25,8 +25,6 @@ import cn.hippo4j.common.model.ThreadPoolParameter;
import cn.hippo4j.common.model.ThreadPoolParameterInfo; import cn.hippo4j.common.model.ThreadPoolParameterInfo;
import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties;
import cn.hippo4j.config.springboot.starter.config.WebExecutorProperties; import cn.hippo4j.config.springboot.starter.config.WebExecutorProperties;
import cn.hippo4j.message.enums.NotifyTypeEnum;
import cn.hippo4j.message.request.ChangeParameterNotifyRequest;
import cn.hippo4j.message.request.WebChangeParameterNotifyRequest; import cn.hippo4j.message.request.WebChangeParameterNotifyRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
@ -79,8 +77,7 @@ public class WebExecutorRefreshListener extends AbstractRefreshListener<WebExecu
} }
if (!Objects.equals(beforeParameter.getCoreSize(), nowParameter.getCoreSize()) if (!Objects.equals(beforeParameter.getCoreSize(), nowParameter.getCoreSize())
|| !Objects.equals(beforeParameter.getMaxSize(), nowParameter.getMaxSize()) || !Objects.equals(beforeParameter.getMaxSize(), nowParameter.getMaxSize())
|| !Objects.equals(beforeParameter.getKeepAliveTime(), nowParameter.getKeepAliveTime()) || !Objects.equals(beforeParameter.getKeepAliveTime(), nowParameter.getKeepAliveTime())) {
|| !webThreadPoolService.isContainerStarted()) {
webThreadPoolService.updateWebThreadPool(nowParameter); webThreadPoolService.updateWebThreadPool(nowParameter);
configChange.sendPoolConfigChange(buildChangeRequest(beforeParameter, nowParameter, webThreadPoolService)); configChange.sendPoolConfigChange(buildChangeRequest(beforeParameter, nowParameter, webThreadPoolService));
} }

Loading…
Cancel
Save