一、IDEA服务器热部署
场景:
一般服务器(如tomcat、jboss等)启动后,如果需要进一步修改java代码,或者是jsp代码,一般来说,修改完后重启服务器才能生效。
但是如果配置了服务器的热部署,就可以改完代码后立即生效。这样就节省了大量的时间。
两个选项:
On Update action : 当代码改变的时候,需要IDEA为你做什么;
On Frame deactivation : 当失去焦点(比如你最小化了IDEA窗口),需要IDEA为你做什么。
On Update action里有4个选项(一般选Update classes and resources)
1)Update resources :如果发现有更新,而且更新的是资源文件(*.jsp,*.xml等,不包括java文件),就会立刻生效。
2)Update classes and resources : 如果发现有更新,这个是同时包含java文件和资源文件的,就会立刻生效。
注意:
在运行模式下:
1-- java 修改后,会被编译成.class 然后覆盖到target/kao文件夹下,IDE调试模式的情况下,立即生效。IDE运行模式下,不立即生效,需要redeployed才可生效。
2-- jsp文件修改后,再次被访问的时候,会自动更新,重新编译cheng.java。-->.class 保存在tomcat的work目录下。由于是访问时才检测是否修改,是否需要重新编译,所以 IDE 运行模式 和 IDE调试模式下,都是立即生效。刷新下页面就可。
debug模式下:修改jsp和java文件时可以立刻生效的。当然,两种运行模式下,修改resources资源文件都是可以立刻生效的。
3)Redploy : 重新部署,发布到tomcat里,不重启tomcat,而是把原来的删掉,然后重新发布。
4)Restart : 重启服务器。
On Frame deactivation
1)Do nothing : 不做任何事 (一般推荐这个,因为失去焦点的几率太大)。
2)Update resources : 失去焦点后,修改的resources文件都会立刻生效
3)Update classes and resources : 失去焦点后,修改的java ,resources文件都会立刻生效。
注意:
在运行模式下:jsp是 update classes and resources 是立即生效的,但是.java文件修改后 并不会立即生效。
debug模式下:jsp和java文件修改 都会立即生效。
附注:
如果Artifact是war包形式的话,On Update action与On frame deactivation中的选项也是不一样的:没有Update resources和 Update classes and resources这种选项,取而代之的是Hot Swap Classes选项,本质的意思是一样的。
server.xml文件中
自动部署
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</host>
autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用。
热部署
<Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" >
</Context>
reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件,
如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib和/WEB-INF/classes目录的变化,
自动装载新的JSP和Servlet,我们可以在不重启Tomcat的情况下改变web application 。