2017-01-13 57 views
1

經過大量的頭部劃傷和圍繞網站的圈子,我設法使用gradle將我的Spring啓動RESTful webservice作爲war文件部署到Tomcat中。它比文檔或其他網站更加簡單。關於WAR/JAR文件的春季啓動問題

不過,我只是有幾個問題:

  1. 如何從我的13MB文件中刪除春天的膨脹,而是使用一個共享/部署Spring版本代替,以更方便地支持更新庫?

  2. 爲什麼被嵌入的Tomcat還是把我的戰爭文件(在WEB-INF \ lib中提供的)?

  3. 有沒有辦法讓更簡單的jar版本爲開發目的而構建?

  4. 對於生產系統,jar如何生成與部署到容器的war文件一樣好的文件 - 您無法輕鬆修改配置,無法對其進行擴展(按照Web服務器或Web服務器的負載平衡),並且沒有管理前端。如果春天(或春季啓動)的意圖是真正創建自包含的微服務器,我仍然無法理解擴展它,甚至不知道如何在Windows中運行不是控制檯應用程序的jar ...

這裏是我的文件要點:

apply plugin: 'java' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'war' 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' 
} 

代碼:

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(Application.class); 
    } 

} 

感謝。

回答

1

這應該可能是幾個問題,所以我會(嘗試)回答我可以。我不使用Gradle,但我很瞭解Maven,原理也是一樣的。

。我不知道爲什麼一個13Mb的jar會引起擔心,但是您可能能夠聲明依賴關係爲compileOnly scope.假設服務器的類路徑具有所需的依賴項,這應該可行,儘管我從未測試過它。

但是,這裏還有其他潛在的問題。你的目標是:「改爲使用共享/部署的Spring版本,以更輕鬆地支持更新庫?」似乎是一個不錯的主意,直到您更新服務器上的版本並破壞您的應用程序。只有在經過測試後,每個應用程序才能更安全地管理自己的依賴關係,並部署依賴性升級(作爲應用程序的新版本)。

2.嵌入式Tomcat是包含在spring-boot-starter-web中的依賴項。你應該能夠這樣排除:

configurations { 
    runtime.exclude module: 'spring-boot-starter-tomcat' 
} 

你如何定義簡單?再次,沒有看到這個問題,但它似乎是一個壞主意。我希望我正在做的任何事情都能夠準確地反映(或儘可能地)我將要投入生產的東西。

4.有利弊的任何做法。你使用最適合你的情況。 JAR可以是獨立的,對於小型服務,也許這樣更好。

+0

謝謝。關於3,我只是從代碼/測試循環中點擊構建,然後運行比單擊構建然後部署到tomcat並運行快很多。真的,我是在不需要手動修改我的代碼/ gradle來迎合創建jar和戰爭的方式之後。 –

+0

啊,我明白了。我不這樣工作(由於工作上的侷限性,我不在工作之外做Spring/Java),但是我根據環境設置了Maven配置文件。如果你這樣做,它可能會解決這個問題。你可以使你的包裝有條件。參考這個:https://gradle.org/blog/feature-spotlight-gradles-support-maven-pom-profiles/ –