user2997888
user2997888

Reputation: 1

Spring batch 5 : bad SQL grammar [INSERT INTO BATCH_JOB_EXECUTION_PARAMS(JOB_EXECUTION_ID, PARAMETER_NAME, PARAMETER_TYPE, PARAMETER_VALUE

I was upgrading our app from jdk 11 to 17 and changed the corresponding dependencies. After the upgrade, I am seeing the following error when I run the application,

 org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO BATCH_JOB_EXECUTION_PARAMS(JOB_EXECUTION_ID, PARAMETER_NAME, PARAMETER_TYPE, PARAMETER_VALUE, IDENTIFYING)
    VALUES (?, ?, ?, ?, ?)
 ]

Here is the code, In application.yml

spring:
  batch:
    jdbc:
      initialize-schema: always
    job:
      enabled: false
  config:
    activate:
      on-profile: dev3

  datasource:
    url: 'jdbc:oracle:thin:@(**********)'
    username:  ******
    password:  *******
    driver-class-name: oracle.jdbc.OracleDriver
    
@Configuration
//@EnableBatchProcessing
public class DataLoadJob {


    String tmpFileLocation;

    @Bean
    public Job testJob(Step step1,
                             JobRepository jobRepository) {
        return new JobBuilder("testJob", jobRepository)
                .listener(new JobListener())
                .start(step1) //
                .build();
    }


    @Bean
    public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        return new StepBuilder("step1", jobRepository).tasklet(insertInfo(), transactionManager).build();
    }
}
----------------------------

@SpringBootApplication(scanBasePackages = {"com.fanniemae.capitalmarkets.cets"})
public class BatchCbdJobApplication implements ApplicationRunner , ExitCodeGenerator {
    @Autowired
    private Job job;

    @Autowired
    private JobLauncher jobLauncher;

    public static final String MODULE = "module";

    private int jobexitCode = 99;


    public static void main(String[] args) {
      int exitCode = SpringApplication.exit(
        new SpringApplicationBuilder()
                .listeners(new SecretPropertiesListener())
                .properties("spring.config.name:application,queries")
                .sources(BatchCbdJobApplication.class)
                .web(WebApplicationType.NONE)
                .run(args)
            );

       System.exit(exitCode);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {

        String moduleName = (args.containsOption(MODULE) || args.getOptionValues(MODULE).size() == 1)
                ?   args.getOptionValues(MODULE).get(0) :"testJob" ;

        try {
            JobParameters jobParameters = new JobParametersBuilder()
                    .addDate(Constants.DATE_TIME_JOB_PARAM, new Date())
                    .addString(MODULE, moduleName)
                    .toJobParameters();

            JobExecution execution = jobLauncher.run(job, jobParameters);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        //jobexitCode = new SimpleJvmExitCodeMapper().intValue(execution.getExitStatus().getExitCode());

    }

I referred these links and commented out the annotation @EnableBatchProcessing, still seeing the same error,

Spring-Batch-5.0-Migration-Guide

Spring batch - bad SQL grammar

Am I missing any config and How do I fix this? Please let me know if you need any details. Thanks!


Detailed error message:

{"requestTime":"11/08/2024T11:28:12.267","@version":"1","message":"Application run failed","logger_name":"org.springframework.boot.SpringApplication","thread_name":"main","level":"ERROR","level_value":40000,"stack_trace":"org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO BATCH_JOB_EXECUTION_PARAMS(JOB_EXECUTION_ID, PARAMETER_NAME, PARAMETER_TYPE, PARAMETER_VALUE, IDENTIFYING)\n\tVALUES (?, ?, ?, ?, ?)\n]
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:112)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:116)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1548)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:677)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:701)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:1101)
at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.insertJobParameters(JdbcJobExecutionDao.java:431)
at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.saveJobExecution(JdbcJobExecutionDao.java:251)
at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:178)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:351)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean.lambda$getObject$0(AbstractJobRepositoryFactoryBean.java:204)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:220)
at jdk.proxy2.$Proxy113.createJobExecution(Unknown Source)
at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:145)
at org.springframework.batch.core.launch.support.TaskExecutorJobLauncher.run(TaskExecutorJobLauncher.java:59)
at com.batch.BatchJobApplication.run(BatchJobApplication.java:61)
at org.springframework.boot.SpringApplication.lambda$callRunner$4(SpringApplication.java:786)
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:83)
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60)
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:88)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:786)
at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:774)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:774)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:341)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:149)
at com.batch.BatchJobApplication.main(BatchJobApplication.java:42)\r\nCaused by: java.sql.BatchUpdateException: ORA-00904: \"PARAMETER_VALUE\": invalid identifier\n\r\nhttps://docs.oracle.com/error-help/db/ora-00904/
at oracle.jdbc.driver.OraclePreparedStatement.generateBatchUpdateException(OraclePreparedStatement.java:11409)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatchWithoutQueue(OraclePreparedStatement.java:10735)
at oracle.jdbc.driver.OraclePreparedStatement.executeLargeBatch(OraclePreparedStatement.java:10439)
at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:5660)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:292)
at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:127)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java)
at org.springframework.jdbc.core.JdbcTemplate.lambda$batchUpdate$4(JdbcTemplate.java:1117)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:658)\r\n\t... 42 common frames omitted\r\n","businessSystemName":"Batch__job","appName":"batch__job"}

Upvotes: -1

Views: 378

Answers (0)

Related Questions