2015-07-04 14 views
8

मेरा वसंत बूट एप्लिकेशन हमेशा मुझे इस श्वेतसूची त्रुटि को दिखाता है: लेनदेन के लिए जेपीए EntityManager नहीं खोल सका; नेस्टेड अपवाद javax.persistence.PersistenceException: org.hibernate.TransactionException: जेडीबीसी शुरू लेनदेन विफल:कनेक्शन रातोंरात खो गया (वसंत बूट + mysql)

मैंने वेब की खोज की, मुझे लगता है कि यह हो सकता है कि MySQL निष्क्रिय 8 घंटों के कनेक्शन को बंद कर दे। हालांकि दस्तावेज़ के अनुसार वसंत बूट स्वचालित रूप से पूलिंग अपाचे डेटासोर्स को कॉन्फ़िगर करेगा। http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html

मुझे यकीन नहीं है कि एप्लिकेशन कोड या डेटाबेस को कॉन्फ़िगर कैसे करें।

buildscript { 
    ext { 
     springBootVersion = '1.2.3.RELEASE' 
    } 
    repositories { 
     maven { url "http://repo.spring.io/libs-snapshot" } 
     mavenLocal() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 
apply plugin: 'war' 
apply plugin: 'application' 

repositories { 
    mavenCentral() 
    maven { url "http://repo.spring.io/libs-snapshot" } 
    maven { url "http://maven.springframework.org/milestone" } 
} 

// Seems tomcat 8 doesn't work with paypal 
configurations.all { 
    resolutionStrategy { 
     eachDependency { 
      if (it.requested.group == 'org.apache.tomcat.embed') { 
       it.useVersion '7.0.59' 
      } 
     } 
    } 
} 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}") 
    compile("org.springframework.boot:spring-boot-starter-tomcat:${springBootVersion}") 
    compile("org.springframework.boot:spring-boot-starter-actuator") 
    compile("org.springframework.boot:spring-boot-starter-mail:${springBootVersion}") 
    compile("org.springframework.boot:spring-boot-starter-aop:${springBootVersion}") 
    compile("org.springframework.boot:spring-boot-starter-test:${springBootVersion}") 
    compile("org.springframework.boot:spring-boot-starter-security:${springBootVersion}") 
    compile("org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}") 
    compile("org.springframework.data:spring-data-rest-webmvc") 
    compile("javax.servlet:jstl:1.2") 
    compile("org.apache.logging.log4j:log4j-api:2.3") 
    compile("org.apache.logging.log4j:log4j-core:2.3") 
    compile("com.paypal.sdk:rest-api-sdk:1.2.1") 
    compile("com.opencsv:opencsv:3.4") 
    compile("mysql:mysql-connector-java:5.1.35") 
    compile("com.google.guava:guava:17.0") 
    compile("org.apache.httpcomponents:httpclient:4.3.4") 
    compile("com.squareup.retrofit:retrofit:1.6.0") 
    compile("commons-io:commons-io:2.4") 
    compile("org.apache.commons:commons-lang3:3.4") 
    compile("com.amazonaws:aws-java-sdk:1.9.34") 

    providedCompile("org.apache.tomcat.embed:tomcat-embed-jasper:8.0.22") 

    testCompile("junit:junit") 
} 

sourceCompatibility = 1.7 
targetCompatibility = 1.7 

war { 
    baseName = 'gs-convert-jar-to-war' 
    version = '0.1.0' 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

यहाँ application.properties में डेटाबेस विन्यास है:

spring.datasource.url=jdbc:mysql://fakeurl:3306/qa 
spring.datasource.username=username 
spring.datasource.password=password 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect 
# 
# hibernate 
# 
spring.jpa.hibernate.ddl-auto=update 

डेटा स्रोत के लिए मैं वसंत डेटा का भंडार का उपयोग करें:

यहाँ build.gradle मैं उपयोग कर रहा हूँ है

@Repository 
public interface EventRepository extends CrudRepository<EventDetail, Long> { 

} 

यहां माइस्क्ल डेटाबेस के चलने का परिणाम है "शो चर जैसे '% समय % बाहर ':

'connect_timeout','10' 
'delayed_insert_timeout','300' 
'innodb_flush_log_at_timeout','1' 
'innodb_lock_wait_timeout','50' 
'innodb_rollback_on_timeout','OFF' 
'interactive_timeout','28800' 
'lock_wait_timeout','31536000' 
'net_read_timeout','30' 
'net_write_timeout','60' 
'rpl_stop_slave_timeout','31536000' 
'slave_net_timeout','3600' 
'wait_timeout','28800' 

उत्तर

13

चेक इस उत्तर: Spring Boot JPA - configuring auto reconnect

संक्षेप में, आप की आवश्यकता होगी:

spring.datasource.testOnBorrow=true 
spring.datasource.validationQuery=SELECT 1 
+0

हाल ही के दो दिनों में यह संदेश नहीं देखा। मुझे लगता है कि यह काम कर रहा है, – darklord

4

आप यह भी देख सकते हैं इस link यह आपको बताता है निम्नलिखित पंक्तियों को शामिल कर application.properties फ़ाइल में।

spring.datasource.testWhileIdle = true 
spring.datasource.timeBetweenEvictionRunsMillis = 3600000 
spring.datasource.validationQuery = SELECT 1 
0

आप डीबी सर्वर में property wait_timeout = 31536000 संपत्ति सेट करके इसे ठीक कर सकते हैं। यह एक वर्ष के बराबर है। यदि आप एडब्ल्यूएस वातावरण में डीबी चल रहे हैं, तो पैरामीटर्स समूह-> नया समूह बनाएं -> प्रतीक्षा करें_टाउटआउट = 31536000 सेट करें और नए बनाए गए पैरामीटर समूह को अपने आरडीएस उदाहरण में असाइन करें। यदि आप वसंत बूट इंस्टेंस में इसे ठीक करना चाहते हैं, तो आप केवल C3P0 सेटिंग्स द्वारा ठीक कर सकते हैं, लेकिन मैंने कोशिश नहीं की है।