2012-08-08 38 views
26

rất nhiều ứng dụng java được xây dựng với maven. maven có khái niệm Profiles, nó thực sự tiện dụng để xây dựng gói phát hành cho các môi trường khác nhau. ví dụ. dev/test/prod sử dụng path/jndiname/security rule/properties files ... Tôi nghĩ rằng tôi không phải liệt kê các mã ở đây để giải thích.hồ sơ maven hoặc hồ sơ mùa xuân?

Mùa xuân là một khuôn khổ rất tốt đẹp và phổ biến cho phát triển java, kể từ spring3 nó đã hỗ trợ khái niệm hồ sơ quá.

Bây giờ câu hỏi đặt ra, để phát hành cho các mục đích ENV khác nhau, cái nào tốt hơn? ngay bây giờ tôi thích hồ sơ maven. kể từ mùa xuân phải sao chép từng định nghĩa bean trong mỗi hồ sơ. và nó cần một initializer/property để cho spring biết profile nào sẽ được kích hoạt.

nhưng tôi cảm thấy hồ sơ mùa xuân linh hoạt hơn hồ sơ maven.

bạn nghĩ sao? xin vui lòng cho một số lời khuyên. cảm ơn bạn.

Trả lời

30

Cấu hình Maven sẽ cung cấp giải pháp xây dựng, trong khi hồ sơ SpringFramework sẽ cung cấp giải pháp thay thế thời gian chạy. Tôi nghĩ đây là câu hỏi đầu tiên bạn có thể tự hỏi: nếu anh ta muốn có một gói duy nhất có thể được triển khai trong các môi trường khác nhau, hoặc nếu anh ta muốn công cụ xây dựng cung cấp các gói khác nhau theo môi trường đích.

Một điều cần ghi nhớ là nhiều câu hỏi có thể phát sinh nếu bạn có các gói khác nhau được triển khai vào các máy chủ khác nhau. Ví dụ, tại nơi làm việc của tôi, nếu tôi triển khai một gói để sửa lỗi trước đó trong môi trường sản xuất, chính sách của công ty sẽ cho biết rằng kịch bản chấp nhận duy nhất là tôi có cùng một gói giải pháp trong QA và trong các máy chủ sản xuất.

5

Nếu bạn cần các hiện vật khác nhau thì hãy đi với maven. Nếu nó chỉ là một cấu hình thực mà có thể được cấu hình SAU thì artefact được xây dựng thì các profile Spring của người dùng.

0

Tôi nghĩ điều đó tùy thuộc vào yêu cầu của bạn. Nếu bạn có các phụ thuộc khác nhau dựa trên môi trường (ví dụ: các trình điều khiển jdbc, vv ..), bạn sẽ muốn sử dụng maven để sắp xếp điều này.

Nếu đó chỉ là vấn đề định cấu hình triển khai của bạn, có lẽ bạn nên sử dụng lò xo.

6

Như đã đề cập trong bài trả lời khác: tất cả phụ thuộc vào cách bạn làm việc :)

gì chúng tôi đã đưa ra trong những năm cuối cùng sử dụng maven và bây giờ là mùa xuân 3,1 hồ sơ là thế này:

  • chúng tôi sử dụng plugin maven-release để cắt các bản phát hành. điều này gây ra các vấn đề với môi trường nếu chúng ta sử dụng hồ sơ maven vì chúng ta cần phải xây dựng lại bản phát hành hoặc ít nhất thẻ với mọi cấu hình maven
  • để chúng tôi tạo tệp .war cho mọi môi trường và sử dụng mùa xuân PropertyPlaceholderConfigurer để thiết lập ứng dụng (hoặc một số tài nguyên JNDI tùy thuộc vào khách hàng). Điều này cho phép chỉ có một bản phát hành maven chạy.
  • cấu hình mùa xuân sẽ xuất hiện khi các môi trường khác nhau. ví dụ một dịch vụ xác thực không có sẵn trên tất cả các môi trường. Ở đây chúng tôi khai thác dịch vụ đó và đặt nó vào một hồ sơ mùa xuân. Chúng tôi hoạt động các hồ sơ mùa xuân trong các thuộc tính được đọc bởi PropertyPlaceholderConfigurer chúng tôi sử dụng anyway.

có một số hướng dẫn tốt đẹp xung quanh về làm thế nào để làm điều đó:

chúng ta thường chỉ sử dụng các cấu maven để phân chia các build thành nhiều phần khác nhau cho các các nhà phát triển và xây dựng tích hợp liên tục. Chúng tôi không thực sự sử dụng chúng cho các môi trường mục tiêu nữa cho các tệp .war. Chúng tôi vẫn sử dụng hồ sơ maven để triển khai cơ sở dữ liệu tự động, khác với các ứng dụng web (lượng dữ liệu, dữ liệu thử nghiệm, ...), nhưng chúng không được phân phối dưới dạng zip.

Có nhiều cách khác để thực hiện. Tôi không nghĩ rằng kết thúc của câu chuyện :)

Nhưng nó có thể hữu ích.

2

Tôi đã xảy ra sử dụng thuộc tính-maven-plugin để đặt thuộc tính hệ thống tùy thuộc vào hồ sơ maven đã được kích hoạt. Sau đó, vào mùa xuân, tôi đã kích hoạt (các) cấu hình theo chương trình mà tôi muốn, tùy thuộc vào thuộc tính hệ thống đó:

Chuỗi activeProfile = System.getProperty ("myapp.profile");

appContext.getEnvironment(). SetActiveProfiles (....)

Hơn nữa, khi tôi muốn liên kết trực tiếp hai loại hồ sơ (maven/mùa xuân), tôi đã thiết lập thuộc tính spring.profiles.active thông qua plugin maven.

Thực tiễn có thể là sai trong thiết kế nhưng chúng đã giải quyết được sự cố của tôi.

+1

Chính xác những gì tôi đang tìm kiếm, thanx! – Vinicius