【问题标题】:Using external properties files in weblogic在 weblogic 中使用外部属性文件
【发布时间】:2009-08-07 17:17:35
【问题描述】:

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

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

谢谢,

【问题讨论】:

标签: java jakarta-ee properties weblogic classpath


【解决方案1】:

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

External properties file with Weblogic

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

【讨论】:

    【解决方案2】:

    我想通了,并让它按我期望的方式工作。首先,我确实尝试了上述建议。如果我在我的类路径中添加了一个文件夹,或者将属性文件放在我的类路径上的一个文件夹中,则文件中的 jar 被拾取,但不是属性文件。如果我把我的属性文件放在一个罐子里,然后把它们放在我的类路径上的一个文件夹中,一切正常。但是我不想每次进行更改时都将我的文件放入 jar 文件中。以下适用于我的环境。

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

    【讨论】:

      【解决方案3】:

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

      • %DOMAIN_HOME%\config\ 文件夹中创建一个文件夹。例如appConfig
      • 将您的自定义属性文件(比如config.properties)放在appConfig 目录/文件夹中。
      • 修改setDomainEnv.cmd (Windows) 以在类路径中包含appConfig,方法是将%DOMAIN_HOME%\config\appConfig 设置为EXT_POST_CLASSPATH(此变量已在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");
      

      希望这会有所帮助。

      【讨论】:

      • 如果是 linux 的 .sh 文件要改什么
      【解决方案4】:

      有一些方法可以从 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
      

      【讨论】:

      • 请为您的答案添加更多信息,例如代码示例。
      • 代码和详细说明在链接中。你的意思是它应该被张贴在这里?。
      【解决方案5】:

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

      【讨论】:

      • 我这样做了,我把文件放在一个添加到类路径的文件夹中,它没有拾取任何属性文件。然而,它正在拾取我放在同一目录中的 jar 文件。我不确定为什么没有拾取属性文件。
      【解决方案6】:

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

      【讨论】:

      • 我必须在某处激活此行为吗?我在 Windows XP 上运行了一个全新的 WebLogic 12c 开发安装,它没有从域目录中获取我的 logback.xml!
      【解决方案7】:

      虽然这可能需要一点额外的努力,但如果您在将文件放入 lib 目录之前将文件放入 JAR 中,那应该可以。

      【讨论】:

      • 我这样做了,我将新创建的 jar 文件(包含我的属性文件)放在类路径上定义的 lib 文件夹中。这行得通,我认为它会,但是当需要进行更改时必须对这些配置文件进行 jar/unjar 处理并不理想。这仅比在我的 ear 文件中包含属性文件好几个步骤。现在它可以工作,所以我会在寻找更好的解决方案的同时继续使用它。
      【解决方案8】:

      这是我的解决方案:

      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());
              }
      

      【讨论】:

      • 他正在尝试获取 domain_home 操作系统环境变量值,并假设那里存在一个属性文件夹,不幸的是我没有看到它在我的 jvm 中设置,但我确实看到 user.dir 设置为 /opt/ oracle/config/domains/abcd 其中 abcd 是我的域名
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2013-08-12
      • 2018-05-28
      • 2019-05-25
      • 2018-08-01
      相关资源
      最近更新 更多