2016-11-28 1 views
1
org.springframework.dao.CannotSerializeTransactionException: PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; ORA-08177: can't serialize access for this transaction 
; nested exception is java.sql.SQLException: ORA-08177: can't serialize access for this transaction 

     at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:267) 
     at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) 
     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660) 
     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:909) 
     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:970) 
     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:975) 
     at org.springframework.batch.core.repository.dao.JdbcJobInstanceDao.createJobInstance(JdbcJobInstanceDao.java:115) 
     at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:135) 
     at sun.reflect.GeneratedMethodAccessor147.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
     at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
     at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean$1.invoke(AbstractJobRepositoryFactoryBean.java:172) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
     at com.sun.proxy.$Proxy54.createJobExecution(Unknown Source) 

Iは、以下を試してみました:スプリングバッチ - ORA-08177

1)ISOLATION_READ_COMMITTED

​​

2に分離レベルを変更する)、すべてのスプリングバッチコアテーブルの変更されたINITRANS

アップデート:私は既に他の質問で提供されている解決策を試みました。しかし、私はまだこの問題に1週間に少なくとも1回は直面しています。

+2

の可能性のある重複した[春バッチORA-08177:単一のジョブを実行するときにこのトランザクションのアクセスをシリアル化することはできません、SERIALIZED分離レベル](http://stackoverflow.com/questions/ 22364432/spring-batch-ora-08177-cant-serialize-access-for-this-transaction-when-running) –

+1

上記のリンクで提供されているすべての解決策を試しました。私はまだこの問題に直面しています。 – Arul

+0

'createJobExecution'メソッド/クラスのトランザクション設定をチェックしてください。 –

答えて

0

最後に、私はこの長い輸送問題を取り除くことができました。

ジョブ・リポジトリー・ビーンを使用してジョブ・ランチャーを正しく構成しませんでした。その後、この問題は解決されず、コードは実稼働環境で問題なく正常に実行されています。

//Overriding default configurer, since by default spring batch configuration allows only one datasource 
 
\t @Bean 
 
    public BatchConfigurer configurer(){ 
 
     return new DefaultBatchConfigurer(configDataSource); 
 
    } 
 
\t 
 
\t @Bean(name="jobRepository") 
 
\t public JobRepository getJobRepository() { 
 
\t \t JobRepositoryFactoryBean factoryBean = new JobRepositoryFactoryBean(); 
 
\t \t factoryBean.setDataSource(configDataSource); 
 
\t \t factoryBean.setTransactionManager(configTxManager); 
 
\t \t factoryBean.setIsolationLevelForCreate("ISOLATION_READ_COMMITTED"); 
 
\t \t factoryBean.setTablePrefix("BATCH_"); 
 
\t \t try { 
 
\t \t \t factoryBean.afterPropertiesSet(); 
 
\t \t \t return factoryBean.getObject(); 
 
\t \t } catch (Exception e) { 
 
\t \t \t log.error("JobRepository bean could not be initialized"); 
 
\t \t \t throw new BatchConfigurationException(e); 
 
\t \t } 
 
\t } 
 
\t 
 
\t @Bean 
 
\t public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(JobRegistry jobRegistry) { 
 
\t  JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor(); 
 
\t  jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry); 
 
\t  return jobRegistryBeanPostProcessor; 
 
\t } 
 
\t 
 
\t @Bean 
 
\t public JobLauncher jobLauncher(){ 
 
\t \t SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); 
 
\t \t jobLauncher.setJobRepository(jobRepository); 
 
\t \t return jobLauncher; 
 
\t } 
 
\t 
 
\t @Bean 
 
    public JobOperator jobOperator() { 
 
     SimpleJobOperator jobOperator = new SimpleJobOperator(); 
 
     jobOperator.setJobExplorer(jobExplorer); 
 
     jobOperator.setJobLauncher(jobLauncher); 
 
     jobOperator.setJobRegistry(jobRegistry); 
 
     jobOperator.setJobRepository(jobRepository); 
 
     return jobOperator; 
 
    }

関連する問題