I am using a JPAQueryProvider with JpaPagingItemReader. My Batch configuration looks like this:
<code>
@Bean
public JpaPagingItemReader<MyEntity> getBatchReader() {
JpaPagingItemReader<MyEntity> reader = new BatchReader();
reader.setName("getDataFromReader");
reader.setEntityManagerFactory(entityManager);
reader.setQueryProvider(queryProvider());
reader.setPageSize(pageSize);
return reader;
}
@Bean
public IodsQueryProvider iodsQueryProvider () {
return new IodsQueryProvider();
}
</code>
<code>
@Bean
public JpaPagingItemReader<MyEntity> getBatchReader() {
JpaPagingItemReader<MyEntity> reader = new BatchReader();
reader.setName("getDataFromReader");
reader.setEntityManagerFactory(entityManager);
reader.setQueryProvider(queryProvider());
reader.setPageSize(pageSize);
return reader;
}
@Bean
public IodsQueryProvider iodsQueryProvider () {
return new IodsQueryProvider();
}
</code>
@Bean
public JpaPagingItemReader<MyEntity> getBatchReader() {
JpaPagingItemReader<MyEntity> reader = new BatchReader();
reader.setName("getDataFromReader");
reader.setEntityManagerFactory(entityManager);
reader.setQueryProvider(queryProvider());
reader.setPageSize(pageSize);
return reader;
}
@Bean
public IodsQueryProvider iodsQueryProvider () {
return new IodsQueryProvider();
}
This is my query provider:
<code>
public class QueryProvider implements JpaQueryProvider {
@PersistenceContext(unitName = "VIEW-DBUNIT")
private EntityManager entityManager;
@Override
public Query createQuery() {
Query query = entityManager.createNativeQuery("query");
query.setParameter(1,DateTimeUtil.formatTimestamp(last_run_date)); // How to get this last_run_date here?
return query;
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
</code>
<code>
public class QueryProvider implements JpaQueryProvider {
@PersistenceContext(unitName = "VIEW-DBUNIT")
private EntityManager entityManager;
@Override
public Query createQuery() {
Query query = entityManager.createNativeQuery("query");
query.setParameter(1,DateTimeUtil.formatTimestamp(last_run_date)); // How to get this last_run_date here?
return query;
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
</code>
public class QueryProvider implements JpaQueryProvider {
@PersistenceContext(unitName = "VIEW-DBUNIT")
private EntityManager entityManager;
@Override
public Query createQuery() {
Query query = entityManager.createNativeQuery("query");
query.setParameter(1,DateTimeUtil.formatTimestamp(last_run_date)); // How to get this last_run_date here?
return query;
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
I am unable to get last_run_date inside the query provider. I have last_run_date inside the BatchReader thought but unable to pass it down to the query provider.
Here is my BatchReader:
<code>
public class BatchReader extends JpaPagingItemReader{
@BeforeStep
public void beforeStep(StepExecution stepExecution) {
JobExecution jobExecution = stepExecution.getJobExecution();
//Getting last_run_date here but unable to pass it down to the query provider.
Timestamp last_run_date = (Timestamp) jobExecution.getExecutionContext().get(BatchConstants.LAST_RUN_TIME);
}
}
@Override
protected void doReadPage() {
Long startTime = System.currentTimeMillis();
super.doReadPage();
Long endTime = System.currentTimeMillis();
Long timeTaken = endTime - startTime;
LOGGER.info("Data retrieved: page={}, timeTaken={}ms", getPage(), timeTaken);
}
}
</code>
<code>
public class BatchReader extends JpaPagingItemReader{
@BeforeStep
public void beforeStep(StepExecution stepExecution) {
JobExecution jobExecution = stepExecution.getJobExecution();
//Getting last_run_date here but unable to pass it down to the query provider.
Timestamp last_run_date = (Timestamp) jobExecution.getExecutionContext().get(BatchConstants.LAST_RUN_TIME);
}
}
@Override
protected void doReadPage() {
Long startTime = System.currentTimeMillis();
super.doReadPage();
Long endTime = System.currentTimeMillis();
Long timeTaken = endTime - startTime;
LOGGER.info("Data retrieved: page={}, timeTaken={}ms", getPage(), timeTaken);
}
}
</code>
public class BatchReader extends JpaPagingItemReader{
@BeforeStep
public void beforeStep(StepExecution stepExecution) {
JobExecution jobExecution = stepExecution.getJobExecution();
//Getting last_run_date here but unable to pass it down to the query provider.
Timestamp last_run_date = (Timestamp) jobExecution.getExecutionContext().get(BatchConstants.LAST_RUN_TIME);
}
}
@Override
protected void doReadPage() {
Long startTime = System.currentTimeMillis();
super.doReadPage();
Long endTime = System.currentTimeMillis();
Long timeTaken = endTime - startTime;
LOGGER.info("Data retrieved: page={}, timeTaken={}ms", getPage(), timeTaken);
}
}
What am I missing here? Please suggest.