2011-07-12 50 views
7

Tôi đang tìm cách tốt nhất để sử dụng tệp thuộc tính bên ngoài với một ứng dụng sẽ được triển khai trên máy chủ Weblogic 10.3. Tôi đọc một số bài viết trên trang web nhưng tôi không muốn mã hóa cứng đường dẫn đến tệp thuộc tính hoặc đặt tệp trong thư mục domains/mydomain.Tệp thuộc tính bên ngoài với Weblogic

Có cách nào năng động để làm điều này vì vậy khi ứng dụng được triển khai tệp thuộc tính cũng được cài đặt ví dụ dưới thư mục triển khai và đọc từ đó?

Rất cám ơn

Trả lời

5

Một cách khác mà không yêu cầu đặt các tập tin ở một nơi khác ứng dụng sẽ đọc nó là sử dụng Ghi đè tải tệp chung: http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/config.htm#i1066493

Điều này liên quan đến việc tạo thư mục sẽ là thư mục gốc của triển khai của bạn, hãy gọi nó là FooApplication có FooApplication.ear và FooWeb.war. Đây được gọi là Thư mục Cài đặt Ứng dụng. Ứng dụng của bạn nằm trong thư mục con của ứng dụng FooApplication/app cho dù đó là một kho lưu trữ (như .ear, .war, jar) hoặc cho dù đó là một phiên bản phát nổ của một trong các tệp lưu trữ đó. Kế hoạch triển khai tùy chọn của bạn (bạn phải có một kế hoạch để sử dụng tính năng này, có thể là một kế hoạch không thực hiện nhiều hơn việc chỉ định một phần tử và giá trị cấu hình gốc như được mô tả trong tài liệu) đi trong FooApplication/plan. Bạn có thể đặt các thuộc tính của bạn mà bạn muốn ghi đè lên các thuộc tính trong ứng dụng trong cấu trúc thư mục FooApplication/plan/AppFileOverrides. http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/deployunits.htm#sthref9

Khi mà phong cách của việc triển khai được thực hiện, bạn viết mã như thế này từ ứng dụng của bạn và nội dung của myApp.properties được đọc từ FooApplication/kế hoạch/AppFileOverrides/FooWeb.war/myApp.properties sẽ là thực tế tệp được đọc.

Properties myAppProps = new Properties(); 
InputStream iostream = 
Thread.currentThread().getContextClassLoader().getResourceAsStream("myCfg/myApp.properties"); 
myAppProps.load(iostream); 

Điều này được thực hiện bằng cách thêm trình nạp lớp vào ứng dụng của bạn như được giải thích trong tài liệu.Nó có vẻ tẻ nhạt để ban đầu cấu hình, nhưng nó là một tính năng trực tiếp đáp ứng các câu hỏi ban đầu và chỉ cho rằng ứng dụng cụ thể.

1

Approach # 1

Máy chủ cập nhật khởi động của bạn kịch bản để vượt qua bên dưới biến hệ thống để JVM (dưới đây là ví dụ về hệ điều hành Windows)

call "%DOMAIN_HOME%\bin\startWebLogic.cmd" "-Dcom.mycompany.myapp.EXTERNAL_CONFIG_PATH=/mycompany/myapp/config" %* 

Sử dụng biến này mà trỏ đến thư mục cấu hình của bạn, đọc cấu hình từ đó. Bạn sẽ cần phải thực hiện cài đặt này trên mỗi máy chủ mà bạn muốn triển khai ứng dụng của mình.

0

Cách tiếp cận # 2

Sử dụng WebLogic chia sẻ thư viện

http://download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/libraries.html

Thực hiện theo các bước dưới đây

  • trọn gói tất cả các cấu hình của bạn như JAR riêng biệt trong quá trình xây dựng
  • Triển khai cấu hình J AR như thư viện chia sẻ
  • tham khảo trên thư viện chia sẻ từ EAR của bạn/WAR
  • Triển khai EAR/WAR (Cấu hình sẽ có sẵn trong classpath)
+0

Làm thế nào để bạn triển khai cấu hình JAR như thư viện chia sẻ ngoại tuyến bằng cách tạo thuộc tính trong wlst/jython? – sloven

1

Khi bạn nói "Tôi đã đọc một số bài viết trên trang web nhưng tôi không muốn mã hóa đường dẫn đến tệp thuộc tính" Tôi giả sử bạn đang nói bạn không muốn mã hóa nó trong Mã Java. Nếu là như vậy, sau đó xin vui lòng xem dưới đây

trả lời ở đây:

Có nhiều cách để đọc tập tin thuộc tính trong Java từ WebLogic classpath

One (Thuộc tính tập tin nằm ở miền WebLogic): Thả các thuộc tính bên trong thư mục Domain. Bằng cách này, tệp thuộc tính được thêm vào đường dẫn lớp weblogic tự động và chúng ta có thể đọc từ Java bằng cách sử dụng resourceAsStream.

Hai (tệp thuộc tính từ vị trí do người dùng xác định): Lợi thế với phương pháp này là tệp thuộc tính có thể nằm bên ngoài tệp JAR hoặc EAR và có thể được sửa đổi thuận tiện.

package com.test; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Properties; 

public class PropertyFileExample { 

private static Properties prop; 

public static void myMethod() { 

InputStream is = null; 

try { 

prop = new Properties(); 

String propFilePath = System.getProperty(“propFileLocation“); 

InputStream iStream = PropertyFileExample.class.getClassLoader().getResourceAsStream(propFilePath); 

prop.load(iStream); 
prop.getProperty(“dbuser”); 

} catch (FileNotFoundException e) { 

e.printStackTrace(); 

} catch (IOException e) { 

e.printStackTrace(); 

} 

} 
} 

Trong setDomainEnv WebLogic (dưới bin), chúng tôi cần phải vượt qua vị trí của tập tin bất động sản như một đối số -D để JAVA_OPTIONS

bộ JAVA_OPTIONS =% JAVA_OPTIONS% -DpropFileLocation =/dev/file/thuộc tính/some.properties

Hy vọng điều đó sẽ hữu ích!

3

Bạn có thể đặt thư mục trên đường dẫn lớp và Đặt tệp thuộc tính tùy chỉnh của bạn trong thư mục/thư mục đó. Vì vậy, toàn bộ thư mục cùng với tệp thuộc tính sẽ có trên classpath. Để đặt thư mục trên đường dẫn lớp trong weblogic 10.3.x

  • Tạo thư mục trong thư mục %DOMAIN_HOME%\config\. ví dụ appConfig.
  • Đặt tệp thuộc tính tùy chỉnh của bạn (Giả sử config.properties) trong appConfig thư mục/thư mục.
  • Sửa đổi setDomainEnv.cmd (Windows) để bao gồm appConfig trong classpath bằng cách thiết lập %DOMAIN_HOME%\config\appConfig như giá trị cho EXT_POST_CLASSPATH (biến này đã được xác định trong file setDomainEnv.cmd) biến như sau:

    set EXT_POST_CLASSPATH=%EXT_POST_CLASSPATH%;%DOMAIN_HOME%\config\appConfig 
    

Bạn có thể truy cập tệp đó trong mã java của bạn như sau:

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream ("config.properties"); 
    Properties prop = new Properties(); 
    prop.load(inputStream); 
    String value = prop.getProperty("key"); 

Hy vọng điều này sẽ hữu ích.

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