在weblogic中使用外部属性文件

问题描述 投票:17回答:8

我正在将我之前在JBOSS中部署的J2ee应用程序部署到Weblogic 10.3.1.0中。我遇到了外部属性文件的问题。在Jboss中我可以将属性文件放入$ JBOSS_HOME / server / default / conf中,然后将它们加载到系统类路径中,我可以毫无问题地访问它们。我能够将共享库放入$ MIDDLEWAREHOME / user_projects / domains / mydomain / lib中,并将它们加载到系统类路径中,没有任何问题,但我无法加载属性文件。

有谁知道如何在Weblogic中包含外部属性文件?

谢谢,

java java-ee properties weblogic classpath
8个回答
14
投票

我想出了这个,让它以我期望的方式运作。首先,我尝试了上述建议。如果我将一个文件夹添加到我的类路径中,或者将属性文件放在我的类路径上的文件夹中,则会拾取文件中的jar,但不会拾取属性文件。如果我将我的属性文件放在一个jar中,并将它们放在我的类路径上的一个文件夹中,一切正常。但是每次做出改变时我都不想让我的文件变成jar。以下是我的环境中的作品。

如果我将属性文件放在%WEBLOGIC_HOME%/ user_projects / domains / MYDOMAIN中,那么它们将被拾取,而不必放在jar文件中。


2
投票

在weblogic中,jar将从lib加载,非jar文件将从域文件夹中加载


2
投票

有一些方法可以从weblogic类路径中读取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);

    //Note that the propFilePath is a -Dparam defined below in the setDomainEnv
    prop.load(iStream);
    prop.getProperty(“dbuser”);

  } catch (FileNotFoundException e) {

    e.printStackTrace();

  } catch (IOException e) {

    e.printStackTrace();

  }
}
}

在weblogic setDomainEnv(在bin下)=>我们需要将属性文件的位置作为-D argument传递给JAVA_OPTIONS

set JAVA_OPTIONS=%JAVA_OPTIONS% -DpropFileLocation =/dev/file/properties/some.properties

1
投票

您可以在类路径上设置目录,并将自定义属性文件放在该文件夹/目录中。这样,整个目录和属性文件将在classpath上。在weblogic 10.3.x中的类路径上设置目录

  • %DOMAIN_HOME%\config\文件夹中创建一个文件夹。例如appConfig
  • 将您的自定义属性文件(假设config.properties)放在appConfig目录/文件夹中。
  • 通过将setDomainEnv.cmd设置为appConfig(此变量已在%DOMAIN_HOME%\config\appConfig文件中定义)变量,修改EXT_POST_CLASSPATH(Windows)以在类路径中包含setDomainEnv.cmd,如下所示: set EXT_POST_CLASSPATH=%EXT_POST_CLASSPATH%;%DOMAIN_HOME%\config\appConfig

您可以在java代码中访问该文件,如下所示:

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

希望这可以帮助。


0
投票

虽然这可能需要额外的努力,但如果您将文件放入JAR中,然后将它们放入lib目录中,那应该可行。


0
投票

您可以在域文件中查看setDomainEnv.cmd(Windows)或setDomainEnv.sh(Unix / Linux)脚本,并查看在域的CLASSPATH中添加的位置。然后只需选择一个文件夹并将属性文件放在那里,如果您想要属性文件的特定位置,只需编辑脚本即可。


0
投票

最灵活的方法是使用weblogic部署计划和通用文件加载覆盖

External properties file with Weblogic

http://docs.oracle.com/cd/E21764_01/web.1111/e13702/config.htm#DEPGD188


0
投票

这是我的解决方案:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        InputStream is = null;

        String urlExte = System.getenv("DOMAIN_HOME")+"/properties/SmsBalanceadoWS/";


        org.springframework.core.io.Resource resource = ctx.getResource( "file:"+urlExte+"/application.properties");
        try {
            is = resource.getInputStream();
        } catch (IOException e) {
            LOGGER.debug("ERROR"+ e.getMessage());
        }
© www.soinside.com 2019 - 2024. All rights reserved.