2017-05-16 20 views
-1

springbatchで実行中のジョブがいくつかあります。今朝はサーバーを再起動し、その後2つのジョブで問題が発生しました。アプリケーションがあったように、これを引き起こしている可能性が何しかし、私はわからないんだけど、これはアプリケーションを作っているMySQLの接続に関連したように見えるスプリングバッチが失敗する| JDBCトランザクションをロールバックできませんでした

org.springframework.transaction.TransactionSystemException: Could not roll back JDBC transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state. 
    at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:286) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:846) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:823) 
    at org.springframework.transaction.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:162) 
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:135) 
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:267) 
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:77) 
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:368) 
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215) 
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144) 
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:253) 
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:195) 
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:141) 
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64) 
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:151) 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:130) 
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135) 
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:301) 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:134) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.ja 

:BATCH_STEP_EXECUTIONテーブルには、各失敗した実行のために、以下の終了メッセージを表示します再起動する前に正常に機能します。誰かがこの前に遭遇しましたか?

EDIT

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state. 

データソース(ログに表示されるメッセージによって引き起こされる)

javax.sql.DataSource 

接続プール 次の形式でcontext.xmlファイルで設定:

<?xml version="1.0" encoding="UTF-8"?> 
<Context docBase="webapps/appname" mapperContextRootRedirectEnabled="true" mapperDirectoryRedirectEnabled="true" path="/appname" reloadable="false" > 

<Resource name="jdbc/springbatchmeta" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="${jobmeta.username}" 
      password="${jobmeta.password}" 
      driverClassName="${mysql.driverClass}" 
      url="${jobmeta.url}" 
      initialSize="2" 
      maxTotal="20" 
      maxIdle="10" 
      minIdle="2"/> 

<Resource name="jdbc/firstjob" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="${firstjob.username}" 
      password="${firstjob.password}" 
      driverClassName="${mysql.driverClass}" 
      url="${firstjob.url}" 
      initialSize="2" 
      maxTotal="20" 
      maxIdle="10" 
      minIdle="2"/> 

<Resource name="jdbc/secondjob" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="${secondjob.username}" 
      password="${secondjob.password}" 
      driverClassName="${secondjob.driverClass}" 
      url="${secondjob.url}" 
      initialSize="2" 
      maxTotal="20" 
      maxIdle="10" 
      minIdle="2"/> 

</Context> 
+0

データソースとJDBC接続プールの設定を共有してください。また、「原因...」セクションがない場合は、ログを確認してください。 –

+0

接続プールの問題のようです。データソース/接続プールをどのように構成しますか。どの接続プールを使用しましたか? –

+0

データソース/接続プールの例を使って投稿を更新しました – commanderZiltoid

答えて

-1

この問題は、mysqlのwait-timeoutオプションが60秒に設定されているために発生しました。実行しているほとんどのジョブが完了するまでに1分以上かかるためです。

関連する問題