Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Weblogic Server使用java访问属性文件?_Java_Weblogic 10.x - Fatal编程技术网

如何使用Weblogic Server使用java访问属性文件?

如何使用Weblogic Server使用java访问属性文件?,java,weblogic-10.x,Java,Weblogic 10.x,我有一个属性文件.properties,我可以在独立Java类中加载该文件,如下所示: Properties props = new Properties(); try { FileInputStream fis = new FileInputStream("D:\\Examples\\Simple\\src\\properties.xml"); props.loadFromXML(fis); // props.list(System.out);

我有一个属性文件.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();
}

现在我需要实现允许我使用WebLogicServer加载属性文件的逻辑。所以基本上,只要我在.properties文件中更改任何内容,我就不需要每次都构建应用程序,而且它可以与服务器集成。我使用的是Jdeveloper和weblogicserver10.3。如何使用基于服务器的java文件设置属性文件?

在web逻辑启动批处理文件中添加以下行

设置JAVA\u选项=%JAVA\u选项%-DconfigFile=文件路径

在java程序中,使用

String filePath = System.getProperty("configFile");

如果严格按照规范操作,则无法从应用服务器中加载文件。您需要使用类加载器加载它,或者将配置放入数据库中

类加载器

classloader是一个实用工具,负责将字节码从文件、URL或其他位置加载到内存中,java运行时可以使用它来创建类。因此,类加载器是JavaVM和某种存储之间的接口。类加载器隐藏了如何访问资源的详细信息,从而使您能够独立于资源是在文件中还是在其他位置加载资源。在应用服务器中,java希望您不要假设文件系统可用(您的类可以来自其他地方),而只通过类加载器加载资源

但是,当然,在堆栈的某个地方,类加载器确实访问文件系统,所以问题是如何配置这个连接。这就是问题的症结所在,因为在应用程序服务器中有几个类加载器(每个应用程序至少有一个),对这些类加载器的结构进行任何假设都是不安全的。基本上有两种选择: -您可以将应用程序打包在包含类和jar文件的war或ear文件中。您可以将.properties文件与这些类放在一起,并通过“local”类加载器加载它(引号中的“local”,因为这不是一个真正的术语,正如我所说的,您不能在这里做出任何假设)。 -因为这意味着每次要更改参数时都要重新打包war/ear文件,所以这实际上并不比重新构建应用程序容易多少。另一种方法是使您的配置文件可用于启动时定义的系统范围的类加载器。这是由CLASSPATH环境变量配置的(通常在其他人提到的负责启动weblogic的bat/cmd/sh脚本中)。因此,您要做的是:为配置文件创建一个目录,将其添加到启动脚本中的类路径,用以下代码加载(未测试):

您可以从该输入流加载属性,方法与加载文件相同

数据库

一个更健壮的方法是将所有配置存储在数据库中,并使用JDBC通过数据存储加载它。但是,没有用于从数据库加载到Properties对象的默认API,因此您需要自己创建

一个简单的设计就是有这样一个数据库表:

CREATE TABLE config (
    key varchar(255) primary key,
    value varchar(255)
)

将其解析为properties对象的代码留给读者作为练习(我想google可以告诉您是否有其他人做过类似的事情)

如果您希望能够在不重建应用程序的情况下更改文件的位置,然后将位置外部化,例如,通过将系统属性传递给weblogic服务器:

-Dmy.properties.location=D:/foo/bar.properties

如果您希望能够在运行时重新加载文件内容,而无需重新启动服务器,那么每次需要访问文件的某个属性时都会读取该文件(慢速),或者使用Apache commons配置,例如,当属性文件发生更改时,该配置可以重新加载属性文件。

为什么在WebLogic中的工作方式会有所不同?Java代码就是Java代码。要加载属性文件,我现在使用的是Fileinput stream,因此如果有一天我更改了该属性文件的位置,或者可能更改了.properties文件的内容,那么使用FileInputStream不是一个好方法。当然,Java代码是Java代码,但是会有一些方法将.properties文件放入Weblogic服务器配置中,这样我可以在与Weblogic服务器集成时加载属性文件。我不需要指定相对路径。此启动批处理文件在Weblogic 10.3中的位置?每次属性文件更改时,您都必须重新启动服务器。如何启动Weblogic服务器?。您必须使用某个批处理(.bat)文件,对吗?是的,我转到C:\Oracle\Middleware\user\u projects\domains\SOA\u Domain\startweblog.cmd并运行此文件。你的意思与.bat文件相同?编辑该文件并添加设置JAVA_选项=%JAVA_选项%-DconfigFile=文件路径我是Weblogic服务器和服务器端文件阅读新手,所以如果你能详细说明你想说的话,当然可以。
-Dmy.properties.location=D:/foo/bar.properties