lko*_*lko 7 java sql-server hibernate jtds sql-server-2012
我有一个Java Hibernate项目配置,它与SQL Server 2008 R2一起使用,现在有了新的OS 8.1(从7开始)和SQL Server 2012(express),我无法连接到SQL服务器.
因为它适用于2008 R2 ,所以/应该在语法上正确的相关配置:
datasource.properties
jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://localhost:1433/dbname;instance=SQLEXPRESS
jdbc.username=auser
jdbc.password=xyz
Run Code Online (Sandbox Code Playgroud)
我试过org.hibernate.dialect.SQLServerDialect在2008 R2工作的两种方言.
hibernate.hbm2ddl.auto=create-drop
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
#hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
hibernate.show_sql=true
Run Code Online (Sandbox Code Playgroud)
springConfiguration.xml
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
Run Code Online (Sandbox Code Playgroud)
SQL Server 2012安装了混合模式身份验证,SQL Server Management Studio连接没有问题(有或没有实例名称).
我已经更新了SQL Server Network Configurationfor SQLEXPRESS.
SQLEXPRESS的协议:
TCP/IP Enabled
以及TCP/IP Properties - TCP Port到1433年的所有.
我试过禁用Windows防火墙只是为了测试它是否在路上,但它会导致相同的错误.
我最终添加了防火墙规则,并按照这个优秀的配置SQL Express 2012中的一些步骤来接受远程连接文章.
错误消息:
Caused by: java.lang.AbstractMethodError
at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
Run Code Online (Sandbox Code Playgroud)
acd*_*ior 23
您的问题是jTDS不支持默认情况下DBCP2验证连接的方式(我假设您使用DBCP2 <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">).请参阅以下解决方案.
通常错误堆栈跟踪如下所示:
Caused by: java.lang.AbstractMethodError
at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:913)
Run Code Online (Sandbox Code Playgroud)
但是,问题与SQL Server版本无关,而与使用的DBCP(Tomcat)版本(或项目部署到的Tomcat服务器版本)无关.
一旦我使用jTDS 1.3.1并且该项目在Tomcat7下工作正常(并且连接到SQLServer 2012).当我改为Tomcat 8时,出现了这个错误.
正如jTDS论坛中暗示的那样,原因是:
java.sql.Connection.isValid(int)以验证连接.isValid(),因此jTDS驱动程序不能与DBCP 2一起使用,除非......validationQuery参数,这将使DBCP不会调用.isValid()以测试连接的有效性.因此,解决方法是设置validationQuery参数,这将使DBCP2不调用.isValid()以测试连接的有效性.这是如何做:
添加validationQuery="select 1"到<Resource>连接池的Tomcat 标记,通常在META-INF/context.xml您的应用程序中或conf/server.xml:
<Resource ... validationQuery="select 1" />
Run Code Online (Sandbox Code Playgroud)
通过Spring使用DBCP2时,解决方案就是:
<bean id="..." ...>
...
<property name="validationQuery" value="select 1" />
</bean>
Run Code Online (Sandbox Code Playgroud)
dataSource.setValidationQuery("select 1");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15454 次 |
| 最近记录: |