2014-12-09 23 views
21

Một ứng dụng DropWizard điển hình xác định một lớp ứng dụng, và ghi đè phương pháp initialize của nó như sau:DropWizard Bootstrap vs Cấu hình vs Môi trường

class MyApplication extends Application<MyConfiguration> { 
    static void main(String[] args) { 
     new MyApplication().run(args) 
    } 

    @Override 
    public void initialize(Bootstrap<MyConfiguration> bootstrap) { 
     // ??? 
    } 

    @Override 
    public void run(MyConfiguration configuration, Environment environment) 
      throws Exception { 
     // Register resources, health checks, etc. 
    } 
} 

Sau khi xem xét kỹ các tài liệu DropWizard, cũng như các JavaDocs cho:

  • Configuration - Một biểu tượng đối tượng của tệp cấu hình YAML. Mở rộng điều này với các thuộc tính cấu hình của riêng bạn và chúng cũng sẽ được phân tích cú pháp từ tệp YAML.
  • Bootstrap - Môi trường ứng dụng trước khi bắt đầu, chứa mọi thứ cần thiết để khởi động một lệnh Dropwizard.
  • Environment - Môi trường của ứng dụng Dropwizard.

Nhưng đây là những định nghĩa lớp học mơ hồ, đặc biệt là hai định dạng cuối cùng. Tôi hiểu rằng tôi phải phân lớp Configuration và nó đại diện cho POJO trong bộ nhớ của tệp cấu hình YAML/JSON của ứng dụng của tôi.

Nhưng tôi không thể hiểu những gì các cấu trúc khác đại diện (BootstrapEnvironment). Tôi đã sử dụng để tiêm cấu hình dành riêng cho môi trường vào ứng dụng của mình và vì vậy, tôi có xu hướng nghĩ về các khái niệm về "môi trường" và "cấu hình" như một khái niệm giống nhau.

Hơn nữa, có vẻ như các cặp đôi chặt chẽ của DropWizard là trường hợp với Configuration trường hợp, nhưng tôi không thể tìm thấy ví dụ nào về cách hai lớp này khác nhau và cách chúng được sử dụng khác nhau.

Vì vậy, tôi hỏi:

  1. một Bootstrap là gì, những gì tôi sử dụng nó cho?
  2. Environment là gì và tôi sử dụng nó để làm gì?

Trả lời

11

Dropwizard về cơ bản là một khung web được đề xuất, chủ yếu được sử dụng để phục vụ như một dự án REST API. Các lớp bạn đang hỏi là điểm mấu chốt của những gì tạo ra một ứng dụng Dropwizard. Các nhà phát triển đã kết hợp tất cả các thư viện mà họ muốn sử dụng trong khuôn khổ của họ và kết nối chúng với nhau để chúng tôi có thể dễ dàng làm việc ra khỏi những gì họ đã bootstrapped cho chúng tôi.

Environment là vùng chứa Môi trường Dropwizard, không phải là môi trường cá nhân của ứng dụng của bạn (tức là địa phương so với sản xuất). Nó có các thuộc tính cốt lõi cho khung công tác Dropwizard, chẳng hạn như thùng chứa web jersey.

Bootstrap về cơ bản là lớp kết nối mọi thứ đang được sử dụng trong Môi trường, bao gồm Cấu hình và Ứng dụng của bạn.

Nếu bạn xem qua các tệp nguồn, bạn sẽ có ý tưởng tốt về cách các lớp này hoạt động.

Cập nhật: Mỗi câu hỏi của bạn bên dưới, Môi trường không được sử dụng để xác định loại kết nối và thông tin cơ sở dữ liệu; đó là tệp cấu hình .yml của bạn. Bạn sẽ muốn đặt bất kỳ biến môi trường cụ thể trong tập tin đó và sau đó chạy ứng dụng của bạn với một cụ thể.tệp yml. Cá nhân tôi có một ứng dụng local.yml, application-staging.yml và application-prod.yml và chạy ứng dụng của tôi với .yml thích hợp tùy thuộc vào môi trường.

Dropwizard thực hiện một số cấu hình tự động của các nguồn dữ liệu với các thuộc tính .yml cụ thể: xem here.

+0

Cảm ơn @ th3morg (+1) - Tôi đoán * bắt đầu * có ý nghĩa và tôi sẽ xem xét các nguồn để đào sâu hơn một chút. Một câu hỏi tiếp theo về 'Môi trường': điều này sẽ được sử dụng để xác định rằng chúng ta đang ở phiên bản" dev "của Jersey/Jetty, và vì vậy chúng ta nên sử dụng một db nhúng trong bộ nhớ, so với" prod " phiên bản của container, do đó sử dụng máy chủ MySQL thực tế của chúng tôi? Nếu không, bạn có thể trích dẫn một vài ví dụ cụ thể về các ca sử dụng của 'Environment' không? Cảm ơn một lần nữa! – IAmYourFaja

+1

@IAmYourFaja Một điều khác tôi khuyên bạn nên làm là chạy ứng dụng của bạn trong chế độ gỡ lỗi trong một IDE nơi bạn có thể tạm dừng và/hoặc bước qua thực hiện thông qua các lớp Bootstrap và Môi trường. Bạn sẽ nhanh chóng có được ý tưởng về tất cả công việc đang được thực hiện đằng sau hậu trường để định cấu hình mọi thứ :) – th3morg

+0

Cảm ơn @ th3morg (+1) - nhưng tôi ở trên Windows nơi tôi không có quyền truy cập vào IDE, tôi ' m chỉ sử dụng Notepad đơn giản. – IAmYourFaja

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