【发布时间】:2016-02-07 06:50:35
【问题描述】:
我一直在谷歌上搜索 JTDS (1.3.1) 的配置,以便与 HikariCP (2.4.3)、Spring (4.1.2) 和 MS SQL Server (2008) 一起使用,但找不到完整且有效的示例。
这是我所拥有的:
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="poolName" value="springHikariCP" />
<property name="connectionTestQuery" value="SELECT 1" />
<property name="dataSourceClassName" value="${jdbc.dataSourceClassName}" />
<property name="maximumPoolSize" value="${jdbc.maximumPoolSize}" />
<property name="minimumIdle" value="${jdbc.minimumIdle}" />
<property name="idleTimeout" value="${jdbc.idleTimeout}" />
....
<property name="dataSourceProperties">
<props>
....
</props>
</property>
</bean>
任何人都可以分享生产环境中使用的 JTDS 配置吗?
问候。
更新
我发现了这个 SO 帖子:
HikariCP hanging on getConnection
JTDS 似乎在使用 HikariCP 时遇到了问题。其实我也有这个问题。这是我对 JTDS 的完整配置:
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="poolName" value="springHikariCP" />
<property name="connectionTestQuery" value="${jdbc.connectionTestQuery}" />
<property name="dataSourceClassName" value="${jdbc.dataSourceClassName}" />
<property name="maximumPoolSize" value="${jdbc.maximumPoolSize}" />
<property name="minimumIdle" value="${jdbc.minimumIdle}" />
<property name="idleTimeout" value="${jdbc.idleTimeout}" />
<property name="connectionTimeout" value="${jdbc.connectionTimeout}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="dataSourceProperties">
<props>
<prop key="user">${jdbc.username}</prop>
<prop key="password">${jdbc.password}</prop>
<prop key="cacheMetaData">${jtds.cacheMetaData}</prop>
</props>
</property>
</bean>
这正是我发布问题的原因,我希望看到一个完整的例子。但是,在 HikariCP 的页面上,JTDS 被列为支持。我很困惑。
【问题讨论】:
-
如果您使用的是 SQL Server,我强烈建议您使用
cacheMetaData=true。如果您有包含大量行(数千行)的 ResultSet,我建议使用useCursors=true并根据需要在每个 Statement 上设置Statement.setFetchSize()(SQL Server 默认为一次 100 行)。 -
brettw,非常感谢您的意见!我确实使用 MS SQL Server。我忘了提。为什么不让你的回答成为一个完整的答案?我会选择它。另外我不知道如何添加数据库 URL。最好的。
-
brettw,在我的应用程序中,我总是通过 Spring Data 显示分页结果。在这种情况下,“我建议使用 useCursors=true 并在每个 Statement 上适当设置 Statement.setFetchSize()”是否仍然正确?最好的。