2014-06-25 12 views
6

काम नहीं कर रहा है मैं वर्तमान में वसंत बूट (1.1.2.Release) का उपयोग कर एक छोटा सा अनुप्रयोग डीबग कर रहा हूं। यदि कनेक्शन खो गया है (उत्पादन में प्रतीक्षा_टाउटआउट के कारण, या विकास में कनेक्शन को मारने के कारण) डेटाबेस में पुन: कनेक्ट करने में मुझे कोई समस्या मिली है।वसंत बूट जेपीए कनेक्शन सत्यापन

spring.datasource.url=jdbc:mysql://localhost:3306/test?autoreconnect=true 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.datasource.test-on-borrow=true 
spring.datasource.test-while-idle=true 
spring.datasource.validation-query=SELECT 1; 
spring.datasource.initial-size=2 
... username+pw 

spring.jpa.generate-ddl=true 
spring.jpa.show-sql=true 

यह निम्न डेटा स्रोत में जो परिणाम:

[email protected]{ConnectionPool[ 
defaultAutoCommit=null; 
defaultReadOnly=null; 
defaultTransactionIsolation=-1; 
defaultCatalog=null; 
driverClassName=com.mysql.jdbc.Driver; 
maxActive=100; 
maxIdle=100; 
minIdle=10; 
initialSize=2; 
maxWait=30000; 
testOnBorrow=true; 
testOnReturn=false; 
timeBetweenEvictionRunsMillis=5000; 
numTestsPerEvictionRun=0; 
minEvictableIdleTimeMillis=60000; 
testWhileIdle=true; 
testOnConnect=false; 
password=********; 
url=jdbc:mysql://localhost:3306/test?autoreconnect=true; 
username=test; 
validationQuery=SELECT 1; 
; 
validationQueryTimeout=-1; 
validatorClassName=null; 
validationInterval=30000; 
accessToUnderlyingConnectionAllowed=true; 
removeAbandoned=false; 
removeAbandonedTimeout=60; 
logAbandoned=false; 
connectionProperties=null; 
initSQL=null; 
jdbcInterceptors=null; 
jmxEnabled=true; 
fairQueue=true; 
useEquals=true; 
abandonWhenPercentageFull=0; 
maxAge=0; 
useLock=false; 
dataSource=null; 
dataSourceJNDI=null; 
suspectTimeout=0; 
alternateUsernameAllowed=false; 
commitOnReturn=false; 
rollbackOnReturn=false; 
useDisposableConnectionFacade=true; 
logValidationErrors=false; 
propagateInterruptState=false; 
ignoreExceptionOnPreLoad=false; 
} 

मेरे समस्या अब है कि जब एक कनेक्शन खो जाता है यह काफी समय लगता है मैं वर्तमान में निम्नलिखित विन्यास मानकों (application.properties) का उपयोग कर रहा जबकि कनेक्शन फिर से स्थापित किया जाता है। इस बीच उपयोगकर्ताओं को एक खाली पृष्ठ मिलता है और सर्वर पक्ष पर अपवाद फेंक दिए जाते हैं। मेरी समझ परीक्षण से, कल हर बार कनेक्शन का परीक्षण करने से पहले परीक्षण करना चाहिए और परीक्षण हर समय 30 सेकंड में करें। लेकिन यह मामला दुर्भाग्य से मामला नहीं है। जब मैं mysql को देखता हूं ऐसा लगता है कि हर 35 सेकंड कुछ होता है और नींद का समय रीसेट हो जाता है, लेकिन मुझे एप्लिकेशन लॉग में कोई क्वेरी नहीं दिखाई देती है। सत्यापन प्रश्न पूरी तरह से गायब प्रतीत होता है।

मैं वसंत डेटा के भंडारों के माध्यम से डेटाबेस तक पहुंचता हूं।

वर्तमान में मेरे पास कोई और विचार नहीं है कि क्या प्रयास करना है।

+0

इस http://stackoverflow.com/questions/667289/why-does-autoreconnect-true-not-seem-to-work के अनुसार यह एक सामान्य समस्या है। मुझे यह भी संदेह है कि यह वसंत बूट के बिना ठीक काम करता है क्योंकि डेटासोर्स सही तरीके से कॉन्फ़िगर किया गया है। –

+0

ऑटोरेकनेक्ट = सच्चाई का उपयोग करना आखिरी पुआल के लिए एक तरह का क्लचिंग है जो उम्मीद में मदद कर सकता है। मुझे पता है कि यह एक अपवाद फेंकता है लेकिन मेरी समझ यह है कि सत्यापन पूल के कारण कनेक्शन पूल (टोमकैट-जेडीबीसी) इसे पकड़ा जाना चाहिए और डेटाबेस से फिर से कनेक्ट होना चाहिए, यहां तक ​​कि autoreconnect = true के बिना भी। – ssindelar

+3

उधार लेने के बजाय आप क्या कर सकते हैं आप समय-समय पर कनेक्शन का परीक्षण करना और अपमानित/निष्क्रिय कनेक्शन बेदखल करना चाहते हैं। देखें http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency –

उत्तर

1

अपने कनेक्शन पूल के लिए टोमकैट के बजाय HikariCP पर स्वैप करने का प्रयास करें, क्योंकि यह टाइमआउट/कनेक्शन हानि a lot better को संभालने के लिए प्रतीत होता है। यदि स्प्रिंग बूट क्लासपाथ पर मौजूद है और टॉमकैट-जेडीबीसी नहीं है तो एक हिकारीसीपी को स्वतः कॉन्फ़िगर करें।

संबंधित मुद्दे