加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 大数据 > 正文

数据处理---Spring Batch之实践

发布时间:2021-02-26 19:05:18 所属栏目:大数据 来源:网络整理
导读:副标题#e# 上面介绍了Spring Batch的基本概念和简单的demo项目,显然这些还是不够实际使用的。下面我们来更多的代码实践。 ? ? ? ? 在上面的基础项目上面,我们来更多的修改: ? ? ? ? 不用项目默认的hsql DB,用mysql,让ItemReader,ItemWriter 支持mysql;
副标题[/!--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&amp;characterEncoding=UTF-8&amp;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对象是这样的,很多不必要的都省略了

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读