Tôi đã có một ứng dụng Spring mà tôi tin rằng sử dụng kết nối gộp nhóm DBCP để kết nối với cơ sở dữ liệu MySql. Tôi nói tin bởi vì đây không phải là khu vực tôi rất mạnh mẽ và tôi không tích cực nếu mọi thứ được thiết lập chính xác. Tôi không có vấn đề gì khi chạy ứng dụng và mọi thứ đều hoạt động tốt. Vấn đề xảy ra qua đêm. Các ứng dụng không được sử dụng nhiều và qua đêm nó dường như mất kết nối với MySql. Tôi nhìn vào nó và phát hiện ra MySql có một cửa sổ 8 giờ và sau đó nó ngắt kết nối hoặc bất cứ điều gì. Tôi ổn với điều này, nhưng khi người dùng cố đăng nhập vào buổi sáng, họ sẽ gặp lỗi như sau:Ứng dụng Spring mất kết nối với MySql sau 8 giờ. Cách cấu hình đúng cách?
Lỗi liên kết truyền thông. Gói tin cuối cùng đã nhận được thành công 60.000.000 từ trước. Gói cuối cùng đã được thiết lập thành công 15ms trước.
Đây là vấn đề. Tôi cần họ để có thể kết nối lại vào buổi sáng mà không gặp phải vấn đề này. Cách duy nhất tôi dường như có thể sửa chữa nó là bằng cách nảy máy chủ Tomcat. Từ việc nhìn vào nó, có vẻ như việc gộp nhóm DBCP sẽ có thể ngăn chặn điều này bằng cách nào đó nhưng tôi không thể tìm thấy một nguồn thông tin đáng tin cậy về cách cấu hình nó. Tôi hy vọng một người nào đó ở đây có thể cung cấp cho tôi một số thông tin chi tiết. Dưới đây là cấu hình hiện tại của tôi, tất cả được thực hiện trong một tập tin mùa xuân xml:
app-data.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com.vz.sts.domain" />
<context:component-scan base-package="com.vz.sts.persistence" />
<context:component-scan base-package="com.vz.sts.service" />
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/app" />
<property name="username" value="root" />
<property name="password" value="admin" />
<property name="initialSize" value="5" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="jdbcUserService" class="org.springframework.security.provisioning.JdbcUserDetailsManager">
<property name="dataSource" ref="dataSource"/>
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
<bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
<property name="userPropertyToUse" value="username" />
</bean>
<tx:annotation-driven />
</beans>
Tôi không chắc chắn những gì thuộc tính cụ thể tôi cần phải thêm vào để cho phép các ứng dụng để kết nối lại với cơ sở dữ liệu. Tôi không nhớ nếu nó đóng kết nối sau một số giờ nhưng nó sẽ tự động kết nối lại và không ném lỗi như thế này. Tôi thậm chí không tích cực nó thực sự được thiết lập để sử dụng kết nối tổng hợp. Vì vậy, bất kỳ trợ giúp sẽ được rất nhiều đánh giá cao, cảm ơn bạn.
CẬP NHẬT
tôi thấy this page và tôi nghĩ rằng tất cả những gì cần làm là thêm ValidationQuery tài sản. Bất cứ ai có thể xác minh nếu điều này sẽ có ảnh hưởng mong muốn trong khi để lại tất cả mọi thứ khác theo mặc định? Tôi tin rằng sau đó sẽ sử dụng phương thức testOnBorrow của DBCP. Tôi không hoàn toàn hiểu những gì lời giải thích nói testOnBorrow không, nhưng tôi nghĩ rằng điều này sẽ làm những gì tôi muốn. Có ai xác nhận không? Cảm ơn.
Một ý nghĩ sẽ là có một kịch bản đơn giản truy cập dịch vụ để giữ cho nó "ấm" mỗi giờ hoặc lâu hơn. Nếu vấn đề là các dịch vụ cư trú đang được thực hiện off-line do không hoạt động, điều này sẽ giữ cho điều đó xảy ra. – cdeszaq
Cảm ơn nhưng tôi biết DBCP có thể kết nối lại mà không có vấn đề này hoặc có một thiết lập để ngăn chặn điều này và đó là cách tôi muốn giải quyết nó. – cardician
Tôi đồng ý, đó là lý do tôi đăng nhận xét đó chứ không phải là câu trả lời. Đề nghị của tôi là không có gì hơn là một công việc xung quanh, nhưng nó loại bỏ các triệu chứng cho người dùng của bạn cho đến khi bạn tìm thấy một giải pháp cho vấn đề :) – cdeszaq