我有一个属性文件.properties,我可以在独立的Java类中加载该文件,如下所示:
Properties props = new Properties();
try {
FileInputStream fis =
new FileInputStream("D:\\Examples\\Simple\\src\\properties.xml");
props.loadFromXML(fis);
// props.list(System.out);
path = props.getProperty("path");
System.out.println("\nThe path property: "
+ props.getProperty("path"));
props.load(new FileInputStream(path));
filePath = props.getProperty("path");
System.out.println(filePath);
}
catch (IOException e) {
e.printStackTrace();
}
现在我需要实现允许我使用Weblogic Server加载属性文件的逻辑。因此,基本上任何时候我在.proprties文件中更改任何内容我不需要每次都构建应用程序,它可以与服务器集成。我正在使用Jdeveloper和Weblogic Server 10.3。如何使用基于服务器的java文件设置Property文件?
答案 0 :(得分:1)
在您的网络逻辑启动批处理文件中添加以下行
设置JAVA_OPTIONS =%JAVA_OPTIONS%-DconfigFile = file-path
在java程序中使用
检索文件路径String filePath = System.getProperty("configFile");
答案 1 :(得分:1)
如果严格遵守规范,则无法从app-server中加载文件。您需要使用类加载器加载它或将配置放在数据库中。
<强>类加载强>
类加载器是一个实用程序,负责将文件,URL或其他位置的字节码加载到内存中,java运行时可以使用它来创建类。因此,类加载器是java-vm和某种存储之间的接口。类加载器隐藏了如何访问资源的详细信息,从而使您可以加载资源,而不管它们是在文件中还是在其他位置。在应用程序服务器中,java希望您不要假设文件系统可用(您的类可以来自其他地方),并且仅通过类加载器加载资源。
但是当然,在堆栈的某个地方,类加载器确实访问了文件系统,所以问题是如何配置这个连接。这就是它变得毛茸茸的地方,因为在应用程序服务器中有几个类加载器(每个应用程序至少有一个),并且对它们的结构做出任何假设是不安全的。基本上有两种选择: - 你典型的应用程序打包在war或ear文件中,其中包含类和jar文件。您可以将.properties文件与这些类一起放入并通过“本地”类加载器(引号中的“本地”)加载它,因为这不是一个真正的术语,正如我所说,您不能在此做出任何假设。 - 因为这意味着每次要更改参数时都会重新打包war / ear-file,这并不比重新构建应用程序容易得多。另一种方法是使配置文件可用于启动时定义的系统范围的类加载器。这是由CLASSPATH环境变量配置的(通常在bat / cmd / sh-script中负责启动weblogic,如其他人所述)。因此,您要做的是:为配置文件创建一个目录,将其添加到启动脚本中的CLASSPATH,使用以下代码加载(未经测试):
// the classloader is referenced from a class, might as well use the current
ClassLoader cl = this.getClass().getClassLoader();
// getSystemResourceAsStream loads a resource using the default classloader,
// as opposed to using the classloader which "this" was loaded from
InputStream in = cl.getSystemResourceAsStream("com/me/config.properties");
您可以使用与文件相同的方式从此输入流加载属性。
<强>数据库强>
更强大的路径是将所有配置存储在数据库中,并使用JDBC通过DataStore加载它。但是,没有用于从数据库加载到Properties对象的默认API,因此您需要自己制作。
一个简单的设计就是拥有一个像这样的数据库表:
CREATE TABLE config (
key varchar(255) primary key,
value varchar(255)
)
将此解析为属性对象的代码留给读者一个练习(我想谷歌可以告诉你是否其他人做过类似的事情)
答案 2 :(得分:0)
如果您希望能够在不重建应用程序的情况下更改文件的位置,则可以外部化该位置,例如,通过将系统属性传递给weblogic服务器:
-Dmy.properties.location=D:/foo/bar.properties
如果您希望能够在运行时重新加载文件的内容,而无需重新启动服务器,则每次需要访问其中一个属性(慢速)或使用Apache commons配置时读取文件,例如,可以在更改时重新加载属性文件。