全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

spring batch 读取多个文件数据导入数据库示例

项目的目录结构

需要读取文件的的数据格式

applicatonContext.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:p="http://www.springframework.org/schema/p"
  xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  http://www.springframework.org/schema/tx 
  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
  http://www.springframework.org/schema/aop 
  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
  http://www.springframework.org/schema/context 
  http://www.springframework.org/schema/context/spring-context-3.0.xsd"
  default-autowire="byName">
  <context:component-scan base-package="com.aliyun.springbatch" />
  
  <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository"/>
  </bean>
  <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
    <property name="transactionManager" ref="transactionManager"></property>
  </bean>  
  <bean id="transactionManager"
    class="org.springframework.batch.support.transaction.ResourcelessTransactionManager">
  </bean>   
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
     <property name="dataSource" ref="dataSource"></property>
   </bean>
   
   
   
   <!-- 引入外部数据源配置信息 -->
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <value>classpath:com/aliyun/springbatch/sample/db/jdbc.properties</value>
    </property>
  </bean>
   <!-- 配置数据源 -->
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driver}"></property>
    <property name="url" value="${jdbc.url}"></property>
    <property name="username" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
  </bean>
</beans>

batch.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<bean:beans xmlns="http://www.springframework.org/schema/batch"
  xmlns:bean="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
  xmlns:util="http://www.springframework.org/schema/util"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/batch 
http://www.springframework.org/schema/batch/spring-batch-3.0.xsd 
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

  <!-- <bean:import resource="dataSource.xml" /> -->
  <bean:import resource="applicationContext.xml" />
  <!-- Job的配置信息 -->
  <!-- commit-interval="1" 表示每处理完1条数据提交一次事务 -->
  <job id="dbJob">
    <step id="dbReadAndWriterStep" >
      <tasklet>
        <chunk reader="userReader" writer="jdbcItemWriter"
          commit-interval="1">
        </chunk>
      </tasklet>
    </step>
  </job>

  <!-- <bean:bean id="jdbcItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader" 
    scope="step"> <bean:property name="dataSource" ref="dataSource" /> <bean:property 
    name="sql" value="select id,name,age,score from t_user" /> <bean:property 
    name="rowMapper"> <bean:bean class="org.springframework.jdbc.core.BeanPropertyRowMapper"> 
    <bean:property name="mappedClass" value="com.aliyun.springbatch.sample.db.User" 
    /> </bean:bean> </bean:property> </bean:bean> -->
  <!-- 读文件 多文件上传-->
  <bean:bean id="userReader" class="org.springframework.batch.item.file.MultiResourceItemReader"
    scope="step">
<!-- 单个文件读取 -->
    <!-- <property name="resource" value="file:./sample.csv" /> -->
<!-- 多个文件读取 读取文件的位置 -->
    <bean:property name="resources" value="file:#{jobParameters['inputFile']}" />
  <!-- 引入单个文件的读取对象 -->
    <bean:property name="delegate" ref="flatFileItemReader" />
  </bean:bean>
  <!-- 单个文件的读取对象 -->
  <bean:bean id="flatFileItemReader"
    class="org.springframework.batch.item.file.FlatFileItemReader">
  <!-- 跳过读取文件的第一行 因为第一行是列名-->
  <bean:property name="linesToSkip" value="1"/>
  <!-- 文件的行映射 -->
  <bean:property name="lineMapper">
   <bean:bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
    <!-- 行的字段映射 -->
    <bean:property name="lineTokenizer">
      <!-- 映射的字段以下面names属性,以,隔开 -->
      <bean:bean
          class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
        <bean:property name="names" value="id,name,age,score" />
      </bean:bean>
    </bean:property>
    <!-- 设置 读取的字段映射给实体对象 -->
    <bean:property name="fieldSetMapper">
      <bean:bean
      class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
        <bean:property name="prototypeBeanName" value="user" />
      </bean:bean>
    </bean:property>
   </bean:bean>
  </bean:property>
 </bean:bean>
 
 <bean:bean id="user" class="com.aliyun.springbatch.sample.db.User"></bean:bean>
  <!-- db数据的写 -->
  <!-- <bean:bean id="jdbcItemWriter"
    class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <bean:property name="dataSource" ref="dataSource" />
    <bean:property name="sql"
      value="insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER)
          values
         (:id,:userId,:userName,:password,:updateDate,:updateUser)" />
    <bean:property name="itemSqlParameterSourceProvider">
      <bean:bean
        class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
    </bean:property>
  </bean:bean> -->
  
  <!-- 这是自定义的实现ItemWriter接口的ItemWriter的实现类 -->
<bean:bean id="jdbcItemWriter" class="com.aliyun.springbatch.sample.db.JdbcItemWriter">
</bean:bean>
</bean:beans>

jdbc.properties  mysql数据源配置文件

#Oracle
#hibernate.dialect=org.hibernate.dialect.OracleDialect
#validationQuery.sqlserver=SELECT 1 FROM DUAL
#jdbc.driver=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
#jdbc.username=activitproject
#jdbc.password=activitproject
#Mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_batch_demo
jdbc.username=root
jdbc.password=root

封装数据的实体类就自己写吧 

测试主方法:

 public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext(
        "com/aliyun/springbatch/sample/db/batch.xml");
    JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
    Job job = (Job) context.getBean("dbJob");

    try {
      
      // JOB执行,设置参数添加读取文件的路径
      JobExecution result = launcher.run(
          job,
          //添加job参数时,将读取的文件目录加入到job的参数中
          new JobParametersBuilder()
              .addString("inputFile",
                  "src/main/java/com/aliyun/springbatch/sample/db/inputFile*.csv")
              .toJobParameters());
      // 运行结果输出
      System.out.println(result.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # batch读数据库  # batch  # 数据库  # 读取csv  # Spring Batch读取txt文件并写入数据库的方法教程  # SpringBatch数据读取的实现(ItemReader与自定义读取逻辑)  # 这是  # 多个  # 自定义  # 跳过  # 配置文件  # 大家多多  # 文件上传  # 数据格式  # 实体类  # sample  # classpath  # config  # PropertyPlaceholderConfigurer  # locations  # db  # driverClassName  # driver  # DriverManagerDataSource  # properties  # datasource 


相关文章: C++如何将C风格字符串(char*)转换为std::string?(代码示例)  专业公司网站制作公司,用什么语言做企业网站比较好?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  广平建站公司哪家专业可靠?如何选择?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何高效搭建专业期货交易平台网站?  宝塔面板创建网站无法访问?如何快速排查修复?  如何选择建站程序?包含哪些必备功能与类型?  宁波免费建站如何选择可靠模板与平台?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  广州美橙建站如何快速搭建多端合一网站?  建站之星如何实现网站加密操作?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  行程制作网站有哪些,第三方机票电子行程单怎么开?  广州建站公司哪家好?十大优质服务商推荐  ,怎么用自己头像做动态表情包?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何用AWS免费套餐快速搭建高效网站?  ,购物网站怎么盈利呢?  如何用PHP快速搭建CMS系统?  如何挑选高效建站主机与优质域名?  如何制作算命网站,怎么注册算命网站?  音乐网站服务器如何优化API响应速度?  建站之星如何修改网站生成路径?  建站之星价格显示格式升级,你的预算足够吗?  官网网站制作腾讯审核要多久,联想路由器newifi官网  内网网站制作软件,内网的网站如何发布到外网?  如何零成本快速生成个人自助网站?  建站之星安装后如何自定义网站颜色与字体?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Python如何创建带属性的XML节点  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何用虚拟主机快速搭建网站?详细步骤解析  如何在云指建站中生成FTP站点?  湖北网站制作公司有哪些,湖北清能集团官网?  相册网站制作软件,图片上的网址怎么复制?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何获取上海专业网站定制建站电话?  如何在宝塔面板创建新站点?  南京网站制作费用,南京远驱官方网站?  如何选择高效便捷的WAP商城建站系统?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  网站制作壁纸教程视频,电脑壁纸网站?  建站主机SSH密钥生成步骤及常见问题解答?  ,巨量百应是干嘛的?  开源网站制作软件,开源网站什么意思? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。