java - Too many Connections Exception in Spring Batch -
in web application using spring batch framework , mysql database. in dao class closing connection still getting "too many connections" exception.plz how resolve this.
this spring batch configuration files:
erambatchjob.xml: <?xml version="1.0" encoding="utf-8"?> <beans:beans xmlns="http://www.springframework.org/schema/batch" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd"> <beans:bean class="org.springframework.beans.factory.config.propertyplaceholderconfigurer"> <beans:property name="location"> <beans:value>erambatchapp.properties</beans:value> </beans:property> </beans:bean> <beans:import resource="eramgbt-jobrepository.xml"/> <!-- headers --> <beans:bean id="accountheader" class="com.order.batch.accountheader" scope="step"> <beans:property name="seperator" value="#{jobparameters['delimiter']}"> </beans:property> </beans:bean> <beans:bean id="customerheader" class="com.order.batch.customerheader" scope="step"> <beans:property name="seperator" value="#{jobparameters['delimiter']}"></beans:property> </beans:bean> <beans:bean id="finstatheader" class="com.order.batch.finstatheader" scope="step"> <beans:property name="seperator" value="#{jobparameters['delimiter']}"></beans:property> </beans:bean> <!-- headers --> <!-- asynchronous executor --> <beans:bean id="taskexecutor" class="org.springframework.core.task.simpleasynctaskexecutor" scope="step"> <!-- <beans:property name="concurrencylimit" value="5"/> --> <beans:property name="concurrencylimit" value="#{jobparameters['concurrencylimit']}"/> </beans:bean> <!-- reader --> <beans:bean id="accountinfofilereader" class="org.springframework.batch.item.file.flatfileitemreader" scope="step"> <beans:property name="resource" value="file:#{jobparameters['resource']}" /> <beans:property name="linemapper"> <beans:bean class="org.springframework.batch.item.file.mapping.defaultlinemapper"> <beans:property name="linetokenizer"> <beans:bean class="org.springframework.batch.item.file.transform.fixedlengthtokenizer"> <!-- <beans:property name="delimiter" value=" "/> --> <!-- <beans:property name="columns" value="1-30,31-120,121-190,191-260,261-310,311-360,361-370,371-380,381-382,420-423,400-419,385-393,424-451" /> correct --> <!-- <beans:property name="columns" value="1-30,31-120,121-190,191-260,261-310,311-360,361-370,371-380,381-382,371-380,400-419,385-393,420-451" /> --> <beans:property name="columns" value="#{jobparameters['inputdelimiter']}" /> <beans:property name="names" value="accountnumber,businessname,addr1,addr2,city,state,zip,phone,countrycode,phonecode,bizid,duns,dummy" /> </beans:bean> </beans:property> <beans:property name="fieldsetmapper"> <beans:bean class="com.order.batch.accountinfofiledsetmap" /> </beans:property> </beans:bean> </beans:property> </beans:bean> <!-- processor --> <beans:bean id="productorderproccesor" class="com.order.batch.productorderproccesor" scope="step"> <beans:property name="toolkitid" value="#{jobparameters['toolkitid']}"/> <beans:property name="toolkitpwd" value="#{jobparameters['toolkitpwd']}"/> </beans:bean> <!-- wrtiter --> <!-- account file writer --> <beans:bean id="accountfilewriter" class="org.springframework.batch.item.file.flatfileitemwriter" scope="step"> <beans:property name="resource" value="file:#{jobparameters['accountfilepath']}" /> <!-- <beans:property name="appendallowed" value="true" />--> <!--<beans:property name="shoulddeleteifexists" value="true"/> --> <beans:property name="lineaggregator"> <beans:bean class="org.springframework.batch.item.file.transform.delimitedlineaggregator"> <beans:property name="delimiter" value="#{jobparameters['delimiter']}"/> <!-- <beans:property name="columns" value="1-30,31-120,121-190,191-260,261-310,311-360,361-370,371-380,381-382,371-380,400-419,385-393,420-452" /> --> <beans:property name="fieldextractor"> <beans:bean class="org.springframework.batch.item.file.transform.beanwrapperfieldextractor"> <beans:property name="names" value="sacct_nbr_cust,scountrycode_cust,scrcy_cd,sduns_nbr,senq_duns,sprim_name,saddr_line,spost_town,sprim_geo_area,spost_cd,scntry_cd,stlcm_nbr,scurr_cntl_yr,stotl_emp,sprim_sic,sloc_stat,slgl_form,saddr_tenr_type_cd,sceo_nme,spayd_scr,spays_3_mo_ago,spayd_norm,savg_high_cr,shigh_cr,stot_pmt,sfinl_embt_ind,sout_bus_in,scrim_ind,shist_ind,simpt_ind,sexpt_ind,sdnb_ratg,srat_cd,saaa_rat,sbus_stru,shq_duns,shq_nme,shq_cntry_cd,spnt_nme,spnt_duns,spnt_ctry_cd,sdom_ult_pnt_nme,sdom_ult_pnt_duns,sdom_ult_ctry_cd,sgbl_ult_pnt_nme,sgbl_ult_pnt_duns,sgbl_ult_ctry_cd,sdelq_scr_entr_natl_pctl,sdelq_scr_entr_inds_pctl,sdelq_scr_entr_inds_defu_indn,sfail_scr_entr_natl_pctl,sfail_scr_entr_defu_indn,sfail_scr_entr_inds_pctl,sfail_scr_entr_inds_defu_indn,scurr_rato,sqk_rato,sclm_ind,ssuit_jdgt_ind,strdg_styl,strdg_styl1,strdg_styl2,strdg_styl3,strdg_styl4,sprim_sic,sprim_sic_type_cd,slcl_atv_cd,slcl_actv_cd_type,sstrt_yr,sbus_regn_nbr,smax_cr,sincn_yr,seu_admin_app,seu_burgalary_ind,seu_bus_cease_ind,seu_bus_windup_ind,sfire_ind,seu_insol_stmt,seu_liqd_it,seu_meet_crdtr,seu_min_dat_ind,seu_misc_ovrd,seu_neg_inf_ind,sfail_scr_entr_scr_cmty_cd,sfail_scr_entr_scr_cmty_cd1,sfail_scr_entr_scr_cmty_cd2,sfail_scr_entr_scr_cmty_cd3,sfail_scr_entr_scr_cmty_cd4,sfail_scr_entr_scr_cmty_cd5,sfail_scr_entr_scr_cmty_cd6,sfail_scr_entr_scr_cmty_cd7,sfail_scr_entr_scr_cmty_cd8,sfail_scr_entr_scr_cmty_cd9,sfail_scr_entr_scr_cmty_cd10,sfail_scr_entr_scr_cmty_cd11,sfail_scr_entr_scr_cmty_cd12,sfail_scr_entr_scr_cmty_cd13,sfail_scr_entr_scr_cmty_cd14,sfail_scr_entr_scr_cmty_cd15,sfail_scr_entr_scr_cmty_cd16,sfail_scr_entr_scr_cmty_cd17,sfail_scr_entr_scr_cmty_cd18,sfail_scr_entr_scr_cmty_cd19,sfail_scr_entr_scr_cmty_cd20,sfail_scr_entr_scr_cmty_cd21,sfail_scr_entr_scr_cmty_cd22,sfail_scr_entr_scr_cmty_cd23,sfail_scr_entr_scr_cmty_cd24,sfail_scr_entr_scr_cmty_cd25,sfail_scr_entr_scr_cmty_cd26,sfail_scr_entr_scr_cmty_cd27,sfail_scr_entr_scr_cmty_cd28,sfail_scr_entr_scr_cmty_cd29,sfail_scr_entr_scr_ovrd_cd,sfail_scr_entr_scr_ovrd_cd1,sfail_scr_entr_scr_ovrd_cd2,sfail_scr_entr_scr_ovrd_cd3,sfail_scr_entr_scr_ovrd_cd4,sdelq_scr_entr_scr_cmty_cd,sdelq_scr_entr_scr_cmty_cd1,sdelq_scr_entr_scr_cmty_cd2,sdelq_scr_entr_scr_cmty_cd3,sdelq_scr_entr_scr_cmty_cd4,sdelq_scr_entr_scr_cmty_cd5,sdelq_scr_entr_scr_cmty_cd6,sdelq_scr_entr_scr_cmty_cd7,sdelq_scr_entr_scr_cmty_cd8,sdelq_scr_entr_scr_cmty_cd9,sdelq_scr_entr_scr_cmty_cd10,sdelq_scr_entr_scr_cmty_cd11,sdelq_scr_entr_scr_cmty_cd12,sdelq_scr_entr_scr_cmty_cd13,sdelq_scr_entr_scr_cmty_cd14,sdelq_scr_scr_ovrd_cd,sdelq_scr_scr_ovrd_cd1,sdelq_scr_scr_ovrd_cd2,sdelq_scr_scr_ovrd_cd3,sdelq_scr_scr_ovrd_cd4,sdast_ref_dt,srate_id,srpt_net_wrth,srpt_net_sls,srpt_net_income,scustomer_bs_name,dummydelimiter"/> </beans:bean> </beans:property> </beans:bean> </beans:property> <beans:property name="headercallback" ref="accountheader"></beans:property> </beans:bean> <!-- customer file writer --> <beans:bean id="customerfilewriter" class="org.springframework.batch.item.file.flatfileitemwriter" scope="step"> <beans:property name="resource" value="file:#{jobparameters['customerfilepath']}" /> <!-- <beans:property name="appendallowed" value="true" /> --> <!--<beans:property name="shoulddeleteifexists" value="true"/> --> <beans:property name="lineaggregator"> <beans:bean class="org.springframework.batch.item.file.transform.delimitedlineaggregator"> <beans:property name="delimiter" value="#{jobparameters['delimiter']}"/> <beans:property name="fieldextractor"> <beans:bean class="org.springframework.batch.item.file.transform.beanwrapperfieldextractor"> <beans:property name="names" value="sacct_nbr_cust,sbusiness_nme_cust,saddr1_cust,saddr2_cust,scity_cust,sstate_cust,szip_cust,sphonecode_cust,sphone_cust,scountrycode_cust,sduns_cust"/> </beans:bean> </beans:property> </beans:bean> </beans:property> <beans:property name="headercallback" ref="customerheader"></beans:property> </beans:bean> <!-- finance statement writer --> <beans:bean id="financestatfilewriter" class="org.springframework.batch.item.file.flatfileitemwriter" scope="step"> <beans:property name="resource" value="file:#{jobparameters['finstatfilepath']}" /> <!-- <beans:property name="appendallowed" value="true" /> --> <!-- <beans:property name="shoulddeleteifexists" value="true"/> --> <beans:property name="lineaggregator"> <beans:bean class="org.springframework.batch.item.file.transform.delimitedlineaggregator"> <beans:property name="delimiter" value="#{jobparameters['delimiter']}"/> <beans:property name="fieldextractor"> <beans:bean class="org.springframework.batch.item.file.transform.beanwrapperfieldextractor"> <beans:property name="names" value="sacct_nbr_cust,sdnb_ind,scash_liq_aset,sact_rec,sact_pay,sstk,stot_curr_aset,stot_curr_liab,stot_aset,stot_liab,snet_wrth,sitng_aset,ssls,snet_incm,sstmt_dt,sstmt_type,srate_id,sstmt_crcy_cd,dummydelimiter"/> </beans:bean> </beans:property> </beans:bean> </beans:property> <beans:property name="headercallback" ref="finstatheader"></beans:property> </beans:bean> <!-- composite writer --> <beans:bean id="compositewriter" class="org.springframework.batch.item.support.compositeitemwriter"> <beans:property name="delegates"> <beans:list> <beans:ref bean="accountfilewriter" /> <beans:ref bean="customerfilewriter" /> <beans:ref bean="financestatfilewriter" /> </beans:list> </beans:property> </beans:bean> <!-- writers fro skip plocies --> <beans:bean id="excludewriter" class="org.springframework.batch.item.file.flatfileitemwriter"> <beans:property name="shoulddeleteifexists" value="true"/> <beans:property name="lineaggregator"> <beans:bean class="org.springframework.batch.item.file.transform.delimitedlineaggregator"> <beans:property name="delimiter" value=","/> <beans:property name="fieldextractor"> <beans:bean class="org.springframework.batch.item.file.transform.beanwrapperfieldextractor"> <beans:property name="names" value="errormessage,accountnumber,businessname,addr1,addr2,city,state,zip,phone,countrycode,phonecode,bizid,duns"/> </beans:bean> </beans:property> </beans:bean> </beans:property> </beans:bean> <beans:bean id="writewriter" class="org.springframework.batch.item.file.flatfileitemwriter"> <beans:property name="shoulddeleteifexists" value="true"/> <beans:property name="lineaggregator"> <beans:bean class="org.springframework.batch.item.file.transform.delimitedlineaggregator"> <beans:property name="delimiter" value=","/> <beans:property name="fieldextractor"> <beans:bean class="org.springframework.batch.item.file.transform.beanwrapperfieldextractor"> <beans:property name="names" value="sacct_nbr,sduns_nbr,scustomer_bs_name"/> </beans:bean> </beans:property> </beans:bean> </beans:property> </beans:bean> <!-- listeners --> <beans:bean id="erambatchlistener" class="com.order.batch.eramjoblistener"> <beans:property name="excludewriter" ref="excludewriter" ></beans:property> <beans:property name="writewriter" ref="writewriter" ></beans:property> </beans:bean> <!-- job --> <job id="erambatchjob" job-repository="jobrepository" > <step id="step2"> <tasklet transaction-manager="jobrepository-transactionmanager" task-executor="taskexecutor"> <chunk reader="accountinfofilereader" processor="productorderproccesor" writer="compositewriter" commit-interval="#{jobparameters['commitinterval']}" skip-limit="10000" retry-limit="1"> <streams> <stream ref="compositewriter"/> <stream ref="accountinfofilereader"/> <stream ref="excludewriter"/> <stream ref="writewriter"/> </streams> <retryable-exception-classes> <include class="java.lang.exception"/> </retryable-exception-classes> <skippable-exception-classes> <include class="org.springframework.batch.item.file.flatfileparseexception"/> <include class="org.springframework.batch.item.file.transform.incorrectlinelengthexception"/> <include class="org.springframework.batch.core.step.skip.nonskippablereadexception"/> <include class="java.io.ioexception"/> <include class="org.springframework.beans.notreadablepropertyexception"/> <include class="org.springframework.batch.item.itemstreamexception"/> <include class="com.order.exception.invaliddunsorcountrycodeexception"/> </skippable-exception-classes> <listeners> <listener ref="erambatchlistener" /> </listeners> </chunk> </tasklet> <listeners> <listener ref="erambatchlistener"/> </listeners> </step> <listeners> <listener ref="erambatchlistener"/> </listeners> </job> </beans:beans>
eramgbt-jobrepository.xml:
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="jobrepository-datasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="${erambatch.app.database.driverclass}" /> <property name="url" value="${erambatch.app.database.databaseurl}" /> <property name="username" value="${erambatch.app.database.username}" /> <!-- user id. e.g. root--> <property name="password" value="${erambatch.app.database.password}" /> <!-- password--> <property name="maxidle" value="10"/> <property name="maxactive" value="100"/> <property name="maxwait" value="10000"/> <property name="validationquery" value="select 1"/> <property name="testonborrow" value="false"/> <property name="testwhileidle" value="true"/> <property name="timebetweenevictionrunsmillis" value="1200000"/> <property name="minevictableidletimemillis" value="1800000"/> <property name="numtestsperevictionrun" value="5"/> <property name="defaultautocommit" value="false"/> </bean> <bean id="jobrepository-transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager" lazy-init="true"> <property name="datasource" ref="jobrepository-datasource" /> </bean> <bean id="jobrepository" class="org.springframework.batch.core.repository.support.jobrepositoryfactorybean"> <property name="datasource" ref="jobrepository-datasource" /> <property name="transactionmanager" ref="jobrepository-transactionmanager"/> <property name="isolationlevelforcreate" value="isolation_read_uncommitted" /> <property name="databasetype" value="mysql" /> <property name="tableprefix" value="batch_"/> </bean> <bean id="asynctaskexecutor" class="org.springframework.core.task.simpleasynctaskexecutor"/> <bean id="joblauncher" class="org.springframework.batch.core.launch.support.simplejoblauncher"> <property name="jobrepository" ref="jobrepository"/> <property name="taskexecutor"> <bean class="org.springframework.core.task.simpleasynctaskexecutor" /> </property> </bean> <bean id="jobexplorer" class="org.springframework.batch.core.explore.support.jobexplorerfactorybean" p:datasource-ref="jobrepository-datasource" p:tableprefix="batch_" /> <bean id="jobregistry" class="org.springframework.batch.core.configuration.support.mapjobregistry"/> <bean id="joboperator" class="org.springframework.batch.core.launch.support.simplejoboperator"> <property name="jobexplorer" ref="jobexplorer"/> <property name="jobrepository" ref="jobrepository"/> <property name="jobregistry" ref="jobregistry" /> <property name="joblauncher" ref="joblauncher" /> </bean> </beans>
this looks mysql error. try increasing max_connections in /etc/my.cnf.
also may app's multiprocessing , threading model. exhaustion of mysql connections indicate problem application spawning new threads/processes time.
Comments
Post a Comment