Spring-boot-integration mit spring batch und jpa

Ich bin für die Integration einer spring-boot-Projekt mit spring batch und data jpa-Projekt . Alle Sachen in Bezug auf Beruf und Daten-Konfiguration richtig ist, außer die anhaltende meinen job Schriftsteller Ergebnis in der Datenbank . nachdem ich eine Datei Lesen und verarbeiten zu können , ich kann nicht schreiben Sie es auf die mysql-Datenbank . Es ist kein Fehler, aber kein einfügen zu . interessant daran ist, dass meine Datenquelle konfiguriert ist . da vor dem einsetzen , kann ich Holen Sie sich eine Beispiel-Datensatz aus der Datenbank .bitte helfen Sie mir dieses problem zu lösen.

meiner Anwendung.Eigenschaften :

spring.datasource.url = jdbc:mysql://localhost:3306/batchtest?  characterEncoding=UTF-8&autoReconnect=true
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

batch-Konfiguration:

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;

@Bean
public ResourcelessTransactionManager transactionManager() {
    return new ResourcelessTransactionManager();
}

@Bean
public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception {
    MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager);
    mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);
    return mapJobRepositoryFactoryBean.getObject();
}

@Bean
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
    SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
    simpleJobLauncher.setJobRepository(jobRepository);
    return simpleJobLauncher;
}
@Bean
public FlatFileItemReader<Person> reader() {
    FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
    reader.setResource(new ClassPathResource("sample-data.csv"));
    reader.setLineMapper(new DefaultLineMapper<Person>() {{
        setLineTokenizer(new DelimitedLineTokenizer() {{
            setNames(new String[] { "firstName", "lastName" });
        }});
        setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
            setTargetType(Person.class);
        }});
    }});
    return reader;
}
@Bean
public PersonItemProcessor processor() {
    return new PersonItemProcessor();
}
@Bean
public ItemWriter<Person> writer() throws Exception {
    return new PersonWriter();
}
@Bean
public Job importUserJob() throws Exception{
    return jobBuilderFactory.get("importUserJob")
            .incrementer(new RunIdIncrementer())
            .flow(step1())
            .end()
            .build();
}
 @Bean
public Step step1() throws Exception{
    return stepBuilderFactory.get("step1")
            .<Person, Person> chunk(1)
            .reader(reader())
            .processor(processor())
            .writer(writer())
            .build();
}

Dao-Klasse :

public interface PersonDao extends CrudRepository<Person,Integer> {
}

writer-Klasse :

public class PersonWriter implements ItemWriter<Person> {
@Autowired
PersonDao personDao;

@Override
public void write(List<? extends Person> items) throws Exception {
    LOGGER.info("Received the information of {} students", items.size());
    for(Person person:items)
    {
        LOGGER.info(String.format("inserting for customre %s %s", person.getFirstName(), person.getLastName()));
        Person tempPerson = personDao.findOne(1);
        personDao.save(person) ;
        LOGGER.info(String.format("person id : %d",person.getId()));
    }

}

tempPerson ist ein Objekt für die Prüfung der jpa-Daten . es holt ein person-Objekt mit id 1 aus der Datenbank aber in der nächsten Zeile gibt es kein einfügen in Datenbank und kein Fehler. nur die Ausführung der Linie und weiterhin die Schleife.

  • Ich stehe vor einem ähnlichen Problem. Ein update auf diese Frage?
  • Ich weiß nichts über Spring batch, aber mit einem ResourceLessTransactionManager und ein MapJobRepositoryFactory dokumentiert ist, wie "in-memory-Persistenz-und Test-Zwecke" (docs.Frühling.io/spring-batch/trunk/Referenz/htmlsingle/...). Versuchen Sie es mit einem JPA transaction manager und einem echten JobRepository.
  • Du hast Recht, ich sollte Lesen Sie den Beitrag sorgfältig. Meine Frage ist daher anders. Ich bin wie es hier: stackoverflow.com/questions/38287298
InformationsquelleAutor kaveh.n | 2016-06-14
Schreibe einen Kommentar