【问题标题】:Java EE 7: How to load JDBC connection info from properties file / any file on file systemJava EE 7:如何从属性文件/文件系统上的任何文件加载 JDBC 连接信息
【发布时间】:2017-09-12 18:20:15
【问题描述】:

我正在开发一个Java EE 7 应用程序。我正在使用Payara micro 部署我的WAR 文件。现在,我的应用程序需要 JDBC 连接,但我需要将数据库 IP/用户名/密码保存在以后可以更改的位置,而无需重新上传和部署 WAR 文件。

谁能告诉我如何才能做到这一点?

编辑:

我在 SO 上遇到了一个解决方案: https://stackoverflow.com/a/6296375/1931698

但是,我正在寻找一种无需所有管道的解决方案。继承 DataSource 只是为了在某些外部文件中包含连接信息看起来有点矫枉过正。

编辑:

另外,如果我可以为用户提供一个配置面板,他/她可以在其中输入 JDBC 连接信息,那将非常有帮助。有没有办法在运行时更改该信息(有效地丢弃现有连接池并创建一个新连接池)?

【问题讨论】:

  • 在 Payara 本身中配置数据源,并使用 JNDI 进行查找,其他解决方案过于广泛,将涉及编写管道以查找外部配置文件等。你明白了的盒子。

标签: jdbc java-ee-7


【解决方案1】:

在您的 src 文件夹(在类路径中)中使用 java.utils.Properties 和一个单独的 myproperties.properties 文件。

Properties prop = null;
try { 
 prop = new Properties();
 InputStream inputStream  = getClass().getClassLoader()
                          .getResourceAsStream("myProperty.‌​properties");
  if (inputStream != null) { 
    prop.load(inputStream); 
  } 
} catch (IOException e) {
   errorLog.error("Property file not found in classpath: 
                           ClientChecking Class.");
}
String userName = prop.getProperty("USERNAME");  

myproperties.properties 文件必须包含:

USERNAME=user123 

如果您使用 Apache Tomcat 进行托管,那么您可以从路径 WebContent(Root dir)/WEB-INF/classes/

找到并编辑属性文件

【讨论】:

  • 我怎样才能使这个属性文件可用于 Java EE 容器,以便获得 Java EE 的所有连接池优势?
  • 开发时将您的属性文件放在类路径中(即源文件夹中),而当应用程序运行时,此文件将与您的 .class 文件一起位于类路径中。
【解决方案2】:

Payara Micro 应该允许使用语法 ${system.property.name} 在数据源定义中替换系统属性,您可以使用它来定义数据库用户名和密码以及连接字符串。

从 171.1 开始还支持使用语法 ${ENV=env.name} 的环境变量,其中 env.name 是环境变量名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2011-03-07
    • 2010-09-08
    • 2016-03-15
    • 2010-11-25
    相关资源
    最近更新 更多