RUVIDEO
Поделитесь видео 🙏

Spring Batch Tutorial

application.properties:
## PostgreSQL
spring.datasource.url=jdbc:postgresql://192.168.0.118:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=Numbernine9

#create tables
spring.jpa.hibernate.ddl-auto=update
spring.batch.initialize-schema=always

file.input=coffee-list.csv
---------------------------------------

coffee-list.csv:
Blue Mountain,Jamaica,Fruity
Lavazza,Colombia,Strong
Folgers,America,Smokey


---------------------------------------


batch config:
@Configuration
@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer {

@Autowired
public JobBuilderFactory jobBuilderFactory;

@Autowired
public StepBuilderFactory stepBuilderFactory;

@Value("${file.input}")
private String fileInput;

@Override
protected JobRepository createJobRepository() throws Exception {
MapJobRepositoryFactoryBean factoryBean = new MapJobRepositoryFactoryBean();
factoryBean.afterPropertiesSet();
return factoryBean.getObject();
}

@Bean
public FlatFileItemReader reader() {
return new FlatFileItemReaderBuilder().name("coffeeItemReader")
.resource(new ClassPathResource(fileInput))
.delimited()
.names(new String[] { "brand", "origin", "characteristics" })
.fieldSetMapper(new BeanWrapperFieldSetMapper() {{
setTargetType(Coffee.class);
}})
.build();
}

@Bean
public JdbcBatchItemWriter writer(DataSource dataSource) {
return new JdbcBatchItemWriterBuilder()
.itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider())
.sql("INSERT INTO coffee (brand, origin, characteristics) VALUES (:brand, :origin, :characteristics)")
.dataSource(dataSource)
.build();
}

@Bean
public Job importUserJob(JobCompletionNotificationListener listener, Step step1) {
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step1)
.end()
.build();
}

@Bean
public Step step1(JdbcBatchItemWriter writer) {
return stepBuilderFactory.get("step1")
.Coffee, Coffee chunk(10)
.reader(reader())
.processor(processor())
.writer(writer)
.build();
}

@Bean
public CoffeeItemProcessor processor() {
return new CoffeeItemProcessor();
}
}

----------

entity:
@Entity
public class Coffee {

@Id
private String brand;

private String origin;
private String characteristics;

public Coffee() {}

public Coffee(String brand, String origin, String characteristics) {
this.brand = brand;
this.origin = origin;
this.characteristics = characteristics;
}

public String getBrand() {
return brand;
}

public void setBrand(String brand) {
this.brand = brand;
}

public String getOrigin() {
return origin;
}

public void setOrigin(String origin) {
this.origin = origin;
}

public String getCharacteristics() {
return characteristics;
}

public void setCharacteristics(String characteristics) {
this.characteristics = characteristics;
}
}

-------------------------------------

item processor:

public class CoffeeItemProcessor implements ItemProcessor Coffee, Coffee {

private static final Logger LOGGER = LoggerFactory.getLogger(CoffeeItemProcessor.class);

@Override
public Coffee process(final Coffee coffee) throws Exception {
String brand = coffee.getBrand().toUpperCase();
String origin = coffee.getOrigin().toUpperCase();
String chracteristics = coffee.getCharacteristics().toUpperCase();

Coffee transformedCoffee = new Coffee(brand, origin, chracteristics);
LOGGER.info("Converting ( {} ) into ( {} )", coffee, transformedCoffee);

return transformedCoffee;
}
}

-----------------------------------
@Component
public class JobCompletionNotificationListener extends CompositeJobExecutionListener {

@Override
public void afterJob(JobExecution jobExecution) {
System.out.println(" ====== status = "+jobExecution.getStatus() );
if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
System.out.println("!!! JOB FINISHED! Time to verify the results = "+jobExecution);

}
}
}

Что делает видео по-настоящему запоминающимся? Наверное, та самая атмосфера, которая заставляет забыть о времени. Когда вы заходите на RUVIDEO, чтобы посмотреть онлайн «Spring Batch Tutorial», вы рассчитываете на нечто большее, чем просто загрузку плеера. И мы это понимаем. Контент такого уровня заслуживает того, чтобы его смотрели в HD 1080, без дрожания картинки и бесконечного буферизации.

Честно говоря, Rutube сегодня — это кладезь уникальных находок, которые часто теряются в общем шуме. Мы же вытаскиваем на поверхность самое интересное. Будь то динамичный экшн, глубокий разбор темы от любимого автора или просто уютное видео для настроения — всё это доступно здесь бесплатно и без лишних формальностей. Никаких «заполните анкету, чтобы продолжить». Только вы, ваш экран и качественный поток.

Если вас зацепило это видео, не забудьте взглянуть на похожие материалы в блоке справа. Мы откалибровали наши алгоритмы так, чтобы они подбирали контент не просто «по тегам», а по настроению и смыслу. Ведь в конечном итоге, онлайн-кинотеатр — это не склад файлов, а место, где каждый вечер можно найти свою историю. Приятного вам отдыха на RUVIDEO!

Видео взято из открытых источников Rutube. Если вы правообладатель, обратитесь к первоисточнику.