tôi đã nhận lỗi này từ mã sản xuất:sinh sản com.mysql.jdbc.exceptions.jdbc4.CommunicationsException với một thiết lập của mùa xuân, hibernate và C3P0
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Gói tin cuối cùng đã nhận được từ máy chủ là36940 giây trước. Gói cuối cùng được gửi thành công đến máy chủ là 36940 giây trước, dài hơn máy chủ giá trị được định cấu hình là 'wait_timeout'. Bạn nên cân nhắc hoặc hết hạn và/hoặc kết nối thử nghiệm hiệu lực trước khi sử dụng trong ứng dụng của bạn, tăng máy chủ cấu hình giá trị cho timeouts khách hàng, hoặc sử dụng Connector/J sở hữu kết nối 'autoReconnect = true' để tránh này vấn đề.
Và bây giờ tôi đang cố gắng tái tạo sự cố cục bộ và khắc phục sự cố đó. Tôi thiết lập bối cảnh mùa xuân như sau:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://localhost:3306/test?userUnicode=yes&characterEncoding=UTF-8&"
p:idleConnectionTestPeriod="120" p:initialPoolSize="1" p:maxIdleTime="1800"
p:maxPoolSize="1" p:minPoolSize="1" p:checkoutTimeout="1000"
/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<value>
hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.default_schema=platform_server_original
hibernate.show_sql=false
</value>
</property>
<property name="mappingResources">
<list>
<value>sometables.hbm.xml</value>
</list>
</property>
</bean>
Sau đó tôi đặt wait_timeout mysql của tôi đến 10 giây, sau đó chạy thử nghiệm của tôi, mà về cơ bản là mở một kết nối, làm một truy vấn, đóng nó, vì vậy nó trở lại hồ bơi , sau đó ngủ thread trong 15 giây, và sau đó mở lại kết nối, và thực hiện truy vấn một lần nữa, vì vậy nó sẽ phá vỡ. Tuy nhiên, tôi nhận được một lỗi tương tự chỉ:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Truyền thông liên kết thất bại
gói cuối gửi đến máy chủ là 16 ms trước.
Vì vậy, tôi tự hỏi hai lỗi này giống nhau hay chúng khác nhau? Tôi đã làm một số nghiên cứu, và có vẻ như cả hai lỗi đều đi xuống cùng một giải pháp: sử dụng thuộc tính "testConnectionOnCheckout = true". Tuy nhiên, theo tài liệu c3p0, đây là một chi phiếu rất tốn kém. Nó khuyên bạn nên sử dụng "idleConnectionTestPeriod", nhưng tôi đã thiết lập nó đến 120 giây. Tôi nên sử dụng giá trị nào để có thể xác minh đúng kết nối không hoạt động?
Vì vậy, về cơ bản, tôi hỏi hai điều: 1. làm cách nào để tạo lại lỗi tôi nhận được trong mã sản xuất? 2. làm cách nào để khắc phục sự cố?
Cảm ơn!
lỗi ban đầu của bạn từ khâu sản xuất đang nói về một khoảng thời gian hơn 10 giờ và đang xảy ra khi một kết nối được check-out khi hệ thống đầu tiên được sử dụng vào buổi sáng? Bạn không thể chỉ đặt kích thước hồ bơi tối thiểu thành 0 hoặc phơi bày hồ bơi qua JXB và xả nó trước khi bắt đầu ngày làm việc? – SteveD
@fei - bạn đã giải quyết vấn đề này chưa? Hãy quan tâm để biết kết quả là gì. –
Tôi đã sử dụng 2 thuộc tính sau: testConnectionOnCheckout = "true" preferredTestQuery = "select 1" Không phải giải pháp tối ưu nhất, nhưng nó giải quyết được vấn đề ít nhất. – fei