JavaEE7:如何从属性文件/文件系统上的任何文件加载JDBC连接信息

JavaEE7:如何从属性文件/文件系统上的任何文件加载JDBC连接信息,jdbc,java-ee-7,Jdbc,Java Ee 7,我正在开发一个JavaEE7应用程序。我正在使用Payara micro部署我的WAR文件。现在,我需要在我的应用程序中使用JDBC连接,但我需要将数据库IP/用户名/密码保留在以后可以更改的地方,而无需再次重新上传和部署WAR文件 有谁能告诉我如何才能做到这一点 编辑: 我找到了一个解决方案,所以: 但是,我正在寻找一个没有所有管道的解决方案。仅仅为了在某个外部文件中包含连接信息而继承数据源看起来有些过分 编辑: 另外,如果我可以为用户提供一个配置面板,用户可以在其中输入JDBC连接信息,这

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

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

编辑:

我找到了一个解决方案,所以:

但是,我正在寻找一个没有所有管道的解决方案。仅仅为了在某个外部文件中包含连接信息而继承数据源看起来有些过分

编辑:

另外,如果我可以为用户提供一个配置面板,用户可以在其中输入JDBC连接信息,这将非常有用。是否有一种方法可以在运行时更改该信息,从而有效地丢弃现有连接池并创建一个新的连接池?

使用java.utils.Properties和类路径中src文件夹中的单独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进行托管,那么您可以从路径WebContentRoot dir/WEB-INF/classes/

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


171.1以后版本中还支持使用语法${ENV=ENV.name}的环境变量其中env.name是环境变量名。

我如何使此属性文件可用于Java EE容器,以获得Java EE的所有连接池好处?在开发时,将属性文件放在类路径中,即源文件夹中,当应用程序运行时,此文件将与.class一起放在类路径中文件。在Payara本身中配置数据源,并使用JNDI进行查找,其他解决方案过于广泛,将涉及编写管道以查找外部配置文件等。这些都是现成的。