DataSource属性

时间:2012-05-21 14:44:35

标签: java jdbc

为什么DataSource接口没有定义JDBC指定的标准数据源属性 - DataSource

使用ds类型的引用DataSource,我无法设置如下属性:

public DbUtil(DataSource ds, String dbName, String port){
  ds.setServerName(dbName);
  ds.setPortNumber(port); 
}

3 个答案:

答案 0 :(得分:3)

因为你不是假设传递这些值,而不像普通的DriverManager。通常在容器上配置DataSource,并且只使用JNDI进行查找。

如果你再次开始传递这些值,它就会破坏具有可配置数据源的全部意义。

以下是API的引用。

  

DataSource接口由驱动程序供应商实现。

     

DataSource对象具有可在以下时修改的属性   必要。例如,如果将数据源移动到其他位置   服务器,可以更改服务器的属性。好处是   因为数据源的属性可以更改,任何代码   访问该数据源不需要更改。

答案 1 :(得分:1)

因为手动设置数据源上的数据库名称或数据库配置没有意义,如果允许,它将在运行时中断数据源功能,而使用Oracle时您想要更改服务器详细信息并且您将启动指向Sybase。

这些参数应该提供给容器,你可以在运行时使用它们,允许机制覆盖或更改这些细节会太危险。

这里要注意的另一件事是,如果这些属性成为合同的一部分,那么调用者的信息就太多了,这与封装有关。

您的代码无需了解这些详细信息及其配置部分。

答案 2 :(得分:1)

JDBC 4.1规范的 9.4.1 数据源属性部分回答了您的问题:

  

JDBC客户端无法直接访问DataSource属性。   通过在实现上定义访问方法来加强此设计   类而不是应用程序使用的公共DataSource接口。   此外,客户端操作的对象可以只是一个包装器   实现DataSource接口。用于的setter和getter方法   属性不需要暴露给客户。

此外,驱动程序实现者可以添加特定于其数据库的setter / getter