tomcat 如何用程序来管理应用服务的启动和关闭的

drugon 2006-01-03 05:28:14
最近公司的一些Application要做成可以用程序控制Start和Stop。也就是用一个批处理来启动Application的服务,然后再用另外一个批处理来关闭这个Application的服务。需求和tomcat的启动和关闭比较类似。
在tomcat的bin目录里面可以用startup.bat来启动tomcat服务,也可以用stop.bat来关闭服务。
我看了一下tomcat的源码,它最终是用一个线程来处理服务的启动和关闭的,当然在线程进行管理之前还有很多其它处理。
但是我还是有些不明白,当一个线程start后,又是如何去得到这个线程,因为startup.bat和stop.bat是两个运行环境,肯定不能简单的用一些Thread方法就可以实现。
还有一个问题是Java的反射可以得到一个类的对象,但是得到的这个对象是不是同一个JVM中的同一个对象,个人觉得是同一个JVM里面同一个类的对象,而不是同一个对象,不知道理解是否正确。
不知道各位是能否帮忙解决?

知道这里人多,所以发在这个版本,请各位版主不要转到其它版块去了。谢谢了,就当散分了,祝大家新年快乐。
...全文
479 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxin_1214 2006-01-08
  • 打赏
  • 举报
回复
新手帮忙DDD
catchbug 2006-01-07
  • 打赏
  • 举报
回复
Runtime有一个addShutdownHook(Thread hook) 方法,你可以在这个方法中监听一些事件来关闭你的应用程序。
drugon 2006-01-07
  • 打赏
  • 举报
回复
??
boy 2006-01-05
  • 打赏
  • 举报
回复
<Server port="8005" shutdown="SHUTDOWN" debug="0">
call "%EXECUTABLE%" stop %CMD_LINE_ARGS%
drugon 2006-01-05
  • 打赏
  • 举报
回复
谢谢楼上的几位,基本上己经实现了。
我也是用一个ServerSocket来监听,启动一个stop.bat的时候,就建一个Socket和ServerSocket连接,然后发送一条关闭的命令,ServerSocket收到关闭命令时就释放Application的资源,然后关闭ServerSocket,最后退出,这样就可以实现我上面要的功能了。

不过这种用ServerSocket的方法我觉得要占用一个端口,想换成线程控制的方法,但现在还不太清楚怎么做。
也就是启动一个startup.bat来启动Application,在startup.bat里面new一个Thread对象,然后调用Thread的start()方法,在start()方法里面启动相应的Application服务。如果想关闭Application服务的时候,就用一个stop.bat来找到这个Application服务的Thread,然后中止这个Thread的运行,也就是让这个Thread中断,现在的问题是:
Thread的启动start()是在一个运行环境里面的,但是在另一个stop.bat的运行环境里面是如何能得到这个在startup.bat里面new的Thread对象?
虽然startup.bat和stop.bat是在同一个JVM里面,但是是在不同的运行环境,用反射和简单的Thread操作肯定不行,不知各位有没有更好的方法?
funcreal 2006-01-05
  • 打赏
  • 举报
回复
调用系统的命令可以吗?
比如在windows中,就可以调用dos命令来复制文件。你可以调用系统命令来关闭和启动服务,或者直接打开应用程序。
vvpang 2006-01-05
  • 打赏
  • 举报
回复
用 tomcat 的 manager 的功能来控制。

应该比这个要方便的多。
viewtifuljoey 2006-01-05
  • 打赏
  • 举报
回复
留名
不过同意用楼上的做法
zxj7957 2006-01-05
  • 打赏
  • 举报
回复
提供一个做好的建议。用linux的crontab来实现调度一个shell script程序。该sell script程序检查一个配置表。从里面取出文件名。然后检查该进程是否存在。不存在调度启动
kingswood 2006-01-04
  • 打赏
  • 举报
回复
还有一个问题是Java的反射可以得到一个类的对象,但是得到的这个对象是不是同一个JVM中的同一个对象,个人觉得是同一个JVM里面同一个类的对象,而不是同一个对象,不知道理解是否正确
=====================================================================================
相同的类是通过不同的类装载器装载的,也许是启动类装载器,也许是用户自定义的类装载器,他们的命名空间不同,类实例也不相同。
doway 2006-01-04
  • 打赏
  • 举报
回复
mark
禽兽v5 2006-01-04
  • 打赏
  • 举报
回复
startup简单,启动程序而已。

stop么,tomcat在conf/server.xml有一个配置是给stop的端口的,他用线程监听这个端口,当运行stop.bat时,就是往这个端口发命令,而监听线程收到命令时就把主线程关闭。

反射怎么拿到对象?我只知道拿到类。
drugon 2006-01-04
  • 打赏
  • 举报
回复
有会的吗?
jy03108434 2006-01-03
  • 打赏
  • 举报
回复
哈哈~~我是新手,懂的不多,来赚点分的~
帮你顶顶啦~~

23,408

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧