jdbccursoritemreader не в состоянии запросить данные из SQL DB, поэтому он не собирается использовать метод MapRow Rowmappper, и в консоли нет ошибки. Где, как jdbctemplate, способный получать данные из DB, используя тот же запрос
config class < /p>
@EnableBatchProcessing
@Configuration
public class config {
@Autowired
DataSource datasource;
@Bean
public Job job(JobRepository jobRepository, Step step) {
return new JobBuilder("employeeData", jobRepository)
.start(step)
.build();
}
@Bean
public Step step(JobRepository jobRepository, PlatformTransactionManager manager) throws Exception {
return new StepBuilder("data_import",jobRepository)
.chunk(100, manager)
.reader (readItemt)
// .processor (null)
.writer(writeItem()).build();
}
@Bean
public JdbcCursorItemReader readItem() throws Exception{
// JdbcTemplate jdbcTemplate = new JdbcTemplate(datasource);
// List customerCredits = jdbcTemplate.query("SELECT * FROM testdb.employee",new EmpRowMapper());
// System.out.println("2nd value " +customerCredits.get(0).getEmpName());
JdbcCursorItemReader reader = new JdbcCursorItemReader();
ExecutionContext executionContext = new ExecutionContext();
reader.setDataSource(datasource);
reader.setRowMapper(new EmpRowMapper());
reader.setSql("SELECT * FROM testdb.employee");
reader.open(executionContext);
reader.setFetchSize(10);
System.out.println(reader.read());
System.out.println(datasource.getClass().getName());
com.zaxxer.hikari.HikariDataSource ds = (com.zaxxer.hikari.HikariDataSource) datasource;
System.out.print1n("JDBC URL:"+ ds.getJdbcUrl());
System.out.println("Username:" + ds.getUsername());
System.out.print1n("Username:" + ds.getPassword());
ds.setConnectionTestQuery("SELECT empid FROM testdb.employee;");
System.out.println("Username: " + ds.isRunning());
reader.close();
return reader;
}
//@Bean
//public JdbcCursorItemReader readItem() {
// return new JdbcCursorItemReaderBuilder()
// dataSource(datasource)
// .sql("SELECT * FROM testdb.employee")
// .rowMapper(new EmpRowMapper())
// .build();
//}
@Bean
public FlatFileItemWriter writeItem(){
FlatFileItemWriter writer = new FlatFileItemWriter();
writer.setResource(new FileSystemResource("Downloads/CSV File/output.csv"));
writer.setHeaderCallback(writer1 -> writer1.write("EmpId, EmpName,EmpRole,EmpSalary"));
DelimitedLineAggregator aggregator = new DelimitedLineAggregator();
aggregator.setDelimiter(",");
BeanWrapperFieldExtractor extractor = new BeanWrapperFieldExtractor();
extractor.setNames(new String[] {"empId", "empName", "empRole", "empSalary"});
aggregator.setFieldExtractor(extractor);
writer.setLineAggregator(aggregator);
System.out.println("Item writer");
return writer;
}
}
< /code>
Интерфейс репозитория < /p>
@Repository
public interface EmpRepository extends JpaRepository{
}
< /code>
closmapper class < /p>
@Component
public class EmpRowMapper implements RowMapper{
@Override
public EmpPojo mapRow(ResultSet rs, int rowNum) throws SQLException {
System.out.println("Mapping row: " + rs);
EmpPojo emp = new EmpPojo();
emp.setEmpId(rs.getInt("EmpId"));
emp.setEmpName(rs.getString("EmpName"));
emp.setEmpRole(rs.getString("EmpRole"))
emp.setEmpSalary(rs.getInt("EmpSalary"));
System.out.println("row: "+ rs.getString("EmpName"));
return emp;
}
}
< /code>
application.properties
spring.application.name employeeTest
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=idbc:mysq1://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql: true
spring.data.jdbc.repositories.enabled=false
spring.batch.jdbc.initialize-schema=always
server.port:8085
< /code>
Подключение к базе данных хорошо, проверено.
запрос правильный, проверяется в дБ. Метод
Подробнее здесь: https://stackoverflow.com/questions/796 ... here-as-jd
Весенняя партия JDBCcurSoritemReader не может запросить данные из SQL DB, где в качестве JDBCTemplate можно получить ⇐ MySql
Форум по Mysql
1748416309
Anonymous
jdbccursoritemreader не в состоянии запросить данные из SQL DB, поэтому он не собирается использовать метод MapRow Rowmappper, и в консоли нет ошибки. Где, как jdbctemplate, способный получать данные из DB, используя тот же запрос
config class < /p>
@EnableBatchProcessing
@Configuration
public class config {
@Autowired
DataSource datasource;
@Bean
public Job job(JobRepository jobRepository, Step step) {
return new JobBuilder("employeeData", jobRepository)
.start(step)
.build();
}
@Bean
public Step step(JobRepository jobRepository, PlatformTransactionManager manager) throws Exception {
return new StepBuilder("data_import",jobRepository)
.chunk(100, manager)
.reader (readItemt)
// .processor (null)
.writer(writeItem()).build();
}
@Bean
public JdbcCursorItemReader readItem() throws Exception{
// JdbcTemplate jdbcTemplate = new JdbcTemplate(datasource);
// List customerCredits = jdbcTemplate.query("SELECT * FROM testdb.employee",new EmpRowMapper());
// System.out.println("2nd value " +customerCredits.get(0).getEmpName());
JdbcCursorItemReader reader = new JdbcCursorItemReader();
ExecutionContext executionContext = new ExecutionContext();
reader.setDataSource(datasource);
reader.setRowMapper(new EmpRowMapper());
reader.setSql("SELECT * FROM testdb.employee");
reader.open(executionContext);
reader.setFetchSize(10);
System.out.println(reader.read());
System.out.println(datasource.getClass().getName());
com.zaxxer.hikari.HikariDataSource ds = (com.zaxxer.hikari.HikariDataSource) datasource;
System.out.print1n("JDBC URL:"+ ds.getJdbcUrl());
System.out.println("Username:" + ds.getUsername());
System.out.print1n("Username:" + ds.getPassword());
ds.setConnectionTestQuery("SELECT empid FROM testdb.employee;");
System.out.println("Username: " + ds.isRunning());
reader.close();
return reader;
}
//@Bean
//public JdbcCursorItemReader readItem() {
// return new JdbcCursorItemReaderBuilder()
// dataSource(datasource)
// .sql("SELECT * FROM testdb.employee")
// .rowMapper(new EmpRowMapper())
// .build();
//}
@Bean
public FlatFileItemWriter writeItem(){
FlatFileItemWriter writer = new FlatFileItemWriter();
writer.setResource(new FileSystemResource("Downloads/CSV File/output.csv"));
writer.setHeaderCallback(writer1 -> writer1.write("EmpId, EmpName,EmpRole,EmpSalary"));
DelimitedLineAggregator aggregator = new DelimitedLineAggregator();
aggregator.setDelimiter(",");
BeanWrapperFieldExtractor extractor = new BeanWrapperFieldExtractor();
extractor.setNames(new String[] {"empId", "empName", "empRole", "empSalary"});
aggregator.setFieldExtractor(extractor);
writer.setLineAggregator(aggregator);
System.out.println("Item writer");
return writer;
}
}
< /code>
Интерфейс репозитория < /p>
@Repository
public interface EmpRepository extends JpaRepository{
}
< /code>
closmapper class < /p>
@Component
public class EmpRowMapper implements RowMapper{
@Override
public EmpPojo mapRow(ResultSet rs, int rowNum) throws SQLException {
System.out.println("Mapping row: " + rs);
EmpPojo emp = new EmpPojo();
emp.setEmpId(rs.getInt("EmpId"));
emp.setEmpName(rs.getString("EmpName"));
emp.setEmpRole(rs.getString("EmpRole"))
emp.setEmpSalary(rs.getInt("EmpSalary"));
System.out.println("row: "+ rs.getString("EmpName"));
return emp;
}
}
< /code>
application.properties
spring.application.name employeeTest
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=idbc:mysq1://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql: true
spring.data.jdbc.repositories.enabled=false
spring.batch.jdbc.initialize-schema=always
server.port:8085
< /code>
Подключение к базе данных хорошо, проверено.
запрос правильный, проверяется в дБ. Метод
Подробнее здесь: [url]https://stackoverflow.com/questions/79636084/spring-batch-jdbccursoritemreader-not-able-to-query-data-from-sql-db-where-as-jd[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия