Tôi giả định rằng đối với một tài nguyên nhất định, bạn sử dụng cùng một tên JNDI trong mỗi môi trường. Nếu không, bạn phải chỉnh sửa mã của mình để trỏ đến tên tài nguyên mới (JNDI).
Thiết lập môi trường lần đầu tiên gần như không thể kiểm tra trước thời hạn.Không có cách nào để xác minh rằng một số chuỗi, giống như chuỗi kết nối cơ sở dữ liệu sản xuất, đã không nhận được chất béo ngón tay cho đến khi bạn thực sự phải sử dụng nó. Đó là bản chất của cấu hình môi trường. Với điều đó đã nói, nếu bạn muốn giảm bớt khả năng mắc lỗi, trước tiên bạn cần đảm bảo rằng mỗi tài nguyên được cung cấp một tên được sử dụng bất kể môi trường nào được lưu trữ. Tạo một tên tài nguyên dbConnectionString trong một tệp thuộc tính trỏ tới jndi:/jdbc/myproject/resources/dbConnectionString và đảm bảo tất cả các môi trường đều khai báo cùng một tài nguyên đó. Dưới đây là cách chúng tôi giữ mã được phân lập từ các loại phụ thuộc môi trường này. Điều đó đang được nói, bạn sẽ luôn phải tự xác minh rằng cấu hình của một máy chủ cụ thể đang sử dụng các giá trị thích hợp cho các tài nguyên được xác định.
LƯU Ý: bao giờ tạo tên tài nguyên như "dbProdConnectionString", "dbQAConnectionString", "dbDevConnectionString". Bạn sẽ đánh bại mục đích cố gắng loại bỏ can thiệp thủ công vì sau đó bạn đã thêm một bước gián tiếp cần thay đổi mã (để trỏ mã vào tên tài nguyên chính xác) và xây dựng (để gói các thay đổi vào tệp .war của bạn) khi di chuyển giữa các môi trường.
Chúng tôi đã tạo cấu trúc thư mục cho các thuộc tính cụ thể về môi trường. Trong thư mục đó, chúng tôi đã tạo các thư mục cho từng môi trường cụ thể được nhắm mục tiêu để triển khai, bao gồm cả phát triển cục bộ. Nó trông như thế này:
Project
\
-Properties
\
-Local (your PC)
-Dev (shared dev server)
-Test (pre-production)
-Prod (Production)
Trong mỗi thư mục chúng tôi đặt các bản sao song song của các tệp thuộc tính/cấu hình và chỉ đặt các cấu hình khác nhau trong tệp trong thư mục thích hợp. Bí mật là để kiểm soát classpath của môi trường triển khai. Chúng tôi đã xác định mục nhập classpath PROPERTIES trên mỗi máy chủ. Trên Prod, nó sẽ được đặt thành "$ ProjectDir/Properties/Prod" trong khi kiểm tra cùng một biến sẽ được đặt thành "$ ProjectDir/Properties/Test". Bằng cách này chúng ta có thể có các chuỗi kết nối cơ sở dữ liệu cho cơ sở dữ liệu dev/test/prod được cấu hình sẵn và không phải kiểm tra/trong tệp thuộc tính mỗi khi chúng ta muốn xây dựng cho một môi trường khác. Quay lại đầu trang ||||
Điều này cũng có nghĩa là chúng tôi có thể triển khai chính xác cùng một tệp .war/.ear để Kiểm tra và Prod mà không cần xây dựng lại. Bất kỳ thuộc tính nào không được khai báo trong tệp thuộc tính mà chúng ta đã xử lý theo cách tương tự bằng cách sử dụng cùng tên JNDI trong mỗi môi trường nhưng sử dụng các giá trị cụ thể cho môi trường đó.
Nguồn
2009-07-21 14:21:49
Những phiếu giảm giá bằng lái xe đó thực sự gây phiền toái. Nếu bạn đang bỏ phiếu cho một người nào đó, hãy can đảm và để lại một bình luận tại sao. Điều đó tăng gấp đôi khi bạn nghĩ rằng tôi đã nói điều gì sai trong câu trả lời của tôi - làm cách nào khác mà mọi người sẽ học? – ChssPly76
Tôi không bỏ phiếu nhưng tôi không đồng ý với bạn. Các tài nguyên như nguồn dữ liệu JDBC và phiên thư không bao giờ được xác định trong chính bản thân WAR. Các tham số kết nối cơ sở dữ liệu là các thuộc tính của môi trường, không phải của ứng dụng. Người ta có thể triển khai WAR trong môi trường thử nghiệm trước khi nó đi vào sản xuất. –
Tôi đồng ý với Maurice nhưng tôi nghĩ rằng ChssPly76 đáng để bỏ phiếu vì anh ta đang đưa ra câu trả lời cho câu hỏi. IIRC Bea Weblogic có một "proxy JNDI" cho phép tạo một tham chiếu JNDI trỏ đến tài nguyên JNDI khác – ATorras