我正在寻找将外部属性文件与将要部署在Weblogic 10.3服务器上的应用程序一起使用的最佳方法。我在网站上阅读了很多文章,但我不想硬编码属性文件的路径或将文件放在domains / mydomain文件夹中。
有没有动态的方法这样做,所以在部署应用程序时,属性文件也会安装在例如deployments文件夹下并从那里读取?
非常感谢
答案 0 :(得分:5)
另一个不需要将文件放在其他应用程序将读取它的位置的替代方法是使用通用文件加载覆盖: http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/config.htm#i1066493
这涉及创建一个目录,该目录将作为部署的根目录,让我们称之为具有FooApplication.ear和FooWeb.war的FooApplication。这称为应用程序安装目录。您的应用程序进入FooApplication / app子目录,无论它是存档(如.ear,.war,jar)还是它是其中一个存档的爆炸版本。您的可选部署计划(您必须拥有一个使用此功能的计划,它可能是一个除了指定配置根元素和文档中所述的值之外没有做太多的计划)在FooApplication / plan中。您可以在FooApplication / plan / AppFileOverrides目录结构中将要覆盖的属性放在应用程序中。 http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/deployunits.htm#sthref9
完成这种部署方式后,您可以从应用程序中编写这样的代码,并从FooApplication / plan / AppFileOverrides / FooWeb.war / myApp.properties中读取myApp.properties的内容将是实际的文件。读入。
Properties myAppProps = new Properties();
InputStream iostream =
Thread.currentThread().getContextClassLoader().getResourceAsStream("myCfg/myApp.properties");
myAppProps.load(iostream);
这是通过在文档中解释的向应用程序添加类加载器来实现的。初始配置似乎很乏味,但它是一个直接满足原始问题的功能,仅适用于该特定应用。
答案 1 :(得分:3)
您可以在类路径上设置目录,并将自定义属性文件放在该文件夹/目录中。这样,整个目录和属性文件将在classpath上。 在weblogic 10.3.x中的类路径上设置目录
%DOMAIN_HOME%\config\
文件夹中创建一个文件夹。例如appConfig
。config.properties
)放在appConfig
目录/文件夹中。通过将setDomainEnv.cmd
设置为值appConfig
,修改%DOMAIN_HOME%\config\appConfig
(Windows)以在类路径中包含EXT_POST_CLASSPATH
(此变量已在{ {1}} file)变量如下:
setDomainEnv.cmd
您可以使用以下java代码访问该文件:
set EXT_POST_CLASSPATH=%EXT_POST_CLASSPATH%;%DOMAIN_HOME%\config\appConfig
希望这有帮助。
答案 2 :(得分:1)
方法#2
使用Weblogic共享库
http://download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/libraries.html
按照以下步骤
答案 3 :(得分:1)
当你说"我在网站上阅读了很多文章,但我不想硬编码属性文件的路径#34;我假设您说您不想在Java代码中对其进行硬编码。如果是这样,那么请看下面
在这里回答:
有很多方法可以从weblogic classpath
中读取Java中的属性文件一个(位于weblogic域中的属性文件):删除域目录中的属性文件。这样,属性文件就会自动添加到weblogic类路径中,我们可以使用resourceAsStream从Java中读取。
两个(来自用户定义位置的属性文件):这种方法的优点是属性文件可以驻留在JAR或EAR文件之外,并且可以方便地修改。
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();
}
}
}
在weblogic setDomainEnv(在bin下)我们需要将属性文件的位置作为-D参数传递给JAVA_OPTIONS
设置JAVA_OPTIONS =%JAVA_OPTIONS%-DpropFileLocation = / dev / file / properties / some.properties
希望它有所帮助!
答案 4 :(得分:0)
方法#1
更新服务器启动脚本,将下面的系统变量传递给JVM(下面是Windows操作系统上的示例)
call "%DOMAIN_HOME%\bin\startWebLogic.cmd" "-Dcom.mycompany.myapp.EXTERNAL_CONFIG_PATH=/mycompany/myapp/config" %*
使用指向配置目录的变量,从那里读取配置。您需要在要部署应用程序的每台服务器上进行此设置。