Весенняя партия с аннотацией - PullRequest
6 голосов
/ 04 января 2012

Я новичок в Spring batch, ищу пример, разработанный Spring, с аннотацией .

Эта ссылка ( click ) говорит о Spring batch, но не Пружинная партия с концепцией аннотации .Как обсуждено в данной ссылке, документация не ясна.Я использую последний Spring Framework.Я хочу избежать настройки XML.

Является ли Spring batch очень хорошим инструментом для пакетной обработки?или есть ли лучшие инструменты для пакетной обработки вместо Spring batch?

Есть ли какие-либо ограничения в пакете Spring?

Ответы [ 6 ]

3 голосов
/ 04 января 2012

Spring batch поддерживает только ограниченную функциональность, которую вы можете настроить с помощью аннотаций.В основном это обратные вызовы слушателей, например @BeforeStep или @AfterChunk.Использование этих аннотаций дает вам возможность либо реализовать соответствующие интерфейсы, либо использовать аннотированные методы.Аннотированный компонент должен быть введен в задание, шаг или чанк (reader, processor, writer, retry-policy, skip-policy или listeners) в конфигурации XML, чего вы не можете избежать.

2 голосов
/ 05 мая 2018

Я работал с Spring Batch около 2,5 лет, и я предлагаю вам использовать xml-файлы для настройки ваших заданий, а не аннотаций. Конечно, вы можете использовать аннотации для стольких конфигураций, как step и job определение, хранилище заданий и хранилище заданий определение, tasklet и listeners, deciders и так много других необходимых компонентов. Но, к сожалению, мне так сложно соединять компоненты, особенно когда вы вынуждены использовать partitioners. Вы можете получать прибыль с помощью аннотаций в случае отладки, но будет гораздо проще отслеживать поток работы в случае XML, потому что у вас есть все ваши конфигурации в одном XML-файле (и, возможно, больше файлов, если вы хотите сделать его более читабельным) .

1 голос
/ 14 июня 2013

Посмотрите ли вы на http://www.joshlong.com/jl/blogPost/java_configuration_with_spring_batch.html

Если вы определили все необходимые объекты "bean" в методе main, вы можете просто получить их в контексте приложения.

ApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
job = (Job) ctx.getBean("SOME JOB");
jobLauncher = (JobLauncher) ctx.getBean("jobLauncher");
jobLauncher.run(job, jobParams);
0 голосов
/ 02 января 2018

Я столкнулся с той же проблемой, когда читал о пакетных аннотациях Spring. Лучшее место, где вы можете прочитать о весенних аннотациях - это справочная документация . Концепции одинаковы для пакета независимо от того, используется ли XML или Java.

Я бы предложил следующие шаги:

  • Исследование о концепциях партии
  • Попробуйте сделать простые пакетные приложения (чтение из базы данных и сохранение в CSV)
  • Когда-то освоившись с основными понятиями, изучайте книги типа Spring Batch Pro.
  • Если вы столкнулись с проблемой, поищите в Интернете код, а затем сопоставьте его с вышеупомянутой документацией Spring.
0 голосов
/ 22 августа 2017

Пожалуйста, ознакомьтесь с моим учебным пособием вместе с репозиторием github , возможно, оно будет вам полезно.

Spring Batch, как и любой другой инструмент, имеет свои ограничения, но все же достаточно гибок.Я использую его в реальном проекте с 1500 различными работающими заданиями, и я думаю, что он довольно хорош и охватывает множество случаев использования в приложениях пакетной обработки.

0 голосов
/ 22 августа 2016

В этом примере я использовал следующие технологии: Spring batch 3.0.5.RELEASE,

JDK 1.7,

Eclipse Mars Release (4.5.0),

Maven3.3.3,

Springframework 4.0.5.ReLEASE.

Шаг 1: Создание простого POJO, Employee.java

public class Employee {

private  String name;
private  String empId;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEmpId() {
    return empId;
}
public void setEmpId(String empId) {
    this.empId = empId;
}
@Override
public String toString() {
    return "Employee [name=" + name + ", empId=" + empId + "]";
}
}

Шаг 2: Создание класса Java, ClassReader.java

package com.batch.main;

import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.batch.beans.Employee;

@Component("classReader")
public class ClassReader implements ItemReader<Employee> {

@Override
public Employee read() throws Exception, UnexpectedInputException,           ParseException, NonTransientResourceException {

    Employee emp=new Employee();
    //Set values in Employee object
    emp.setEmpId("123456");
    emp.setName("Manohar");
    System.out.println("Inside ClassReader..." + emp);
    return emp;
}

}

Шаг 3: Создание класса Java, ClassProcessor.java

package com.batch.main;

import org.springframework.batch.item.ItemProcessor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.batch.beans.Employee;

@Component("classProcesser")
public class ClassProcessor  implements ItemProcessor<Employee, Employee>{

@Override
public Employee process(Employee emp) throws Exception {
    System.out.println("Inside ClassProcessor..." + emp);
    return emp;
}

}

Шаг 4: Создание класса Java, ClassWriter.java

package com.batch.main;

import java.util.List;
import org.springframework.batch.item.ItemWriter;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.batch.beans.Employee;

@Component("classWriter")
public class ClassWriter implements ItemWriter<Employee> {

@Override
public void write(List<? extends Employee> arg0) throws Exception {

    System.out.println("Inside ClassWriter..." + arg0);

}

}

Шаг 5: Создание context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:tx="http://www.springframework.org/schema/tx"                xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

<bean id="transactionManager"
class="org.springframework.batch.support.transaction.
ResourcelessTransactionMana ger" />

<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.
MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
</bean>

<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>


</beans>

Шаг 6: Создать файл job.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:batch="http://www.springframework.org/schema/batch"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:task="http://www.springframework.org/schema/task"     xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:util="http://www.springframework.org/schema/util"     xmlns:crypt="http://springcryptoutils.com/schema/crypt"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 http://www.springframework.org/schema/batch     http://www.springframework.org/schema/batch/spring-batch-3.0.xsd
 http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
 http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.0.xsd
 http://www.springframework.org/schema/util     http://www.springframework.org/schema/util/spring-util-3.0.xsd
 http://springcryptoutils.com/schema/crypt     http://springcryptoutils.com/schema/crypt.xsd
 http://www.springframework.org/schema/task     http://www.springframework.org/schema/task/spring-task-3.2.xsd">

<import resource="/context.xml" />

<context:component-scan base-package="com.batch" />

<batch:job id="loadJob" xmlns="http://www.springframework.org/schema/batch">
  <batch:step id="step1" >
    <batch:tasklet>
     <batch:chunk reader="classReader" writer="classWriter"
     processor="classProcesser" commit-interval="1" />
    </batch:tasklet>
  </batch:step>
</batch:job>

<!-- <bean id="classReader" class="com.batch.main.ClassReader" >

</bean>

<bean id="classWriter" class="com.batch.main.ClassWriter" ></bean>

<bean id="classProcesser" class="com.batch.main.ClassProcessor" > </bean>-->

Шаг 7: Окончательно создать Main.java

package com.batch.main;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersInvalidException;
import org.springframework.batch.core.launch.JobLauncher;
import     org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import     org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import        org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;


@Configuration
@ImportResource({"classpath:/com/spring/job/job.xml"})//load configuration       file from classpath
 public class Main {

 public static void main(String[] args) throws              JobExecutionAlreadyRunningException, 
JobRestartException,         
JobInstanceAlreadyCompleteException, JobParametersInvalidException {
@SuppressWarnings("resource")
AnnotationConfigApplicationContext context = new             AnnotationConfigApplicationContext();
     context.register(Main.class);
     context.refresh();
     //load jobLauncher details from context.xml file
      JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
      //load Job details from job.xml file
       Job job = (Job) context.getBean("loadJob");
       //run job
       JobExecution execution = jobLauncher.run(job, new JobParameters());
       System.out.println("Exit Status : " + execution.getStatus());
         }
}

Запустите программу вышекак приложение Java, вы увидите вывод на консоли.

Пожалуйста, обратитесь к http://manohark.com/simple-spring-batch-example-using-annotations/ для получения полной информации.

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