对,我就是那个看完一脸懵,回去啃代码的小渣渣
文章目录
1、Tomcat一键启停
设计就是要找到系统的变化点和不变点。
如果想让一个系统能够对外提供服务,需要创建、组装并启动这些组件;在服务停止的时候,需要释放资源,销毁组件,这是一个动态过程。Tomcat组件之间存在两种关系:
- 组件有大有小,大组建管理小组件。
- 组件有内右外,外层组件控制内层组件。
总结来说,就是请求的处理过程是由外层组件来驱动的。
1.1、LifeCycle接口
系统中的不变点是:组件的创建、初始化、启动、状态及状态的转化。
变化点:每个组件的初始化(启动)方法。
将不变点抽象出来,就是LifeCycle接口。
因为组件的init()和start()调用是由它的父组件的状态变化触发的,可以把组件的生命周期转换成一个个状态,把状态的转变看作一个事件。子组件注册监听父组件的事件,就是观察者模式。
LifeCycle接口里的LifeCycleState定义如下:
public enum LifecycleState {
NEW(false, null),
INITIALIZING(false, Lifecycle.BEFORE_INIT_EVENT),
INITIALIZED(false, Lifecycle.AFTER_INIT_EVENT),
STARTING_PREP(false, Lifecycle.BEFORE_START_EVENT),
STARTING(true, Lifecycle.START_EVENT),
STARTED(true, Lifecycle.AFTER_START_EVENT),
STOPPING_PREP(true, Lifecycle.BEFORE_STOP_EVENT),
STOPPING(false, Lifecycle.STOP_EVENT),
STOPPED(false, Lifecycle.AFTER_STOP_EVENT),
DESTROYING(false, Lifecycle.BEFORE_DESTROY_EVENT),
DESTROYED(false, Lifecycle.AFTER_DESTROY_EVENT),
FAILED(false, null);
private final boolean available;
private final String lifecycleEvent;
private LifecycleState(boolean available, Stri