2015-02-11 19 views
5

Một câu hỏi chung về việc xây dựng một cuộc chiến tranh từ một ứng dụng khởi động mùa xuân và chạy nó trong một container servlet độc lập. Các tài liệu tôi dường như có vẻ mâu thuẫn với các ví dụ về Stack Overflow.chiến tranh ứng dụng Spring Boot trong một container độc servlet

Câu trả lời here cho thấy cách tôi đọc để làm điều này một vài tháng trước đây. Tôi đọc số here này, nhưng hướng dẫn dường như đã thay đổi mất ứng dụng ví dụ thực tế.

Dưới đây là phương pháp "configure" tham chiếu khởi động mùa xuân chính Application.class.

public class WebInitializer extends SpringBootServletInitializer { 

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

Ngoài ra còn có những bài viết herehere mà hiển thị "cấu hình" phương pháp đề cập đến các tiểu lớp SpringBootServletInitializer riêng của mình.

public class BootStrap extends SpringBootServletInitializer { 

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

    @Override 
    protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) { 
     return application.sources(BootStrap.class); 
    } 
} 

và cũng có phương pháp chính.

Cũng vào mùa xuân-boot-mẫu truyền thống ví dụ ứng dụng tại https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples, trong đó cho thấy "WAR bao bì" làm nó khác nhau

public class WebConfig extends WebMvcConfigurerAdapter {......... 

tôi đã tự hỏi là có vấn đề với việc lựa chọn hơn những cách khác nhau dường như đạt được điều tương tự trong khởi động mùa xuân? Hay tất cả chúng đều hoạt động bình đẳng và có thể hoán đổi cho nhau?

Trả lời

8

Có lớp ứng dụng chính của bạn mở rộng SpringBootServletInitializer (Bootstrap trong câu hỏi của bạn) hoặc sử dụng một lớp riêng biệt (WebInitializer trong câu hỏi của bạn) tùy theo sở thích cá nhân. Sở thích của tôi là sử dụng cách tiếp cận Bootstrap nhưng cả hai đều hoạt động theo cách tương tự; chọn bao giờ bạn thích.

Nếu bạn chỉ triển khai ứng dụng của mình vào một thùng chứa servlet độc lập thì bạn không cần cần một phương pháp chính. Phương pháp chính được sử dụng nếu bạn muốn chạy các ứng dụng như một cuộc chiến tranh thực thi (java -jar my-app.war), hoặc bạn muốn để có thể chạy nó trực tiếp trong IDE của bạn, ví dụ mà không cần phải IDE của bạn triển khai nó đến một container servlet.

spring-boot-sample-traditional minh họa việc sử dụng web.xml để khởi động ứng dụng Khởi động mùa xuân. Nói chung, đây không phải là cách tiếp cận được khuyến nghị trừ khi bạn bị mắc kẹt trong thùng chứa Servlet 2.5. Việc sử dụng WebMvcConfigurerAdapter không liên quan gì đến việc đóng gói WAR. Hãy xem web.xml của nó để xem các phần cấu hình có liên quan.

+0

cảm ơn lời giải thích kỹ lưỡng - được đánh giá cao :). Tôi đã chọn phương pháp "WebInitializer" như Spring Initializr được đề cập bên dưới đã tạo ra .... – n99

+0

@Andy Wilkinson, bạn nói "Nếu bạn chỉ triển khai ứng dụng của mình vào một thùng chứa servlet độc lập thì bạn không cần một phương thức chính." ... nhưng làm thế nào một người sẽ làm được điều đó? Tất cả các tài liệu về Spring có vẻ là về Spring Boot nhưng không ai sẽ khởi động Spring Boot. Tại một thời điểm nào đó, họ sẽ triển khai một máy chủ độc lập nhưng gần như không có tài liệu về việc đó. Lời khuyên nào? – Jeach

+0

AFAIK, đại đa số mọi người chạy Spring Boot trong sản xuất bằng cách sử dụng một jar thực thi chứ không phải là một máy chủ độc lập. Nếu bạn cần sử dụng một máy chủ độc lập thì cả hai [tài liệu] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file) và câu hỏi này cho bạn biết cách làm như vậy. –

4

Sử dụng mùa xuân Initializr http://start.spring.io/

Chọn loại hình dự án (Gradle hoặc Maven) và bao bì như chiến tranh.

Add Web như phụ thuộc và Tạo dự án.

này sẽ bootstrap ứng dụng của bạn với cách "đúng".

+0

cảm ơn - cũng sẽ chấp nhận câu trả lời này nếu có thể chấp nhận nhiều câu trả lời .... – n99

+0

không có prob, cảm ơn anyway – selvinsource

Các vấn đề liên quan