2012-12-24 19 views
9

Tôi tự hỏi điều nào sau đây là cách tiếp cận ưa thích?Khi nào nên sử dụng biến môi trường so với các thuộc tính hệ thống?

Chúng ta có thể thiết lập những điều như APP_HOME=/path/to/file (export trong .profile hoặc một cái gì đó dọc theo những đường) và truy cập nó như System.getenv("APP_HOME")

Hoặc cách khác sử dụng tài sản như -DAPP_HOME=/path/to/file và truy cập nó như System.getProperty("APP_HOME")

Bây giờ .. hoặc một sẽ làm cho giá trị có sẵn cho các điểm ứng dụng, nhưng là một trong hai cách tiếp cận ưa thích? Tại sao? Khi nào?

+2

Tại sao một người được ưu tiên hơn người kia? IMO env vars nên được ghi đè bởi các tùy chọn được chỉ định thông qua -D, nhưng khác hơn thế, meh. –

+1

Vâng, chúng tôi có 2 lựa chọn để làm điều tương tự đúng không? Do đó câu hỏi – JAM

+0

Tại sao không sử dụng cả hai? Tìm kiếm các thuộc tính hệ thống cho khóa và nếu không có, hãy tìm kiếm môi trường. Chúng không thực sự giống nhau, vì nó yêu cầu giá trị phải được đặt rõ ràng cho ứng dụng và giá trị kia không được đặt rõ ràng. –

Trả lời

5

Nếu bạn đang sử dụng Java 1.3 hoặc 1.4 (và 1.2, IIRC), bạn nên sử dụng thuộc tính hệ thống, vì System.getenv không còn được dùng nữa. Nó đã được phục hồi trong Java 1.5. Báo cáo lỗi có liên quan có thể được tìm thấy here.

Bạn có thể sử dụng cả hai. Tìm kiếm các thuộc tính hệ thống cho khóa và nếu nó không có ở đó, hãy tìm kiếm môi trường. Điều này mang lại cho bạn tốt nhất của cả hai thế giới.

Những điều này thực sự không giống nhau: Yêu cầu giá trị phải được đặt rõ ràng và giá trị khác không được đặt rõ ràng. Ngoài ra, lưu ý rằng môi trường là một nơi thuận tiện để đặt một số chuỗi cho khả năng tương tác.

+1

Với báo trước rằng đó là 'System.getenv', không phải' getEnv'. –

+0

@DaveNewton: Cảm ơn bạn đã sửa. Sẽ sửa chữa. –

+0

Phương thức System.getenv() không nên được sử dụng để truy cập các biến môi trường vì không phải tất cả các nền tảng đều có hỗ trợ cho các biến môi trường. - Lý do được đưa ra bởi công cụ phân tích mã CodePro –

15

Các Javadoc cho System.getenv(String) địa chỉ câu hỏi này trực tiếp, saying:

Hệ thống tính biến môi trường đều ánh xạ khái niệm giữa tên và giá trị. Cả hai cơ chế đều có thể được sử dụng để chuyển thông tin do người dùng xác định tới quy trình Java . Biến môi trường có hiệu ứng toàn cầu hơn, vì chúng hiển thị cho tất cả các hậu duệ của quá trình xác định chúng, không chỉ là tiến trình con Java ngay lập tức. Chúng có thể có ngữ nghĩa khác nhau, chẳng hạn như trường hợp không nhạy cảm, trên các hệ điều hành khác nhau. Đối với những lý do này , các biến môi trường có nhiều khả năng có các tác dụng phụ không mong muốn. Tốt nhất là sử dụng các thuộc tính hệ thống nếu có thể. Biến môi trường nên được sử dụng khi một hiệu ứng toàn cầu là mong muốn hoặc khi một giao diện hệ thống bên ngoài yêu cầu biến môi trường (chẳng hạn như PATH).

(nhấn mạnh mỏ).

0

Hiện chưa thể nhận xét, vì vậy tôi sẽ thêm một vài điểm làm câu trả lời.

Tôi đồng ý với câu nói của javadoc "Cách tốt nhất là sử dụng các thuộc tính hệ thống nếu có thể", cũng theo cách của tôi trước đây để xem trang này ở đây các biến hệ thống Java được đóng gói bên trong JVM. Chúng không hiển thị với các tiến trình khác trên máy chủ, và do đó ít kết hợp với hệ thống máy chủ.

Ngoài ra, có nhiều giao diện để đặt biến môi trường toàn cục và do đó, có thể hơi phức tạp khi theo dõi tất cả các giá trị được sử dụng theo thời gian.

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