【问题标题】:Not using the hostname and port in jdbc url不使用 jdbc url 中的主机名和端口
【发布时间】:2015-08-18 06:28:35
【问题描述】:

我有一些应用程序通过 SpringJDBC 和普通 JDBC 连接到 Oracle 数据库。

JDBC URL 模式是 -

jdbc:oracle:thin:@hostname:portNumber/schemaName

我们正在尝试创建一个可以与应用程序相关的 TNS 条目。例如,如果有一个应用程序 StockTrade,那么架构名称将为 DBStockTrade。

但是开发者仍然需要知道用于构建 JDBC URL 的主机名和端口号,并且需要在架构名称更改时进行二进制更改。

有没有办法避免使用主机名和端口号,而只使用模式名称来连接数据库?这个想法是使用某种只包含模式名称的属性文件,并去掉其他细节。

【问题讨论】:

  • 为什么不使用 jndi 查找?
  • 这些客户端/服务器应用程序是否部署到大量客户端?还是将三层应用程序部署到数量相对较少的应用程序服务器上?您可以使用 Oracle Internet Directory (OID) 来集中存储所有 TNS 信息,并在应用程序中使用静态 TNS 别名。但这通常在有大量客户端应用程序的客户端/服务器世界中比在有少量相同配置的应用程序服务器的三层世界中更有意义。
  • 你能试试 jdbc url jdbc:oracle:thin:@hostname:portNumber:Database_Name 我正在以这种方式使用我的项目并且不会引起问题。
  • @ÖmerFarukKurt - 如何消除对主机名和端口的依赖?您只是使用 SID 而不是服务名称?
  • 将配置外部化到属性文件或 JNDI 中,您不需要进行“二进制更改”。

标签: java oracle jdbc


【解决方案1】:

对于问题:

每当架构名称更改时都需要进行二进制更改

我们可以简单地将 JDBC URL 放入配置文件中

那么每当架构名称改变时,我们只需要编辑配置文件,不需要二进制更改。

例如,将 JDBC URL 保存到 .properties 文件

# config.properties

jdbc_url=jdbc:oracle:thin:@hostname:portNumber/schemaName

在 Java 代码中:

String currentPath = this.getClass().getProtectionDomain().getCodeSource()
    .getLocation().toURI().getPath();
String configFile = currentPath + File.separator + "config.properties";
Properties prop = new Properties();
prop.load(new FileInputStream(configFile));
String jdbcUrl = prop.getProperty("jdbc_url")

所以我们可以使用jdbcUrl 连接到数据库

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 2012-07-18
    • 2011-05-04
    • 1970-01-01
    • 2012-03-20
    • 2018-09-20
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多