为啥@jdbc 查询因连接超时而失败?

Posted

技术标签:

【中文标题】为啥@jdbc 查询因连接超时而失败?【英文标题】:Why @jdbc query fails with connection timeout?为什么@jdbc 查询因连接超时而失败? 【发布时间】:2016-03-07 22:07:09 【问题描述】:

这是我在 DB2 表中插入行的代码:

for(i=0; i<1000000; i++)
    var myData = 
        USERNAME:   "user1",
        SOMEID:     i
    ;
    @JdbcInsert("db2", "MYTABLE", myData);
 

在某些时候它会因为这个错误而失败:

Error while executing javascript action expression
Script interpreter error, line=211, col=22: Error while executing function '@JdbcInsert'
Error while creating connection
Time expired getting a connection (=10000 ms). Try again.

我发现没有办法控制 JDBC 驱动程序超时。我错了吗? 或者我应该放类似的东西

java.lang.Thread.sleep(1000);

在每个@JdbcInsert 语句之前?

【问题讨论】:

我认为你可以更改服务器超时时间。 但是,10 秒应该足以创建连接,在大多数情况下应该会快得多。 【参考方案1】:

为什么添加Thread.sleep(1000) 可以解决您的问题?这里的问题是您希望将 1,000,000 条记录插入到 DB2 中,连接超时为 10 秒。

您需要:A) 增加连接超时时间或 B) 一次插入更少的记录(即插入 10k 或 100k 条记录然后获得新连接)

显然 A 听起来是这里最好的解决方案,因为 B 只是增加了获得额外连接的更多开销。

【讨论】:

我没有建立任何连接。只有一个 JavaScript 命令 @Jdbcinsert 可以插入一条记录。它不是纯 Java,您可以控制一切。如果我可以一次插入多条记录,问题将得到解决。但是这个问题仍然悬而未决***.com/questions/23768736/… 对,如果您使用选项 B,您将不得不使用除 @Jdbcinsert 之外的其他机制(即更细粒度的东西,实际上允许您控制连接)【参考方案2】:

.jdbc 文件有超时参数。请参阅 Ext Lib 书 https://books.google.com/books?id=4DIXQKQNoSQC&pg=PA408&lpg=PA408&dq=xpages+jdbc+file+timeout&source=bl&ots=YJXuvWUJf0&sig=1bD_chX0IkEtSPvkfaSfZqJlSvk&hl=en&sa=X&ved=0ahUKEwjsvI7cobHLAhUG92MKHcmNBCUQ6AEILTAD#v=onepage&q=xpages%20jdbc%20file%20timeout&f=false

【讨论】:

以上是关于为啥@jdbc 查询因连接超时而失败?的主要内容,如果未能解决你的问题,请参考以下文章

com.microsoft.sqlserver.jdbc.SQLServerException:连接超时(读取失败)

Druid连接池 查询慢 超时

为啥我登陆的时候老是显示网络连接超时?

Presto worker 宕机时查询超时

Hive JDBC 连接超时

请教ThinkPHP为啥会这么容易数据库查询超时