问题背景:工作总是遇到意外的难题,NACOS的数据库竟然被不小心释放掉了且没有备份数据,而系统依靠缓存还能运行,于是用/v1/cs/configs查询接口把配置遍历下载重新备份解决了这个问题,当时发现/v1/cs/configs修改接口还没掌握,于是打算在有空的时候来动手实践下。
步骤如下:
1.github下载nacos指定版本V1.1.0代码 地址:https://github.com/alibaba/nacos/tree/1.1.0
2.在任意一个模块代码中pom.xml中查看有无
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在模块中添加WebServerFactoryCustomizer<TomcatServletWebServerFactory>实现类,其中有tomcat请求头大小等的设置
import java.io.File;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.valves.AccessLogValve;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
@Component
public class MyWebServerFactoryCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.setPort(8888);//tomcat端口
factory.setBaseDirectory(new File("d:/temp/tomcat"));//缓存路径
factory.addContextValves(getLogAccessLogValue());//设置日志
factory.addConnectorCustomizers(new MyTomcatConnectorCustomizer());//tomcat自定义访问连接
}
private AccessLogValve getLogAccessLogValue(){
AccessLogValve log=new AccessLogValve();
log.setDirectory("d:/temp/logs");//日志路径
log.setEnabled(true);//启用日志
log.setPattern("common");//输入日志格式
log.setPrefix("springboot-access-log");//日志名称
log.setSuffix(".txt");//日志后缀
return log;
}
}
class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer{
@Override
public void customize(Connector connector) {
Http11NioProtocol protocal=(Http11NioProtocol)connector.getProtocolHandler();
protocal.setMaxConnections(20000);//最大连接数
protocal.setMaxThreads(500);//最大线程数
protocal.setMaxHttpHeaderSize(20480000);//请求头大小
}
}
3.执行maven打包命令
mvn -Prelease-nacos -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dpmd.skip=true -Drat.skip=true clean install -U
最后用postMan访问结果如下(需要注意下tomcat在V7.0.73 之后有请求头的RFC3896字符校验,参数content需要encode)
相关博客: