package com.batch.config;
import javax.sql.DataSource;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import com.batch.model.User;
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private DataSource dataSource;
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuildFactory;
@Bean
public FlatFileItemReader<User> reader() {
FlatFileItemReader<User> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("springbachdata.csv"));
reader.setLineMapper(getlineMapper());
reader.setLinesToSkip(1);
return reader;
}
private LineMapper<User> getlineMapper() {
DefaultLineMapper<User> lineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setNames(new String[] { "Emp ID", "Name Prefix", "First Name", "Last Name" });
lineTokenizer.setIncludedFields(new int[] { 0, 1, 2, 4 });
BeanWrapperFieldSetMapper<User> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
fieldSetMapper.setTargetType(User.class);
lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper(fieldSetMapper);
return lineMapper;
}
@Bean
public UserItemProcessor processor() {
return new UserItemProcessor();
}
public JdbcBatchItemWriter<User> writer() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<User>());
writer.setSql(
"insert into user(userId,namePrefix,firstName,lastName) values (:userId, :namePrefix, :firstName, :lastName)");
writer.setDataSource(this.dataSource);
return writer;
}
@Bean
public Job importUserJob() {
return this.jobBuilderFactory.get("USER-IMPORT-JOB")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
@Bean
public Step step1() {
return this.stepBuildFactory.get("step1")
.<User, User>chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
}
[2M2021-08-28 10:24:36.741[0;39M[32M信息[0;39M[35M10388[0;39M[2M----[0;39M[2M[main][0;39M[3M[2M:[0;39M步骤:[step1]在72ms内执行[0;39M[32M信息[0;39M[35M10388[0;39M[2M[2M----[0;39M[2M[2M[
main][0;39M[2M[2M[
main][0;39M[2M[2M[
main][0;39M[3]6mo.S.B.C.L.Support.SimpleJobLauncher[0;39m[2m:[0;39m job:[flowjob:[name=user-import-job]]完成,参数如下:[{run.id=4}],状态如下:[FAILED]in134ms'
块引号
请将LineMapper方法设为public并添加@bean注释。还要在JdbcBatchItemWriter方法上方添加@bean注释。
@Bean
public LineMapper<User> getlineMapper() {
DefaultLineMapper<User> lineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setNames(new String[] { "Emp ID", "Name Prefix", "First Name", "Last Name" });
lineTokenizer.setIncludedFields(new int[] { 0, 1, 2, 4 });
BeanWrapperFieldSetMapper<User> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
fieldSetMapper.setTargetType(User.class);
lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper(fieldSetMapper);
return lineMapper;
}
@Bean
public JdbcBatchItemWriter<User> writer() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<User>());
writer.setSql(
"insert into user(userId,namePrefix,firstName,lastName) values (:userId, :namePrefix, :firstName, :lastName)");
writer.setDataSource(this.dataSource);
return writer;
}
zapier中的Javascript代码 在Action类中,我正在获取请求数据 正在获取异常 java.lang.NullPointerException\n\tat java.io.StringReader
我知道为什么会出现错误:这是因为我想读取数据的表(Htest)为null。 我检查了我的excel,有一张正确名称为“htest”的表。 我还检查了工作簿中的工作表数。它返回工作簿的正确页数 我不知道为什么工作簿中的工作表是可用的,但代码返回null??我错过了什么?有人有同样的问题吗?或者你能给我一个提示来使用它吗? 谢谢你。 错误是:
我试图存根这个方法:QueryUtils.to顺序(排序,根,构建器)和我正在做 但它进入queryUtils方法体,它会说Sort为null,并抛出一个NPE。但是,当它是存根时,为什么需要进入方法体?我以前没有遇到过这个问题,我认为它不应该关心该方法的内部逻辑是什么。
我现在使用的是Itext PDFSmartCopy。我正在使用XMLWorker向document对象添加一些业务内容。然后我声明了一个阅读器(用于连接到此文档对象的pdf文件)。然后我用相同的文档对象和输出文件流作为参数调用PdfSmartCopy。然后使用常规步骤将页面复制到文档中, 但如果我使用一个新的文档对象ie而不添加业务内容,则这一块工作得很好。
我有一个3节点星火集群。并尝试使用snowflake spark连接器和jdbc驱动程序访问snowflake jdbc:snowflake-jdbc-3.12.4.jar spark-connector:spark-snowflake_2.11-2.7.0-spark_2.4.jar 下面是我的代码: 我在sdf.show()上的调用失败,但有以下例外情况。有什么建议吗?
每次运行代码(如下)时,我都会收到一个空指针错误,它指向用两个星号指定的行。 我是ApachePOI的新手,正在尝试将数据写入第二张excel表格(Sheet2)中的空白单元格。我做错什么了吗?