Java DataSource.setLoginTimeout和DriverManager.setLoginTimeout全局?

Java DataSource.setLoginTimeout和DriverManager.setLoginTimeout全局?,java,database,jdbc,Java,Database,Jdbc,当我在数据源上设置登录超时时,它会做什么?它会在引擎盖下调用DriverManager.setLoginTimeout()吗?问这个问题是因为我很好奇是否真的可以设置每个数据源的登录超时。比如说,如果我有不同的DBMS要连接,这些DBs有不同的响应能力,那么期望连接超时有不同的余量是合理的,对吗 如果答案是肯定的,那么DriverManager.setLoginTimeot()方法是静态的有充分的理由吗?这个属性应该是根据数据源的(尽管据我所知,JDBC规范中没有明确提到这一点)。某些驱动程序的

当我在数据源上设置登录超时时,它会做什么?它会在引擎盖下调用DriverManager.setLoginTimeout()吗?问这个问题是因为我很好奇是否真的可以设置每个数据源的登录超时。比如说,如果我有不同的DBMS要连接,这些DBs有不同的响应能力,那么期望连接超时有不同的余量是合理的,对吗


如果答案是肯定的,那么DriverManager.setLoginTimeot()方法是静态的有充分的理由吗?

这个属性应该是根据
数据源的(尽管据我所知,JDBC规范中没有明确提到这一点)。某些驱动程序的数据源实现在创建连接时甚至不使用DriverManager

但是请注意,驱动程序需要显式使用在DriverManager上设置的值,因为DriverManager本身对该值不做任何处理(存储它除外)。例如,如果JDBC url、属性对象或数据源属性中未配置显式超时,则PostgreSQL驱动程序仅使用DriverManager值

之所以使用
DriverManager.setLoginTimeout()
,是因为您无法控制DriverManager(*)实际使用的驱动程序,因此控制它的唯一方法是通过DriverManager


(*)当然,除了您添加到类路径的驱动程序之外(以及在Java 5或更早版本中:您显式加载的驱动程序)。

谢谢。我一直在谷歌上搜索,试图找到合适的语法来为oracle和sql server连接指定url上的loginTimeout属性,但一直没有找到。你会碰巧有一个指针吗?好吧,根据驱动程序支持的
LoginTimeout
as属性和相同的。顺便说一句,我花了几秒钟的时间去谷歌。谢谢。我想我的问题是如何将这些名称-值对链接到url?这些文件对此并不清楚。我只是在我的url后面加上“LoginTimeout=10”吗?假设我的当前url是“jdbc:oracle:thin:@DB_INSTANCE”,我是否要将其更改为“jdbc:oracle:thin:@DB_INSTANCE;LoginTimeout=10”?再次感谢。对不起,我还是不知道怎么做。如果我将url设置为jdbc:oracle:thin:@MyDBTnsname&loginTimeout=10,它将发出消息“无法解析连接标识符”MyDBTnsname@loginTimeout=10“不是100%确定Oracle JDBC URL,但通常使用
将JDBC属性与URL的其余部分分开,因此这将是:
JDBC:Oracle:thin:@MyDBTnsname?loginTimeout=10
(使用
&
分隔更多属性。另外,您需要使用接受
属性
对象的方法,并将驱动程序属性放入该
属性
对象中。