求教,做javaweb应用的时候经常要重启tomcat,重启都需要一段时间,这样不是影响到
如果只是修改页面文件(HTML或者JSP文件)是不需要重新部署和重启tomcat的。只有修改了Java代码才需要重新部署。至于要不要重启tomcat,看你的项目大小了。如果项目比较庞大,在本地测试久了就需要重启tomcat,释放内存。
es启动脚本是bin目录下的elasticsearch。其中需要加载一些环境变量,诸如ES_CLASSPATH JAVA_OPTS ES_JAVA_OPTS等。推荐设置ES_HEAP_SIZE的值,来这只es进程需要的内存(经验值为系统内存的一半以上),同时设置-p参数来指定pid文件的生成位置,在es关闭的时候会用到。
脚本内容不再赘述,java主类位于orgelasticsearchbootstrap。主要逻辑是生成了一个InternalNode节点,并且启动了一个keepalive线程。结点的启动代表整个es进程启动了。
InternalNode节点是通过NodeBuilder来生成的,节点在构造函数中通过ModuleBuilder类来进行模块的注入(是对Guice的一个封装而已),同时生成injector实例,如下
ModulesBuilder modules = new ModulesBuilder();
modulesadd(new VersionModule(version));
modulesadd(new CacheRecyclerModule(settings));
modulesadd(new PageCacheRecyclerModule(settings));
modulesadd(new BigArraysModule(settings));
modulesadd(new PluginsModule(settings, pluginsService));
modulesadd(new SettingsModule(settings));
modulesadd(new NodeModule(this));
modulesadd(new NetworkModule());
modulesadd(new ScriptModule(settings));
modulesadd(new EnvironmentModule(environment));
modulesadd(new NodeEnvironmentModule(nodeEnvironment));
modulesadd(new ClusterNameModule(settings));
modulesadd(new ThreadPoolModule(settings));
modulesadd(new DiscoveryModule(settings));
modulesadd(new ClusterModule(settings));
modulesadd(new RestModule(settings));
modulesadd(new TransportModule(settings));
if (settingsgetAsBoolean("httpenabled", true)) {
modulesadd(new HttpServerModule(settings));
}
modulesadd(new RiversModule(settings));
modulesadd(new IndicesModule(settings));
modulesadd(new SearchModule());
modulesadd(new ActionModule(false));
modulesadd(new MonitorModule(settings));
modulesadd(new GatewayModule(settings));
modulesadd(new NodeClientModule());
modulesadd(new BulkUdpModule());
modulesadd(new ShapeModule());
modulesadd(new PercolatorModule());
modulesadd(new ResourceWatcherModule());
modulesadd(new RepositoriesModule());
modulesadd(new TribeModule());
injector = modulescreateInjector();
在InternalNode的start方法中,用injector对各个模块完成启动,各自负责各自的功能,如下:
injectorgetInstance(Discoveryclass)setAllocationService(injectorgetInstance(AllocationServiceclass));
for (Class plugin : pluginsServiceservices()) {
injectorgetInstance(plugin)start();
}
injectorgetInstance(MappingUpdatedActionclass)start();
injectorgetInstance(IndicesServiceclass)start();
injectorgetInstance(IndexingMemoryControllerclass)start();
injectorgetInstance(IndicesClusterStateServiceclass)start();
injectorgetInstance(IndicesTTLServiceclass)start();
injectorgetInstance(RiversManagerclass)start();
injectorgetInstance(SnapshotsServiceclass)start();
injectorgetInstance(ClusterServiceclass)start();
injectorgetInstance(RoutingServiceclass)start();
injectorgetInstance(SearchServiceclass)start();
injectorgetInstance(MonitorServiceclass)start();
injectorgetInstance(RestControllerclass)start();
injectorgetInstance(TransportServiceclass)start();
DiscoveryService discoService = injectorgetInstance(DiscoveryServiceclass)start();
discoServicewaitForInitialState();
// gateway should start after disco, so it can try and recovery from gateway on "start"
injectorgetInstance(GatewayServiceclass)start();
if (settingsgetAsBoolean("httpenabled", true)) {
injectorgetInstance(HttpServerclass)start();
}
injectorgetInstance(BulkUdpServiceclass)start();
injectorgetInstance(ResourceWatcherServiceclass)start();
injectorgetInstance(TribeServiceclass)start();
至此,es进程启动完毕。
guice相关介绍可以参见以下链接:
关键点在于:
@inject注释---guice会扫描inject注释,并对方法中出现的参数实例寻找对应注册的实例进行初始化。
tomcat热部署只针对class文件,你修改其他文件确实不能自动热部署。
中间件启动的时候就装载好的文件只能重启tomcat了或通过tomcat manager来重载。
如果在程序中有通过流的形式读取文件的话,那么手动修改后重新触发读取动作,能生效。
你这种情况要么重启,要么把装载properties这些文件的动作改成代码来操作,而不是中间件启动时自动装载。
下面两篇文章可能会帮到你:
http://stackoverflowcom/questions/3573575/how-to-reload-properties-file-without-rebooting-tomcat
http://wikiapacheorg/tomcat/HowTo
链接里面有人介绍apache的common包里面有解决方案。
Tomcat服务器重启的办法:
第一步:使用cmd进入dos界面
第二步:进入Tomcat安装目录
C:\Users\AdministratorMS-201606131808>E:
E:\>cdapache-tomcat-8026-windows-x64\apache-tomcat-8026\bi
E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026\bin>
到bin目录之后,先关闭原来运行的Tomcat服务器
第三步:关闭方法:执行shutdownbat指令
E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026\bin>shutdownbat
UsingCATALINA_BASE: "E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026"
UsingCATALINA_HOME: "E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026"
UsingCATALINA_TMPDIR: "E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026\temp"
UsingJRE_HOME: "C:\ProgramFiles\Java\jdk180_31"
UsingCLASSPATH: "E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026\bin\bootstrapjar;E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026\bin\tomcat-julijar"
E:\apache-tomcat-8026-windows-x64\apache-tomcat-8026\bin>
第四步:使用startupbat重新启动Tomcat服务器。
0条评论