之前一直是使用 Eclipse+Jetty 開發(fā)的匿又,然而在一次OSX系統(tǒng)更新之后隘竭,eclipse居然由于版本過低打不開了(各種震驚塘秦、悲傷與無奈)。动看。尊剔。。于是一怒之下?lián)Q成了IDEA+Tomcat菱皆。
下面就來講一下如何用Idea+Tomcat實(shí)現(xiàn)熱部署须误。
熱部署好處
什么是熱部署呢?舉例來說仇轻,就是如果你啟動(dòng)了一個(gè)應(yīng)用京痢,但是突然改寫了一個(gè)文件,如果要使這個(gè)改動(dòng)生效篷店,我們通常需要重新啟動(dòng)這個(gè)應(yīng)用祭椰,然而這個(gè)啟動(dòng)過程可能會(huì)花費(fèi)很長(zhǎng)時(shí)間。
那有沒有其他辦法可以既使改動(dòng)生效,又不至于去浪費(fèi)時(shí)間重啟應(yīng)用呢方淤?有钉赁!那就是熱部署。熱部署可以在你改動(dòng)文件之后携茂,系統(tǒng)自動(dòng)或人工手動(dòng)觸發(fā)重新加載class的機(jī)制你踩,從而實(shí)現(xiàn)不需要啟動(dòng)整個(gè)應(yīng)用,卻能使改動(dòng)生效的效果邑蒋。
熱部署配置
- 本文默認(rèn)你的IDEA已經(jīng)安裝了Tomcat姓蜂,沒有安裝的請(qǐng)先去安裝按厘,安裝方法略医吊;
-
打開Edit Configurations;
-
選擇已有的server或者點(diǎn)擊左上角新建一個(gè)server逮京;
-
選擇Deployment卿堂,點(diǎn)擊左下角的+號(hào),選擇Artifact懒棉,然后選擇你對(duì)應(yīng)的項(xiàng)目草描;
-
選好后是下面這個(gè)樣子,右側(cè)可以編輯你的項(xiàng)目路徑;
- 選擇Server,主要有以下幾點(diǎn)需要注意:
- VM options: 如果你的tomcat打印出來的日志亂碼策严,那么把這項(xiàng)設(shè)置為
-Dfile.encoding=UTF-8
- On 'Update' action: 執(zhí)行Update時(shí)的操作穗慕,為了實(shí)現(xiàn)熱部署,這項(xiàng)一定要選擇
Update classes and resource
- On frame deactivation: 這項(xiàng)根據(jù)我的觀察妻导,如果選擇
Update classes and resource
逛绵,會(huì)在你最小化Idea或者切換到其他應(yīng)用后自動(dòng)進(jìn)行熱部署
- 保存;
- debug啟動(dòng)倔韭。(注意一定要debug啟動(dòng)J趵恕)
測(cè)試
- 寫一個(gè)簡(jiǎn)單的接口;
@Controller
@RequestMapping("/inter/mytest")
public class TestJsonController {
@RequestMapping(value = "test", method = RequestMethod.POST)
@ResponseBody
public String phoneChange(@RequestBody String param){
System.out.println("參數(shù): "+param);
System.out.println("初始");
return param;
}
}
-
對(duì)接口發(fā)起一個(gè)請(qǐng)求寿酌,查看Output胰苏;
接下來我們修改一下代碼;
@Controller
@RequestMapping("/inter/mytest")
public class TestJsonController {
@RequestMapping(value = "test", method = RequestMethod.POST)
@ResponseBody
public String phoneChange(@RequestBody String param){
System.out.println("參數(shù): "+param);
System.out.println("改變");//將 ‘初始’ 改成 ‘改變’
return param;
}
}
-
注意了醇疼!這里需要點(diǎn)擊一下Update硕并;
-
選擇第二項(xiàng),然后點(diǎn)OK秧荆;
-
然后左下角會(huì)提示 "1 class reloaded" 倔毙,證明你的修改已經(jīng)成效了;
-
再次發(fā)起請(qǐng)求測(cè)試辰如,后發(fā)現(xiàn)輸出已經(jīng)變了普监。
至此,大功告成!