2015-06-25 39 views
0

我試圖用Spring Boot創建一個非常簡單的RESTful Web服務來執行NLP作爲參數傳遞的內容。你可以在我的GitHub找到它。Spring Boot Service在本地但不是遠程工作

由於某種原因,我無法將其作爲WAR(see here)部署到我的家庭服務器中的Tomcat容器中,因此我決定至少嘗試將其設置爲可運行的JAR。

如果我通過調用自己的計算機上運行它:

java -jar -Xss32M -Xmx8G -XX:+UseG1GC -XX:+UseStringDeduplication ClearWS-0.1.0.jar 

它就像一個魅力。如果我指出我的瀏覽器http://localhost:8888/process?content=This%20is%20a%20test.,我得到預期的JSON:

{ "id": 1, 
    "sentences": [ 
     { "start": 0, 
     "end": 0, 
     "content": "This is a test.", 
     "tokens": [ 
      { "start": 0, "end": 4, "index": 0, "text": "This", "posTag": "DT", "chunkTag": "NP", "lemma": "this" }, 
      { "start": 5, "end": 7, "index": 1, "text": "is", "posTag": "VBZ", "chunkTag": "VP", "lemma": "be" }, 
      { "start": 8, "end": 9, "index": 2, "text": "a", "posTag": "DT", "chunkTag": "NP", "lemma": "a" }, 
      { "start": 10, "end": 14, "index": 3, "text": "test", "posTag": "NN", "chunkTag": "NP", "lemma": "test" }, 
      {"start": 14, "end": 15, "index": 4, "text": ".", "posTag": ".", "chunkTag": ".", "lemma": "." } ], 
     "size": 5 
     } ] 
} 

現在,我已經搬到了ClearWS-0.1.0.jar文件到我的家庭服務器,並在那裏我開始它使用相同的命令如上:沒有錯誤消息。本地(通過本地主機:8888),一切仍然完美。但是,如果我嘗試遠程使用它,它將不起作用:瀏覽器在一段時間後告訴我,我嘗試連接失敗。

該家庭服務器機器的NAT地址不會經常更改,因此我可以使用no-ip.com掛接它並無論如何都可以訪問它。請注意,我部署到Tomcat容器的其他J2EE服務完全可以遠程訪問和使用。我認爲這可能是嵌入式Tomcat與獨立的Tomcat衝突,所以我關閉了後者,但仍然無法達到ClearWS-0.1.0

我開始認爲Spring明白我仍然不完全信任它,所以它對我來說故意失敗......出於玩笑,任何對Spring和網絡有更好理解的人都可以幫助我把這個問題排除出去?提前致謝。


解決方案:我只是忘轉發端口8888 ...一旦補充,配置我的路由器,我可以遠程使用該服務。現在我想能夠將它部署在我現有的Tomcat容器中......任何想法?

+1

這聽起來不像是Spring的問題,而是一個網絡問題。你確定可以訪問8888端口嗎?聽起來好像不是。如果您可以運行該jar並從服務器上的本地主機訪問它,則會有某種防火牆阻止該請求。 – hyness

+0

@你說得對,我沒有轉發8888號港口。對我感到羞恥! –

回答

0

如果你真的想部署它到一個tomcat容器,你需要創建一個war文件as specified in the Spring Boot documentation。它主要涉及將Maven包裝設置爲戰爭。如果你的tomcat容器是6.0或更低版本,你需要寫一個web.xml,否則你將提供一個SpringBootServletInitializer

個人而言,我認爲這些天我沒有看到在容器內運行的好處。現在,Java世界中的運動是針對嵌入式servlet外包程序的,這使它更容易在雲中或docker等容器中運行。

+0

再次感謝您的有益討論。我針對的主要原因是向後兼容性:我有幾個正在運行的Tomcat服務,我想繼續運行。只是爲了好奇,如何在同一個端口上運行多個彈簧罐?我的Tomcat在端口8080處本地運行,但是它被轉發到80.我只能轉發到端口80.最後但並非最不重要的一點,我試圖用Spring Boot創建一場戰爭,即使使用鏈接的文檔也沒有成功。你可以找到一個MWE的帖子的鏈接,這個帖子不適用於我的問題... –

+0

一個進程,一個端口。如果你想在同一個端口上運行多個webapps,你需要一個tomcat容器。我不是mod重寫或iptables方面的專家,但我認爲可以做一些事情來將端口80上的不同路徑映射到嵌入式容器的不同端口。但是,在容器內運行可能更簡單。 – hyness

+0

非常感謝您的有用信息! –

相關問題