2008-10-11 31 views
15

nơi nào bạn lưu trữ riêng cụ thểthời gian chạy dữ liệu cấu hình cho ứng dụng J2SE?Cách thích hợp để lưu trữ dữ liệu conf của ứng dụng trong Java là gì?

(Ví dụ, C: \ Users \ USERNAME \ AppData \ Roaming \ trên Windows và /home/username trên Unix)

Làm thế nào để bạn có được những địa điểm trong hệ thống tập tin trong nền tảng độc lập đường?

Cảm ơn lời khuyên của bạn!

Trả lời

13

đó phụ thuộc vào loại lại ứng dụng J2SE:

  • tập tin JAR J2SE thực thi (rất đơn giản): sử dụng user.home System property để tìm nhà-dir. Sau đó, hãy tạo một phân mục phù hợp (ví dụ: PGP, SVN, ... do)
  • Java Web Start cung cấp các phương pháp được bao gồm rất tốt cho các thuộc tính an toàn. Luôn có người dùng cụ thể
  • Cuối cùng RCP Eclipse: Ở đó bạn có khái niệm về không gian làm việc (cũng được bắt nguồn từ user.home) cho người dùng và cấu hình (không hoàn toàn chắc chắn cách truy cập vào tính năng phức tạp trong Vista) để sử dụng rộng rãi máy tính

Tất cả các cách tiếp cận này, khi được sử dụng cẩn thận - sử dụng đúng separatorChar - Hệ điều hành trung tính.

0

Đối với cấu hình cụ thể của người dùng, bạn có thể ghi tệp cấu hình vào thư mục được chỉ định bởi thuộc tính hệ thống "user.home". Sẽ chỉ làm việc trên máy đó tất nhiên.

5

Java có thư viện cụ thể để thực hiện việc này trong java.util.prefs.Preferences.

Preferences userPrefs = Preferences.getUserNodeForPackage(MyClass.class); // Gets user preferences node for MyClass 
Preferences systemPrefs = Preferences.getSysteNodeForPackage(MyClass.class); // Gets system preferences node for MyClass 
Preferences userPrefsRoot = Preferences.getUserRoot(); // Gets user preferences root node 
Preferences systemPrefsRoot = Preferences.getSystemRoot(); // Gets system preferences root node 
25

lần thứ nhất về định dạng:

  1. Java property files là tốt cho cặp khóa/giá trị (cũng tự động xử lý các ký tự xuống dòng). Một mức độ cấu trúc là có thể bằng cách sử dụng 'dấu chấm'. Nhược điểm là cấu trúc không cho phép bạn dễ dàng liệt kê các thực thể cấu hình mức cao nhất và làm việc theo cách phân tích. Được sử dụng tốt nhất cho một tập hợp nhỏ các cài đặt cụ thể cho môi trường có thể chỉnh sửa được
  2. Các tệp XML - thường được sử dụng để cấu hình phức tạp hơn các khung công tác Java khác nhau (đặc biệt là J2EE và Spring). Tôi sẽ khuyên bạn ít nhất là tìm hiểu về Spring - nó chứa nhiều ý tưởng đáng biết ngay cả khi bạn quyết định không sử dụng nó. Nếu bạn quyết định cuộn cấu hình XML của riêng mình, tôi khuyên bạn nên sử dụng XStream với các tùy chọn tuần tự hóa tùy chỉnh hoặc nếu bạn chỉ cần phân tích cú pháp một số XML, hãy xem XOM. BTW Spring cũng cho phép bạn cắm ngôn ngữ cấu hình XML tùy chỉnh của bạn, nhưng nó là relatively complex task. Cấu hình XML được sử dụng tốt nhất cho cấu hình 'nội bộ' phức tạp hơn mà người dùng cuối không nhìn thấy hoặc điều chỉnh.
  3. Đối tượng Java được tuần tự hóa - một cách nhanh chóng và dễ dàng để duy trì trạng thái của đối tượng và khôi phục sau này. Hữu ích nếu bạn viết một GUI cấu hình và bạn không quan tâm nếu cấu hình là con người có thể đọc được. Cẩn thận với compatibility issues khi bạn phát triển các lớp học.
  4. Tùy chọn - được giới thiệu trong Java 1.4, cho phép bạn lưu trữ văn bản, số, mảng byte và các nguyên bản khác trong lưu trữ theo nền tảng cụ thể. Trên Windows, đó là đăng ký (bạn có thể chọn giữa /Phần mềm/JavaSoft/Prefs dưới HKLM hoặc HKCU). Trong Unix, cùng một API tạo các tệp trong nhà người dùng hoặc /etc. Mỗi hive prefs có thể được xuất và nhập dưới dạng tệp XML. Bạn có thể chỉ định thực hiện tùy chỉnh giao diện PreferencesFactory bằng cách đặt thuộc tính JVM "java.util.prefs.PreferencesFactory" thành tên lớp triển khai của bạn.

Nói chung, sử dụng API prefs có thể là một điều tốt hoặc xấu dựa trên kịch bản ứng dụng của bạn.

  1. Nếu bạn dự định có nhiều phiên bản của cùng một mã chạy trên cùng một máy có cấu hình khác nhau thì sử dụng API tùy chọn là ý tưởng tồi.
  2. Nếu bạn định sử dụng ứng dụng trong môi trường bị hạn chế (tên miền Windows hoặc hộp Unix được quản lý chặt chẽ), bạn cần đảm bảo rằng bạn có quyền truy cập thích hợp vào các khóa/thư mục đăng ký cần thiết. Điều này đã khiến tôi ngạc nhiên hơn một lần.
  3. Hãy coi chừng từ các hồ sơ chuyển vùng (các bản sao trang chủ được sao chép) chúng tạo nên một số tình huống hài hước khi có nhiều hơn một máy đang hoạt động.
  4. Tùy chọn không rõ ràng như tệp cấu hình trong thư mục của ứng dụng. hầu hết các nhân viên hỗ trợ máy tính để bàn không mong đợi và không thích chúng.

Về bố cục tệp của tiền tố, nó lại phụ thuộc vào ứng dụng của bạn. Đề xuất chung là:

  1. Đóng gói hầu hết các tệp XML của bạn bên trong JAR của ứng dụng trong thư mục gốc hoặc dưới thư mục META-INF. Những tệp này sẽ là chỉ đọc và được coi là riêng tư cho ứng dụng.
  2. Đặt cấu hình có thể sửa đổi người dùng theo $ APP_HOME/conf. Nó phải bao gồm chủ yếu các tệp thuộc tính và đôi khi là một tệp XML đơn giản (xStream serialization). Các tệp này được tinh chỉnh như là một phần của quá trình cài đặt và thường không phải là người dùng có thể sử dụng được.
  3. Theo người dùng nhà, trong một thư mục dấu chấm (tức là '~/.myapplication') lưu trữ bất kỳ cấu hình người dùng nào. Cấu hình người dùng có thể ghi đè cấu hình người dùng trong thư mục conf của ứng dụng. Bất kỳ thay đổi nào được thực hiện từ bên trong ứng dụng đều có tại đây (xem thêm điểm tiếp theo).
  4. Bạn cũng có thể sử dụng thư mục $ APP_HOME/var để lưu trữ bất kỳ dữ liệu có thể thay đổi nào khác cụ thể cho cá thể ứng dụng này (trái ngược với người dùng). Một ưu điểm khác của phương pháp này là bạn có thể di chuyển và sao lưu toàn bộ ứng dụng và cấu hình của nó bằng bản sao đơn giản của một thư mục.

Điều này minh họa một số kỹ thuật tiêu chuẩn để quản lý cấu hình.Bạn có thể thực hiện chúng sử dụng các thư viện và các công cụ khác nhau, bắt đầu từ nguyên JRE, thêm mùa xuân/Guice hoặc đi cho một container J2EE đầy đủ (có thể với mùa xuân nhúng)

cách tiếp cận khác để quản lý cấu hình là:

  1. Sử dụng multiple base directories để chạy nhiều phiên bản của ứng dụng bằng các cấu hình khác nhau.
  2. Sử dụng lightweightregistries để quản lý cấu hình tập trung
  3. Giá trị cụ thể của máy chủ lưu trữ cấu hình cho mỗi máy được rsync-ed hàng đêm cho tất cả các máy chủ sản xuất. Ứng dụng sử dụng một cấu hình templated và chọn từ CMDB trong suốt thời gian chạy dựa trên tên máy chủ hiện tại.
0

tôi sử dụng này

 

    String pathFile = null; 
    if(OS.contains("win")){ 
     pathFile = System.getenv("AppData"); 
    }else{ 
     pathFile = System.getProperty("user.home"); 
    } 

tôi lưu các thiết lập của ứng dụng của tôi ở đây C: \ Users \ USERNAME \ AppData \ trên cửa sổ user.home (/ home/USERNAME) trên các đầu mối khác

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