| 副标题[/!--empirenews.page--] 
        
            上面介绍了Spring Batch的基本概念和简单的demo项目,显然这些还是不够实际使用的。下面我们来更多的代码实践。 ? ? ? ? 在上面的基础项目上面,我们来更多的修改: ? ? ? ? 不用项目默认的hsql DB,用mysql,让ItemReader,ItemWriter 支持mysql; ? ? ? ? 支持处理结果自定义保存到数据库,我们用项目里面的JPA; ? ? ? ? 让Quartz来定时调用spring batch的Job ? ? ? ? 可以读取文件,而不只是数据库; 下面开始动手。 ? ? ? ? ? 修改pom.xml,节选部分,实在太长了。 ? ? ? ? ? <spring.framework.version>3.2.0.RELEASE</spring.framework.version>? ? ? ? ? <spring.batch.version>2.1.7.RELEASE</spring.batch.version> ? <!-- ?这个的版本和quartz的版本要注意,不然很容易在运行的时候出错 -->
 
 <dependency><groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.23</version>
 </dependency>
 <dependency>
 <groupId>org.springframework.data</groupId>
 <artifactId>spring-data-jpa</artifactId>
 <version>1.3.2.RELEASE.rebuild</version>
 </dependency>
 <dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-core</artifactId>
 <version>3.6.10.Final</version>
 </dependency>
 <dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-entitymanager</artifactId>
 <version>3.6.10.Final</version>
 </dependency>
 <dependency>
 <groupId>org.quartz-scheduler</groupId>
 <artifactId>quartz</artifactId>
 <version>2.1.7</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context-support</artifactId>
 <version>3.2.0.RELEASE</version>
 </dependency>
 
 launch-context.xml定义需要用到的bean,
 <bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
 <property name="persistenceUnitName" value="spring" />
 <property name="dataSource" ref="dataSource" />
 <property name="jpaDialect">
 ? ? <bean class="com.test.batch.CustomHibernateJpaDialect" />
 ? </property>
 <property name="loadTimeWeaver">
 <bean
 class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
 </property>
 </bean>
 <bean id="dataSource"
 class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="com.mysql.jdbc.Driver" />
 <property name="url"
 value="jdbc:mysql://localhost:3306/testbatch?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true" />
 <property name="username" value="root" />
 <property name="password" value="root" />
 </bean>
 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
 <property name="entityManagerFactory" ref="entityManagerFactory" />
 <property name="dataSource" ref="dataSource" />
 </bean>
 <bean id="customerMapper" class="com.test.batch.CustomerMapper"></bean>
 <bean id="lineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"></bean>
 ? ? ? ? <!-- ? 这个可以让spring batch和hibernate共用
 <bean id="itemReader"
 class="org.springframework.batch.item.database.HibernateCursorItemReader">
 <property name="sessionFactory" ref="sessionFactory" />
 <property name="queryString" value="from CustomerCredit" />
 </bean>
 -->
 <bean id="itemReaderFile" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
 <property name="lineMapper">
 <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
 <property name="lineTokenizer" ref="lineTokenizer"/>
 <property name="fieldSetMapper" ref="customerMapper"/>
 </bean>  ??
 </property>
 <!-- <property name="resource" value="file:#{jobParameters['customFileAbPath']}"/> ? 配置读取文件的路径,我固定了 ? ? ? -->
 <property name="resource" value="file:D:/temp/testdata.txt"/>
 </bean>
 <bean id="itemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
 ? ? <property name="dataSource" ref="dataSource"/>
 ? ? <property name="sql" value="select ID,NAME,CREDIT from CUSTOMER"/>
 ? ? <property name="rowMapper">
 ? ? ? ? <bean class="com.test.batch.CustomerCreditRowMapper"/>
 ? ? </property>
 ? ? <property name="fetchSize" value="100"></property>
 ? ? <property name="maxRows" value="10000"></property>
 </bean>
 
 <jdbc:initialize-database data-source="dataSource">
 <!-- <jdbc:script location="${batch.schema.script}" /> -->
 <jdbc:script location="org/springframework/batch/core/schema-drop-mysql.sql" />
 <jdbc:script location="org/springframework/batch/core/schema-mysql.sql" />
 </jdbc:initialize-database
 
 <!-- batch:job-repository id="jobRepository" / -->
 <batch:job-repository id="jobRepository"
 data-source="dataSource" transaction-manager="transactionManager"
 isolation-level-for-create="SERIALIZABLE" table-prefix="BATCH_" />
 ? ? ? ? <!-- 下面是Quartz调用spring batch 的job要用到的 -->
 ? ? ? ? <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 <property name="triggers">
 <list><ref bean="scheduledTrigger"></ref></list>
 </property>
 </bean>
 
 <bean id="scheduledTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
 ? ? <property name="jobDetail" ref="jobDetail"/>
 ? ? <property name="cronExpression">
 ? ? ? ? <value>*/10 * * * * ?</value>
 ? ? </property>
 </bean>
 
 <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
 <property name="jobClass" value="com.test.batch.JobLauncherDetails" />
 <property name="jobDataAsMap">
 <map>
 <entry key="jobName" value="job1" /> ?<!--指定jobID -->
 <entry key="jobLocator" value-ref="jobRegistry" />
 <entry key="jobLauncher" value-ref="jobLauncher" />
 <entry key="param1" value="p1" />
 <entry key="param2" value="p2" />
 </map>
 </property>
 <property name="durability" value="true" />
 </bean>
 
 ? ? ? ? <bean id="jobLauncher"
 class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
 <property name="jobRepository" ref="jobRepository" />
 ? </bean>
 
 ? <bean
 class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
 <property name="jobRegistry" ref="jobRegistry" />
 ? ? ? ?</bean>
 
 ? ? ? ?<bean id="jobRegistry"?class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
 
 <import resource="classpath:/META-INF/spring/module-context.xml" />
 
 
 有几个定制的东西,需要说下。 我们用到的domain对象是这样的,很多不必要的都省略了 (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |