Je suis confronté à un défi en récupérant la colonne de table Oracle générée automatiquement dans mon POC Spring Batch.Spring Batch Writer lance java.sql.SQLException: fonctionnalité non prise en charge
Ce POC lit les données à partir d'un fichier plat et les charge dans la table Oracle. J'essaie d'utiliser Oracle Sequence pour générer la clé primaire de la table et l'extraire après l'insertion réussie de la ligne de l'implémentation Spring Batch Writer. Mais il jette une erreur de suivi. Je ne suis pas sûr de manquer quelque chose ou un problème lié au pilote Oracle. Besoin de vos précieuses contributions.
Spécifications:
Oracle Database version 11.1.0.7
Oracle Driver that is added to Maven Proj ojdbc14-10.1.0.5.jar
JDK Version 1.8
spring.version 4.0.5.RELEASE
spring.jdbc.version 4.0.5
spring.batch.version 3.0.4.RELEASE
Mon job.xml
<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
Ma classe CustomerItemWriter:
public class CustomItemWriter implements ItemWriter<Permission>
{
private final static String INSERT_SQL = "insert into CUSTOMERS (CUST_ID,FIRSTNAME,LASTNAME,CREATED_DATE) VALUES (CUST_ID_SEQ.NEXTVAL,:firstname,:lastname,:CreatedDate)";
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Override
public void write(List<? extends Customer> customers) throws Exception
{
for(Customer customer : customers)
{
MapSqlParameterSource namedParameters = new MapSqlParameterSource();
namedParameters.addValue("firstname", customer.getLdapUserId());
namedParameters.addValue("lastname", customer.getRoleId());
namedParameters.addValue("CreatedDate", customer.getCreatedDate());
final KeyHolder holder = new GeneratedKeyHolder();
this.namedParameterJdbcTemplate.update(INSERT_SQL, namedParameters, holder, new String[] {"CUST_ID" });
Number generatedId = holder.getKey();
System.out.println("Oracle Seq value " + generatedId.intValue());
}
}
Exception reçue lors de l'exécution:
Aug 24, 2016 12:02:56 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org[email protected]728938a9: startup date [Wed Aug 24 00:02:56 EDT 2016]; root of context hierarchy
Aug 24, 2016 12:02:56 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [META-INF/spring/job-config.xml]
Aug 24, 2016 12:02:56 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [META-INF/spring/context-config.xml]
Aug 24, 2016 12:02:56 AM org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
INFO: Overriding bean definition for bean 'customReader': replacing [Generic bean: class [org.springframework.batch.item.file.FlatFileItemReader]; scope=step; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=false; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [META-INF/spring/context-config.xml]] with [Root bean: class [org.springframework.aop.scope.ScopedProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in BeanDefinition defined in class path resource [META-INF/spring/context-config.xml]]
Aug 24, 2016 12:02:56 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: oracle.jdbc.xa.client.OracleXADataSource
Aug 24, 2016 12:02:57 AM org.springframework.batch.core.launch.support.SimpleJobLauncher afterPropertiesSet
INFO: No TaskExecutor has been set, defaulting to synchronous executor.
Aug 24, 2016 12:02:57 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: oracle.jdbc.xa.client.OracleXADataSource
Aug 24, 2016 12:03:00 AM org.springframework.batch.core.launch.support.SimpleJobLauncher run
INFO: Job: [FlowJob: [name=GCMPBatchFeedJob]] launched with the following parameters: [{date=1472011377348, inputFile=C:/Work/BatchPOC/springbatch/GCMPBatchFeed/target/GCMPFeedData1.csv}]
Aug 24, 2016 12:03:06 AM org.springframework.batch.core.job.SimpleStepHandler handleStep
INFO: Executing step: [importFileStep]
Aug 24, 2016 12:03:09 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
Aug 24, 2016 12:03:09 AM org.springframework.jdbc.support.SQLErrorCodesFactory <init>
INFO: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
Aug 24, 2016 12:03:09 AM org.springframework.batch.core.step.AbstractStep execute
SEVERE: Encountered an error executing step importFileStep in job GCMPBatchFeedJob
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO CUSTOMERS (CUST_ID,FIRSTNAME,LASTNAME,CREATED_DATE) VALUES (CUST_ID_SEQ.NEXTVAL, ?, ?, ?)]; SQL state [null]; error code [17023]; Unsupported feature; nested exception is java.sql.SQLException: Unsupported feature
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:943)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:344)
at com.comp.sbatch.writer.CustomItemWriter.write(CustomItemWriter.java:171)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.writeItems(SimpleChunkProcessor.java:175)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.doWrite(SimpleChunkProcessor.java:151)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.write(SimpleChunkProcessor.java:274)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:199)
at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:406)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:330)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:271)
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:257)
at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:198)
at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148)
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:67)
at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:165)
at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144)
at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134)
at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:304)
at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135)
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:128)
at com.comp.sbatch.App.main(App.java:35)
Caused by: java.sql.SQLException: Unsupported feature
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)
at oracle.jdbc.driver.DatabaseError.throwUnsupportedFeatureSqlException(DatabaseError.java:537)
at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3094)
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:233)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:638)
... 29 more
Vous devez fournir * full * stacktrace – Andremoniy
@Andremoniy J'ai modifié mon article original avec une trace détaillée de pile d'exception. S'il-vous-plaît évaluez. – VenkatRam
Essayez de passer à un pilote plus récent qui correspond à la version de votre base de données. Dans votre cas, cela devrait être 'ojdbc6.jar' (mais pas' ojdbc7.jar' qui est utilisé avec Oracle 12 et qui a des problèmes avec Oracle 11). –