Đặt tập tin cấu hình Spring ở đâu?


18

Tôi muốn tích hợp Spring framework trong dự án của mình đặc biệt vào phía máy chủ.

Vì vậy, tôi không muốn đặt nó trong thư mục WEB-INF của tệp tin chiến tranh.

Tôi có nên đặt một applicationContext.xml nó vào mỗi lớp không (có nghĩa là mỗi dự án được chia thành các dự án riêng biệt? (Dịch vụ, Tên miền và DAO)

Thực hành tốt là gì?


2
Điều này có thể có liên quan: stackoverflow.com/questions/5967405/
Kẻ

Câu trả lời:


25

Các cấu trúc tập tin Maven có thể giúp với điều này

Về bản chất, các tệp cấu hình Spring (có thể có bất kỳ tên nào, không chỉ chung chung applicationContext.xml) được coi là tài nguyên đường dẫn và được nộp theo src/main/resources. Trong quá trình xây dựng, chúng sẽ được sao chép vào WEB-INF/classesthư mục là nơi bình thường để các tệp này kết thúc.

Biến thể bao gồm một springthư mục bổ sung (ví dụ src/main/resources/spring) để tách bối cảnh Spring khỏi các tài nguyên khác dành riêng cho khung ứng dụng. Bạn có thể muốn phân chia bối cảnh ứng dụng thành các lớp chuyên dụng, chẳng hạn như:

example-servlet.xml
example-data.xml
example-security.xml

và như thế.

Còn các môi trường khác nhau như dev / test / sản xuất thì sao?

Thông thường, cấu hình Spring của bạn sẽ chọn cấu hình môi trường từ môi trường, ahem, môi trường của nó. Thông thường, điều này có nghĩa là sử dụng JNDI, JDBC, các biến môi trường hoặc các tệp thuộc tính bên ngoài để cung cấp cấu hình cần thiết. Tôi liệt kê những thứ tự theo thứ tự ưu tiên vì JNDI thường dễ quản trị hơn các tệp thuộc tính bên ngoài trong cụm sản xuất được kiểm soát.

Trong trường hợp kiểm thử tích hợp, bạn có thể cần sử dụng tệp cấu hình Spring "chỉ kiểm tra". Điều này sẽ chứa các bối cảnh đặc biệt sử dụng đậu thử nghiệm hoặc cấu hình. Chúng sẽ được trình bày dưới src / test / resource và có thể có test-tiền tố để đảm bảo rằng các nhà phát triển nhận thức được mục đích của họ. Một cách sử dụng thông thường sẽ là cung cấp Nguồn dữ liệu không phải JNDI có thể nhắm mục tiêu cơ sở dữ liệu HSQLDB trong quá trình kiểm tra tự động xây dựng và sẽ được tham chiếu trong trường hợp thử nghiệm.

Tuy nhiên, nói chung, phần lớn các tệp ngữ cảnh Spring của bạn không cần sửa đổi chuyên biệt khi chúng di chuyển giữa các tầng. Nó phải là trường hợp cùng một tạo phẩm xây dựng (ví dụ: tệp WAR) được sử dụng trong dev / test / sản xuất chỉ với các thông tin khác nhau.


2

Dự án của bạn được phân chia trong các mô-đun Maven? Nếu vậy, bạn có thể thêm một mô-đun bổ sung chỉ cho các tệp cấu hình. Hãy gọi nó là mô-đun cấu hình

config-module
      |
      |--> src\main\resources\config\spring\applicationContex.xml
      |--> src\main\resources\config\properties\application.properties
      |--> pom.xml

Cấu hình như vậy là một gợi ý. Thiết lập tập tin riêng của bạn Gói nó giống như JAR và thêm mô-đun này làm phụ thuộc của bất kỳ mô-đun nào khác (web, lib của lib, jar khác).

Bạn sẽ có quyền truy cập vào tài nguyên mô-đun cấu hình (xml, thuộc tính, v.v.) vì chúng nằm trong đường dẫn lớp.

web-module của pom

<dependency>
    <groupId>com.myproject.group</groupId>
    <artifactId>config-module</artifactId>
</dependency>

Sau đó sử dụng nhập khẩu báo cáo từ các tệp ngữ cảnh Spring bên ngoài. Ví dụ

<import resource="classpath*:com/package/subpackage/**/config/applicationContext.xml" />

Đây là một ý tưởng tuyệt vời! Tôi đã tự do thêm một chút vì ví dụ "tài nguyên nhập" của bạn không hoạt động với tôi ...... Tôi vẫn đang học "lọc" của câu lệnh nhập (dựa trên tên gói đầy đủ) ... và tôi đã không làm việc mà nấc cụt (dành cho những độc giả tương lai) để đánh lạc hướng khỏi ý tưởng và câu trả lời tuyệt vời này. Cảm ơn Laiv!
granadaCoder

Một trong những lý do khiến việc nhập "những gì tôi nghĩ nên làm" có thể không thành công là do lỗi này: github.com/spring-projects/spring-framework/issues/16017
granadaCoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.