Файл в файл основы - PullRequest
       4

Файл в файл основы

1 голос
/ 08 марта 2011

Будучи новичком в Spring Batch, я хотел начать с чего-то простого ... Чтение CSV-файла и запись тех же объектов (записей) в другой. Просто, не правда ли? Но я не смог найти рабочий образец. После некоторого времени исследований я обнаружил некоторые вещи, которые почти работают ... Файл, в который я хочу написать, всегда пуст. Это потому, что я использую ressourcelesstransactionmanager? Нужно ли где-то объявлять какое-то необязательное свойство, чтобы сбросить объект на моем жестком диске? Кстати, я нахожу документацию по этому вопросу очень легкой и запутанной для начинающего. Может быть, потому, что нужно зарабатывать весеннюю партию ... Вот злой, но очень простой код, который сводит меня с ума. ТИА.

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:batch="http://www.springframework.org/schema/batch"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"
    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-2.5.xsd
        http://www.springframework.org/schema/batch 
http://www.springframework.org/schema/batch/spring-batch-2.0.xsd
        http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-2.1.xsd">

    <bean id="jobRepository"
        class="org.springframework.batch.core.repository.support.SimpleJobRepository">
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapJobInstanceDao"/>
        </constructor-arg>
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapJobExecutionDao"/>
        </constructor-arg>
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapStepExecutionDao"/>
        </constructor-arg>
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapExecutionContextDao"/>
        </constructor-arg>
    </bean>

    <bean id="jobRepository-transactionManager"
        class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/>
    <bean id="jobLauncher"
        class="org.springframework.batch.core.launch.support.SimpleJobLauncher"
        p:jobRepository-ref="jobRepository"/>
    <!-- Les bean projet -->
    <bean id="csvReader"
        class="org.springframework.batch.item.file.FlatFileItemReader"
        p:resource="file:c:\AppPerso\csvManager\client.csv">
        <property name="lineMapper">
            <bean
                class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean
                        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"
                        p:delimiter=";"
                        p:names="client_id;client_status;client_name;client_surname;client_dnais;client_addr1;client_addr2;client_addr3;client_addr4"/>
                </property>
                <property name="fieldSetMapper">
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"
                        p:targetType="com.bigmac.spring.batch.csv.Client"/>
                </property>
            </bean>
        </property>
    </bean>

    <bean id="csvWriter"
        class="org.springframework.batch.item.file.FlatFileItemWriter">
        <property name="resource" value="file:c:\AppPerso\csvManager\client-reformat.csv"/>
        <property name="shouldDeleteIfExists" value="true"/>
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="delimiter" value=";"/>
                <property name="fieldExtractor">
                    <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="client_id;client_status;client_name;client_surname;client_dnais;client_addr1;client_addr2;client_addr3;client_addr4"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean> 

    <batch:job id="CSVManager" job-repository="jobRepository">
        <batch:step id="step1">
            <batch:tasklet
                transaction-manager="jobRepository-transactionManager">
                <batch:chunk 
                    reader="csvReader" 
                    writer="csvWriter" 
                    commit-interval="10"/>
            </batch:tasklet>
        </batch:step>
    </batch:job>

</beans>

1 Ответ

2 голосов
/ 08 марта 2011

Простите, ребята. Виноват. Я запутался с разделителями ... Отсутствие правильно настроенного log4j тоже не помогло.

Я поставил рабочую конфигурацию здесь.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:batch="http://www.springframework.org/schema/batch"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"
    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-2.5.xsd
        http://www.springframework.org/schema/batch 
http://www.springframework.org/schema/batch/spring-batch-2.0.xsd
        http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-2.1.xsd">

    <bean id="jobRepository"
        class="org.springframework.batch.core.repository.support.SimpleJobRepository">
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapJobInstanceDao"/>
        </constructor-arg>
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapJobExecutionDao"/>
        </constructor-arg>
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapStepExecutionDao"/>
        </constructor-arg>
        <constructor-arg>
            <bean
                class="org.springframework.batch.core.repository.dao.MapExecutionContextDao"/>
        </constructor-arg>
    </bean>

    <bean id="jobRepository-transactionManager"
        class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/>
    <bean id="jobLauncher"
        class="org.springframework.batch.core.launch.support.SimpleJobLauncher"
        p:jobRepository-ref="jobRepository"/>
    <!-- Les bean projet -->
    <bean id="csvReader"
        class="org.springframework.batch.item.file.FlatFileItemReader"
        p:resource="file:c:\AppPerso\springBatch\csvManager\client.csv">
        <property name="lineMapper">
            <bean
                class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean
                        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"
                        p:delimiter=";"
                        p:names="client_id,client_status,client_name,client_surname,client_dnais,client_addr1,client_addr2,client_addr3,client_addr4"/>
                </property>
                <property name="fieldSetMapper">
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"
                        p:targetType="com.bigmac.spring.batch.csv.Client"/>
                </property>
            </bean>
        </property>
    </bean>

    <bean id="csvWriter"
        class="org.springframework.batch.item.file.FlatFileItemWriter">
        <property name="resource" value="file:c:\AppPerso\springBatch\csvManager\client-reformat.csv"/>
        <property name="shouldDeleteIfExists" value="true"/>
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="delimiter" value=";"/>
                <property name="fieldExtractor">
                    <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="client_id,client_status,client_name,client_surname,client_dnais,client_addr1,client_addr2,client_addr3,client_addr4"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean> 

    <batch:job id="CSVManager" job-repository="jobRepository">
        <batch:step id="step1">
            <batch:tasklet
                transaction-manager="jobRepository-transactionManager">
                <batch:chunk 
                    reader="csvReader" 
                    writer="csvWriter" 
                    commit-interval="10"/>
            </batch:tasklet>
        </batch:step>
    </batch:job>

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