wrapper

自从用完Gradle后,有点嫌弃Maven了!速度贼快

一笑奈何 提交于 2020-08-17 17:51:39
相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: 1. Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长; 2. XML文件不太灵活,假如你需要在构建过程中添加一些自定义逻辑,搞起来非常麻烦; 3. Maven非常的稳定,但是相对的就是对新版java支持不足,哪怕就是为了编译java11,也需要更新内置的Maven插件。 如果你对Maven的这些缺点也有所感触,准备尝试其他的构建工具,那么你可以试试gradle,这是一个全新的java构建工具,解决了Maven的一些痛点。 一、安装Gradle 最传统的安装方法就是去gradle官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。但是,gradle是一个非常新潮的项目,每隔几个月就会发布一个新版本,这种方式可能跟不上gradle的更新速度。 所以我更加推荐使用包管理器来安装gradle。如果你使用linux系统,那么不必多说。如果你使用Windows系统,我推荐使用scoop包管理器来安装gradle。它安装方便,而且使用SHIM目录来管理环境变量,在各种工具中配置gradle也很方便。 当然,如果你完全不喜欢安装这么多乱七八糟的东西

tomcat网络模型

孤者浪人 提交于 2020-08-17 16:49:42
一、概述 tomcat的网络模型有三种,分别是 JIO(即BIO), NIO,NIO2(即AIO)。tomcat7之前包含JIO和NIO,tomcat8之后的版本包含NIO和NIO2。tomcat7默认是JIO,tomcat8之后默认的IO是NIO。这三种IO性能上从高到低 NIO2 > NIO > JIO。下面分别对这三种IO做具体源码级的分析。 JIO API: java.net .ServerSocket、 java.net .Socket NIO API: java.nio.channels.ServerSocketChannel 、 java.nio.channels.SocketChannel 、 java.nio.channels.Selector NIO2 API: java.nio.channels.AsynchronousServerSocketChannel、 java.nio.channels.AsynchronousSocketChannel 二、JIO 流程步骤: JIoEndpoint.Acceptor 负责无线循环获取socket连接 判断是否超过最大并发 接收到socket连接请求,为socket设置自定义属性 将socket包装成 SocketWrapper 创建一个 SocketWrapper 的处理器 SocketProcessor

第十一周 加密和安全

点点圈 提交于 2020-08-17 10:49:49
1、编写脚本/root/bin/checkip.sh,每5分钟检查一次,如果发现通过ssh登录失败 次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止访问 加入计划任务 crontab -e /5 * root sh /root/bin/checkip.sh &>/dev/null 2、配置magedu用户的sudo权限,允许magedu用户拥有root权限 visodu 然后增加以下内容 magedu ALL=(All) ALL 来源: oschina 链接: https://my.oschina.net/u/4311641/blog/4490048

tomcat的架构

前提是你 提交于 2020-08-17 02:59:07
一、容器架构 tomcat容器架构 server : tomcat服务,它下面可以有多个service (不是容器) service :一个http+port服务,它下面可以有多个engine(不是容器) engine : 表示整个Catalina servlet引擎的容器,顶级容器 host : 虚拟主机,代表一个站点。可以虚拟多个主机 context : 表示一个Web应用程序 wrapper : 表示一个Servlet 二、连接器架构 Connector 连接器 endpoint : socket管理工具,不同的io有不同的endpoint实现,如:JIoEndpoint、NioEndpoint、Nio2Endpoint Acceptor : socket连接接收器(无限循环) Handler :负责处理socket的事件,并且构建Processor,将请求传递给processor Processor : 负责http协议的解析,coyote Request、Response的构建 CoyoteAdapter :将 coyote的Request、Response 转换成 servlet的Request和Response; 将请求传递给Servlet容器 三、容器内请求架构 容器内请求流程: 请求从CoyoteAdapter进入容器,容器内的执行流程是:pipeline +

Spring Boot 中的 Tomcat 是如何启动的?

江枫思渺然 提交于 2020-08-16 16:03:42
作者:木木匠 https://my.oschina.net/luozhou/blog/3088908 我们知道 Spring Boot 给我们带来了一个全新的开发体验,让我们可以直接把 Web 程序打包成 jar 包直接启动,这得益于 Spring Boot 内置了容器,可以直接启动。 本文将以 Tomcat 为例,来看看 Spring Boot 是如何启动 Tomcat 的,同时也将展开学习下 Tomcat 的源码,了解 Tomcat 的设计。 从 Main 方法说起 用过 Spring Boot 的人都知道,首先要写一个 main 方法来启动: @SpringBootApplication public class TomcatdebugApplication { public static void main(String\[\] args) { SpringApplication.run(TomcatdebugApplication.class, args); } } 我们直接点击run方法的源码,跟踪下来,发现最终的 run 方法是调用 ConfigurableApplicationContext 方法,源码如下: public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch

python的函数修饰符(装饰器)

若如初见. 提交于 2020-08-16 05:59:14
首先明确函数也是对象(python万物皆对象),而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。 例如 >>> def now(): ... print (" 2013-12-25") ... >>> f = now #函数名可以赋给一个变量,根据变量+()就可以调用这个函数 >>> f() 2013-12-25 函数对象有一个 __name__属性,可以获取函数的名字: >>> now. __name__ ' now ' >>> f. __name__ ' now ' 现在,假设我们要扩展now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。本质上,decorator就是一个返回函数的高阶函数 创建函数修饰符的规则: (1)修饰符是一个函数 (2)修饰符取被修饰函数为参数 (3)修饰符返回一个新函数 (4)修饰符维护被维护函数的签名 def log(func): def wrapper(*args, ** kw): print ( " call %s()" % func. __name__) return func(*args, **kw) return wrapper @log #相当于执行了语句 now = log(now)

Tomcat源码分析(3)-容器Container整体架构

徘徊边缘 提交于 2020-08-15 13:16:16
之前的博文介绍了tomcat有两大核心组件,connector和container,connector负责接受外部请求,container负责处理请求,本文从源码的角度介绍container的整体架构。 一、容器分类 tomcat容器为四个: Engine:代表容器引擎,管理多个虚拟站点,一个Service只有一个Engine Host:代表虚拟主机 Context:代表一个web站点 Wrapper:代表一个servlet 二、容器的结构 以上四大容器是父子关系,但是统一实现了Container接口: public interface Container extends Lifecycle { public Pipeline getPipeline(); public Container getParent(); public void setParent(Container container); public void backgroundProcess(); public void addChild(Container child); public Container findChild(String name); public Container[] findChildren(); public void removeChild(Container child); }

Linux下Keepalived安装与配置

痴心易碎 提交于 2020-08-15 11:27:02
简介 负载平衡是一种在真实服务器集群中分配IP流量的方法,可提供一个或多个高度可用的虚拟服务。在设计负载均衡拓扑时,重要的是要考虑负载均衡器本身的可用性以及它背后的真实服务器。用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。 Keepalived为负载平衡和高可用性提供了框架。负载平衡框架依赖于众所周知且广泛使用的Linux虚拟服务器(IPVS)内核模块,该模块提供第4层负载平衡。Keepalived实现了一组健康检查器,以根据其健康动态地自适应地维护和管理负载平衡的服务器池。虚拟冗余路由协议(VRRP)实现高可用性。VRRP是路由器故障转移的基础砖块。此外,keepalived实现了一组挂钩到VRRP有限状态机,提供低级别和高速协议交互。每个Keepalived框架可以独立使用或一起使用,以提供弹性基础设施。 在这种情况下,负载平衡器也可以被称为 导向器 或 LVS路由器 。 简而言之,Keepalived提供了两个主要功能: 健康检查LVS系统 实施VRRPv2堆栈以处理负载均衡器故障转移 Keepalived使用四个Linux内核组件: LVS框架:使用getsockopt和setsockopt调用来获取和设置套接字上的选项。 Netfilter框架:支持NAT和伪装的IPVS代码。 Netlink接口

编译lineage,gcc的版本问题

自古美人都是妖i 提交于 2020-08-14 23:00:14
从9.3.0版本升级到10.1.0版本后,编译出错,具体信息如下: /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here collect2: 错误:ld 返回 1 make[3]: *** [scripts/Makefile.host:127:scripts/dtc/dtc] 错误 1 make[2]: *** [kernel/xiaomi/msm8992/scripts/Makefile.build:455:scripts/dtc] 错误 2 make[2]: *** 正在等待未完成的任务.... HOSTLD scripts/mod/modpost make[1]: *** [kernel/xiaomi/msm8992/Makefile:525:scripts] 错误 2 make: *** [Makefile:130: sub-make] Error 2 make: Leaving directory 'kernel/xiaomi/msm8992' ninja: build stopped: subcommand failed. make:

CSS命名规范

老子叫甜甜 提交于 2020-08-14 20:17:34
简介 CSS命名由小写的英文单词或组合命名,单词与单词之间通过“-”连接,常用的CSS命名规范有文本命名规范,页面结构命名规范,导航命名以及功能命名等。 CSS 命名一般采用小写英文单词或组合命名,单词与单词之间以"-"分割,而且英文单词不缩写,除非是那种简单一眼看上去就能明白的单词。接下来在文章中分享一些CSS中常用的命名规范,希望对大家有所帮助 文本命名规范 index.css: 一般用于首页建立样式 head.css: 头部样式,当多个页面头部设计风格相同时使用。 base.css: 共用样式。 style.css:独立页面所使用的样式文件。 global.css:页面样式基础,全局公用样式,页面中必须包含。 layout.css:布局、版面样式,公用类型较多时使用,一般用在首页级页面和产品类页面中 module.css:模块,用于产品类页,也可与其它样式配合使用。 master.css:主要的样式表 columns.css:专栏样式 themes.css:主体样式 forms.css:表单样式 mend.css:补丁,基于以上样式进行的私有化修补。 页面结构命名: page:代表整个页面,用于最外层。 wrap:外套,将所有元素包在一起的一个外围包,用于最外层 wrapper:页面外围控制整体布局宽度,用于最外层 container:一个整体容器,用于最外层 head