基于Java的Spring Batch-Xml配置性能

时间:2015-06-16 14:09:12

标签: spring spring-batch

我正在尝试将弹簧批量配置从基于xml的转换为基于注释。

以下是基于xml的配置。

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

    <!-- Step will need a transaction manager -->
    <bean id="transactionManager"
        class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

<bean id="dbMapper" class="org.test.DBValueMapper">
   </bean>

    <bean id="dbMapperFlatfile" class="org.test.FlatFileRowMapper">
   </bean>

   <bean id="paramSetter" class="org.test.DBParamSetter">
   </bean>
   <bean id="dbReader" class="org.test.DBValueReader"
        scope="step">
        <property name="paramSetter" ref="paramSetter"/>
        <property name="verifyCursorPosition" value="false" />
        <property name="dataSource" ref="dataSource" />
        <property name="sql" value="#{jobParameters['SQL_QUERY']}" />
        <property name="rowMapper" ref="dbMapper" />
        <property name="fetchSize" value="5000" />
    </bean>

<bean id="dbWriterIO" class="org.test.TemplateWritterIO"
        scope="step">
        <property name="velocityEngine" ref="velocityEngine" />
<!--        <property name="rptConfig" value="#{jobParameters['RPT_CONFIGVAL']}" /> -->
        <property name="headerCallback" ref="dbWriterIO" />
        <property name="footerCallback" ref="dbWriterIO" />
    </bean>

<batch:job id="fileGenJobNio">
        <batch:step id="fileGenJobStempNio">
            <batch:tasklet>
                <batch:chunk reader="dbReader" writer="dbWriterNIO" 
                    commit-interval="5000">
                </batch:chunk>
            </batch:tasklet>
        </batch:step>
    </batch:job>

以下是基于Java的等效配置:

    @EnableBatchProcessing
    @Import({ServiceConfiguration.class})
    public class SRBatchGenerator extends DefaultBatchConfigurer{

        @Autowired
        private JobBuilderFactory jobBuilders;


        @Autowired
        private StepBuilderFactory stepBuilders;

        @Autowired
        private VelocityEngine velocityEngine;

         @Autowired
         private DBValueMapper mapper;

         @Autowired
         private DbHelper dbhelper;

        @Autowired
        private DataSource datasource;

        @Bean
        public Step step(){
            return stepBuilders.get("step")
                    .chunk(5000)
                    .reader(reader())
                    //.processor(processor())
                    .writer(writer())
                    //.listener(logProcessListener())
                    .faultTolerant()
                    //.skipLimit(10)
                    //.skip(UnknownGenderException.class)
                    //.listener(logSkipListener())
                    .build();
        }


        @Bean
        public Job fileGeneratorJob(){
            return jobBuilders.get("fileGeneratorJob")
                    //.listener(protocolListener())
                    .start(step())
                    .build();
        }

        @Bean
        public DBValueMapper mapper(){
            return new DBValueMapper();
        }

        @Bean
        @StepScope
        public DBValueReader3 reader(){
            String query="Select Test1,Test2,test3,test4 from RPt_TEST";
            DBValueReader3 dbread = new DBValueReader3();
            dbread.setSql(query);
            dbread.setRowMapper(mapper);
            dbread.setDataSource(datasource);
            return dbread;
        }

        @Bean
        @StepScope
        public TemplateWritterIO writer(){
            TemplateWritterIO writer=new TemplateWritterIO();
            writer.setVelocityEngine(velocityEngine);
            return writer;
        }



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

    }

当我使用xml执行我的Job时,花了27秒将1百万条记录写入Flat文件。

但要写出相同的100万条记录,基于Java的工作大约需要2个小时才能完成。

我不确定我在这里缺少什么。任何人都可以帮助我或指导我为什么它在基于Java的配置中很慢。

0 个答案:

没有答案