Spring Batch (2)

来源:互联网 发布:mysql怎么快速替换东西 编辑:程序博客网 时间:2024/06/05 14:16

                      使用spring batch 批处理csv文件的数据再把处理的数据放到mysql

POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.springbatch.hello</groupId>  <artifactId>SpringBatch2Demo</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>SpringBatch2Demo</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>  <dependency> <groupId>org.springframework.batch</groupId>  <artifactId>spring-batch-core</artifactId>  <version>3.0.6.RELEASE</version>  </dependency>  <!--  quartz Dependency --> <dependency>    <groupId>org.quartz-scheduler</groupId>    <artifactId>quartz</artifactId>    <version>2.2.1</version></dependency> <!-- Apache DBCP-->    <dependency>        <groupId>commons-dbcp</groupId>        <artifactId>commons-dbcp</artifactId>        <version>1.4</version>    </dependency>       <!-- Mysql Dependency -->   <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>5.1.25</version>    </dependency>        <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>        <dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-jdbc</artifactId>    <version>4.2.4.RELEASE</version>    </dependency>  </dependencies></project>

实体类user

package com.springbatch.hello.SpringBatch2Demo;public class User {   private  String name;   private   int    age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}     }

实体类Message

package com.springbatch.hello.SpringBatch2Demo;public class Message {         private String content;public String getContent() {return content;}public void setContent(String content) {this.content = content;}     }

实现的ItemProccess接口

package com.springbatch.hello.SpringBatch2Demo;import org.springframework.batch.item.ItemProcessor;public class MessageProcessor implements ItemProcessor<User, Message> {      public Message process(User item) throws Exception {          Message message = null;                 if (item.getAge() > 16) {              message = new Message();              message.setContent(item.getName());                                   }          return message;      }  }


实现ItemWriter接口

package com.springbatch.hello.SpringBatch2Demo;import java.util.List;import org.springframework.batch.item.ItemWriter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;public class MessageWriter2 implements ItemWriter<Message> {      private static final String INSERT_MESSAGE = " insert into message values (?) ";private JdbcTemplate jdbcTemplate;@Autowired public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void write(List<? extends Message> items) throws Exception    {        for(Message item : items )        {        int count=jdbcTemplate.update(INSERT_MESSAGE,new Object[] {item.getContent()} );            System.out.println("影响了:"+count+" 行");        }    }        }  


message_job.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:batch="http://www.springframework.org/schema/batch"       xmlns:jdbc="http://www.springframework.org/schema/jdbc"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd                http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd                http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd"><context:annotation-config />    <!-- Component scan to find all Spring components -->    <context:component-scan base-package="com.springbatch.hello.SpringBatch2Demo" /><!-- http://www.cnblogs.com/gulvzhe/archive/2011/11/06/2238125.html  配置文件解析 --><batch:job id="messageJob">      <batch:step id="messageStep">          <batch:tasklet>              <batch:chunk reader="messageReader" processor="messageProcessor" writer="messageWriter"                           commit-interval="2"                           chunk-completion-policy="">              </batch:chunk>          </batch:tasklet>      </batch:step>  </batch:job>  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">           <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>           <property name="url"      value="jdbc:mysql://localhost:3306/springbatchtest"></property>           <property name="username"     value="root"></property>           <property name="password" value="123456liu"></property>        </bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">         <property name="dataSource" ref="dataSource"></property></bean><bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">      <property name="transactionManager" ref="transactionManager"/>  </bean>  <bean id="messageReader" class="org.springframework.batch.item.file.FlatFileItemReader">  <property name="lineMapper" ref="lineMapper"></property>  <property name="resource" value="user.csv"></property></bean><bean id="lineMapper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper">  <property name="lineTokenizer" ref="lineTokenizer"></property>  <property name="fieldSetMapper" ref="fieldSetMapper"></property></bean><bean id="fieldSetMapper" class="com.springbatch.hello.SpringBatch2Demo.UserMapper"></bean>  <bean id="lineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"/>    <bean id="messageProcessor" class="com.springbatch.hello.SpringBatch2Demo.MessageProcessor"/>  <bean id="messageWriter" class="com.springbatch.hello.SpringBatch2Demo.MessageWriter2"/>   <!-- <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager">             <property name="dataSource" ref="dataSource"/></bean>  --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">            <property name="dataSource" ref="dataSource"/></bean> </beans>

user.csv文件

TWer1,18TWer2,21TWer3,13TWer4,16TWer5,25TWer6,45TWer7,200TWer121,23

数据库message表只有一个mess的varchar(300)的字段

测试类

package com.springbatch.hello.SpringBatch2Demo;import org.springframework.batch.core.Job;import org.springframework.batch.core.JobParameters;import org.springframework.batch.core.launch.support.SimpleJobLauncher;import org.springframework.batch.core.repository.JobRepository;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.core.task.SimpleAsyncTaskExecutor;public class MainTest {  //Reference blog  http://ningandjiao.iteye.com/blog/1616584    public static void main(String[] args) {          ClassPathXmlApplicationContext c =                    new ClassPathXmlApplicationContext("message_job.xml");                  SimpleJobLauncher launcher = new SimpleJobLauncher();          launcher.setJobRepository((JobRepository) c.getBean("jobRepository"));          launcher.setTaskExecutor(new SimpleAsyncTaskExecutor());          Job job=(Job) c.getBean("messageJob");        try {               launcher.run(job, new JobParameters());          } catch (Exception e) {          e.printStackTrace();          }      }  }  


结果:

Aug 30, 2017 9:17:42 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@41cf53f9: startup date [Wed Aug 30 09:17:42 CST 2017]; root of context hierarchyAug 30, 2017 9:17:42 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [message_job.xml]Aug 30, 2017 9:17:44 AM com.mchange.v2.log.MLog <clinit>INFO: MLog clients using java 1.4+ standard logging.Aug 30, 2017 9:17:44 AM com.mchange.v2.c3p0.C3P0Registry bannerINFO: Initializing c3p0-0.9.1.1 [built 15-March-2007 01:32:31; debug? true; trace: 10]Aug 30, 2017 9:17:45 AM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManagerINFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 2yri2z9qdilt3z1l1ptjh|1ed1993a, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2yri2z9qdilt3z1l1ptjh|1ed1993a, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/springbatchtest, lastAcquisitionFailureDefaultUser -> null, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]Aug 30, 2017 9:17:47 AM org.springframework.batch.core.launch.support.SimpleJobLauncher runINFO: Job: [FlowJob: [name=messageJob]] launched with the following parameters: [{}]Aug 30, 2017 9:17:47 AM org.springframework.batch.core.job.SimpleStepHandler handleStepINFO: Executing step: [messageStep]影响了:1 行影响了:1 行影响了:1 行影响了:1 行影响了:1 行影响了:1 行Aug 30, 2017 9:17:47 AM org.springframework.batch.core.launch.support.SimpleJobLauncher runINFO: Job: [FlowJob: [name=messageJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]

参考博客:

http://ningandjiao.iteye.com/blog/1616584


http://blog.csdn.net/renfufei/article/details/45894875


spring 配置数据源的方式(只包含hibernate)


配置文件解析

原创粉丝点击