为什么DataSource
接口没有定义JDBC指定的标准数据源属性 - DataSource?
使用ds
类型的引用DataSource
,我无法设置如下属性:
public DbUtil(DataSource ds, String dbName, String port){
ds.setServerName(dbName);
ds.setPortNumber(port);
}
答案 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