Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Java Hibernate với SQL Server 2012 không hoạt động?

Sự cố của bạn là jTDS không hỗ trợ cách DBCP2 xác thực kết nối theo mặc định (Tôi giả sử bạn sử dụng DBCP2 từ <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> ). Xem giải pháp bên dưới.

Thông thường lỗi stacktrace như được hiển thị:

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)

Tuy nhiên, sự cố không liên quan đến phiên bản SQL Server mà là phiên bản DBCP (Tomcat) được sử dụng (hoặc phiên bản máy chủ Tomcat mà dự án được triển khai).

Khi tôi đang sử dụng jTDS 1.3.1 và dự án hoạt động tốt (và cũng được kết nối với SQLServer 2012) trong Tomcat7. Khi tôi đổi sang Tomcat 8, lỗi đó đã xuất hiện.

Lý do, như gợi ý trong diễn đàn jTDS , là:

  • ( Tomcat7 sử dụng DBCP 1 và Tomcat 8 sử dụng DBCP 2 )
  • Không giống như DBCP 1.x , DBCP 2 sẽ gọi java.sql.Connection.isValid(int) để xác thực kết nối
  • jTDS không triển khai .isValid() , vì vậy trình điều khiển jTDS sẽ không hoạt động với DBCP 2, trừ khi ...
  • ... trừ khi bạn đặt validationQuery tham số này sẽ làm cho DBCP không gọi .isValid() để kiểm tra tính hợp lệ của kết nối.

Giải pháp thay thế

Vì vậy, cách giải quyết là đặt validationQuery tham số , điều này sẽ làm cho DBCP2 không gọi .isValid() để kiểm tra tính hợp lệ của kết nối. Đây là cách thực hiện:

Trên Tomcat

Thêm validationQuery="select 1" tới Tomcat <Resource> của bạn cho nhóm kết nối, thường nằm trong META-INF/context.xml ứng dụng của bạn hoặc conf/server.xml :

<Resource ... validationQuery="select 1" />

Vào mùa xuân

Khi sử dụng DBCP2 thông qua Spring, giải pháp là:

<bean id="..." ...> 
    ...
    <property name="validationQuery" value="select 1" />
</bean>

Trên mã java đơn giản

dataSource.setValidationQuery("select 1"); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính tuổi của một người trong SQL

  2. Bảo trì cơ sở dữ liệu hệ thống máy chủ SQL

  3. Truy vấn SQL Server để tìm Giá trị CHI-SQUARE (Không hoạt động)

  4. Tên phiên bản mặc định của SQL Server Express

  5. Không gian được sử dụng bởi null trong cơ sở dữ liệu