Обновление sql запросов с использованием аргументов командной строки в весеннем пакете - PullRequest
0 голосов
/ 05 июля 2019

Мне нужно обновить SQL-запрос, используя аргументы командной строки.

Я создаю Spring Batch, где он будет читать SQL-запрос, а Spring Batch будет читать запрос и обновит данные в файл JSON.

SQL-запрос в batch.xml:

    <resultMap id="fndEmpSeniorityRsltMap" >
        <id column="EmpId" property="empID" />
        <result column="EmpName" property="empName" />
    </resultMap>

    <select id="fndEmp" parameterType="java.lang.String" resultMap="fndEmpRsltMap">     
        select EmpId, EmpName from Emp      
    </select>

Аргументы строки cmd:

    private Set<String> argumentValue;
    --cmdLineArgument=<name>

itemreadwirtejob

    @Bean
    public ItemReader<Emp> btchItmRdr(SqlSessionFactory sqlSessionFactory) {
        final MyBatisCursorItemReader<Emp> reader = new MyBatisCursorItemReader<>();
        reader.setSqlSessionFactory(sqlSessionFactory);
        reader.setParameterValues(cnfgRdr.getParamMap());
        reader.setQueryId("fndEmp");
        return reader;
    }

     @Bean
    public ItemWriter<Emp> itmWrtrInCsv() throws DataAcesExcp {
        try {

            final FlatFileItemWriter<Emp> csvWriter = new FlatFileItemWriter<>();
            csvWriter.setShouldDeleteIfExists(true);
            csvWriter.setResource(new FileSystemResource(cnfgRdr.getOutLocCsv()));
            csvWriter.setHeaderCallback(headerWriter -> headerWriter.append("EmpId").append(",")
                    .append("EMPName").append(",");
            csvWriter.setLineAggregator(item -> new StringBuilder().append(item.getEmpID())
                    .append(",").append(item.getEmpName()).append(",")toString());
            return csvWriter;
        } catch (DataAccessException excp) {
            throw new DataAcesExcp(excp);
        }
    }

     @Bean
    public ItemWriter<Emp> itmRdrInJson() throws DataAcesExcp {
        try {

            final FlatFileItemWriter<Emp> jsonWriter = new FlatFileItemWriter<>();
            jsonWriter.setShouldDeleteIfExists(true);
            jsonWriter.setResource(new FileSystemResource(cnfgRdr.getOutLocTxt()));
            jsonWriter.setLineAggregator(new JsonLineAggregator<Emp>());
            jsonWriter.setFooterCallback(new JsonFlatFileFooterCallback());
            return jsonWriter;
        } catch (DataAccessException excp) {
            throw new DataAcesExcp(excp);
        }

    }

     @Bean
    public Step rdItmAndWrtInCsv() throws DataAcesExcp {
        return stepBuilderFactory.get("rdItmAndWrtInCsv").<Emp, Emp> chunk(cnfgRdr.getChunkSize())
                .reader(btchItmRdr(sqlSessionFactory)).faultTolerant().retryLimit(cnfgRdr.getRetryLimit())
                .retry(DeadlockLoserDataAccessException.class).writer(itmWrtrInCsv()).build();
    }

     @Bean
    public Step rdItmAndWrtInJson() throws DataAcesExcp {
        return stepBuilderFactory.get("rdItmAndWrtInJson").<Emp, Emp> chunk(cnfgRdr.getChunkSize())
                .reader(btchItmRdr(sqlSessionFactory)).faultTolerant().retryLimit(cnfgRdr.getRetryLimit())
                .retry(DeadlockLoserDataAccessException.class).writer(itmRdrInJson()).build();
    }

@Bean
    public Job rdItmAndWrtJob(BtchJobCmtnNotfLstnr lstnr,JobBuilderFactory jobBuilderFactory) throws DataAcesExcp {
    if(argumentValue.get(0).equalsIgnoreCase("read"))
    {

        return jobBuilderFactory.get("rdItmAndWrtJob").incrementer(new RunIdIncrementer())
                .listener(lstnr).start(rdItmAndWrtInCsv()).next(rdItmAndWrtInJson()).build();
        }
      }

В приведенном выше коде, если я передам чтение как аргументы командной строки, он прочитает запрос sql и обновит файл csv и josn данными.

Теперь мне нужно следующее:

Top- Top 500 записей по умолчанию,

Emp - для конкретного сотрудника.

Если я передам Top как cmd line arg, пакету Spring потребуется обновить запрос и показать первые 500 записей из таблицы.

То же самое для emp, если я передам empid = 500 в качестве аргумента строки cmd, запрос должен показать запись с empid = 500.

Пожалуйста, дайте мне знать, если есть какие-либо решения для этого. Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...