日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

关于Spring batch的学习之CSV2DB

發(fā)布時間:2023/12/1 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Spring batch的学习之CSV2DB 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在學(xué)習(xí)Spring batch相關(guān)的內(nèi)容,網(wǎng)上也有不少Spring Batch相關(guān)的知識,不過大多都是使用xml進(jìn)行配置的。這里是我用注解的方式進(jìn)行相關(guān)的學(xué)習(xí)心得。

首先我們來看如何將一個文本文件中的內(nèi)容導(dǎo)入到數(shù)據(jù)庫中。

我們先來看一下我們所需要的環(huán)境。我們這里使用的是STS(Spring Tool Suite)當(dāng)然也可以使用Eclipse(需要有maven插件)或者M(jìn)yeclipse。我們使用的數(shù)據(jù)庫是MySQl,當(dāng)然也可以使用其他的數(shù)據(jù)庫,根據(jù)自己的需要。

現(xiàn)在開始我們的文件到數(shù)據(jù)庫的學(xué)習(xí)。

第一步,我們需要創(chuàng)建一個maven的project。然后在我們的項(xiàng)目下會有三個包,這里我們只需要其中的兩個,就是main下的兩個(java和resources包)。

第二步,我們來配置一下我們的pom文件。

  一、org.springframework.boot

    1、spring-boot-starter-batch

    2、spring-boot-starter-jdbc

    3、spring-boot-starter-jetty

  二、mysql的jdbc驅(qū)動包

配置完這些,我們的軟件就會自動下載這些包以及相關(guān)的依賴包,這需要一點(diǎn)時間。

第三步,我們需要來配置我們的數(shù)據(jù)庫連接的相關(guān)信息。

  我們需要在resources包下新建一個properties文件,如下。

1 spring.datasource.driverClassName=com.mysql.jdbc.Driver 2 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test 3 spring.datasource.username=root 4 spring.datasource.password=

第四步:由于幾天我們學(xué)習(xí)的是將文件內(nèi)容讀到數(shù)據(jù)庫中,所以,接下來我們需要準(zhǔn)備一個文件,這個文件需要時flat類型的,例如txt或者csv等。

1 zhangsan,anhui,1991/02/15,M 2 lisi,shanghai,1992/01/09,F 3 wangwu,wuhan,1990/01/22,M 4 zhaoliu,tianjin,1991/11/11,F 5 zhangkun,huashan,1989/09/20,M test.csv

第五步,我們需要創(chuàng)建一個entity對象類,如下:

1 public class User { 2 private String userId; 3 private String userName; 4 private String address; 5 private Date birth; 6 private String gender; 7 8 public String getUserId() { 9 return userId; 10 } 11 12 public void setUserId(String userId) { 13 this.userId = userId; 14 } 15 16 public Date getBirth() { 17 return birth; 18 } 19 20 public void setBirth(Date birth) { 21 this.birth = birth; 22 } 23 24 public String getGender() { 25 return gender; 26 } 27 28 public void setGender(String gender) { 29 this.gender = gender; 30 } 31 32 public String getUserName() { 33 return userName; 34 } 35 36 public void setUserName(String userName) { 37 this.userName = userName; 38 } 39 40 public String getAddress() { 41 return address; 42 } 43 44 public void setAddress(String address) { 45 this.address = address; 46 } 47 48 public User() { 49 50 } 51 52 public User(String userId, String userName, String address ,String gender, Date birth) { 53 this.userId = userId; 54 this.userName = userName; 55 this.address = address; 56 this.gender = gender; 57 this.birth = birth; 58 } 59 60 @Override 61 public String toString() { 62 return "userId"+ userId +", userName: " + userName + ", address: " + address + ",gender: " + gender + ", birthDay: "+birth; 63 } 64 65 }

?

第六步,batch是一個用來執(zhí)行job的框架。所以我們需要來創(chuàng)建一個job,在job里需要配置我們的step,每一個step的完成需要有三個動作,讀文件,處理信息,寫數(shù)據(jù)庫。代碼如下:

1 @Configuration 2 @EnableBatchProcessing 3 public class Configuration { 4 @Bean 5 public ItemReader<User> reader() { 6 FlatFileItemReader<User> reader = new FlatFileItemReader<User>(); 7 reader.setResource(new ClassPathResource("test.csv")); 8 reader.setLineMapper(new DefaultLineMapper<User>() {{ 9 setLineTokenizer(new DelimitedLineTokenizer() {{ 10 setNames(new String[] { "userName", "address", "birth", "gender" }); 11 }}); 12 setFieldSetMapper(new BeanWrapperFieldSetMapper<User>() {{ 13 setTargetType(User.class); 14 }}); 15 }}); 16 return reader; 17 } 18 19 @Bean 20 public ItemProcessor<User, User> processor() { 21 return new UserItemProcessor(); 22 } 23 24 @Bean 25 public ItemWriter<User> writer(DataSource dataSource) { 26 JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<User>(); 27 writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<User>()); 28 writer.setSql("INSERT INTO User (user_name, address,birth,gender) VALUES (:userName, :address, :birth,:gender)"); 29 writer.setDataSource(dataSource); 30 return writer; 31 } 32 33 @Bean 34 public Job CSV2DBJob(JobBuilderFactory jobs, Step s1) { 35 return jobs.get("CSV2DBJob") 36 .incrementer(new RunIdIncrementer()) 37 .flow(s1) 38 .end() 39 .build(); 40 } 41 42 @Bean 43 public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<User> reader, 44 ItemWriter<User> writer, ItemProcessor<User, User> processor) { 45 return stepBuilderFactory.get("step1") 46 .<User, User> chunk(10) 47 .reader(reader) 48 .processor(processor) 49 .writer(writer) 50 .build(); 51 } 52 53 @Bean 54 public JdbcTemplate jdbcTemplate(DataSource dataSource) { 55 return new JdbcTemplate(dataSource); 56 } 57 58 } Configuration

step中的process需要我們自己來根據(jù)自己的實(shí)際進(jìn)行相關(guān)的處理,如下

1 public class UserItemProcessor implements ItemProcessor<User, User> { 2 3 @Override 4 public User process(final User user) throws Exception { 5 final String userId = "2014010"+ user.getUserId(); 6 final String gender = user.getGender().equals("M")?"male":"female"; 7 final Date birth = user.getBirth(); 8 final String userName = user.getUserName().substring(0,1).toUpperCase()+user.getUserName().substring(1).toLowerCase(); 9 final String address = user.getAddress().substring(0,1).toUpperCase()+user.getAddress().substring(1).toLowerCase(); 10 11 final User transformedUser = new User(userId,userName, address,gender,birth); 12 13 14 return transformedUser; 15 }

一切都好了,我們還需要寫一個application類來啟動我們的job,具體如下:

1 @ComponentScan 2 @EnableAutoConfiguration 3 public class Application { 4 5 public static void main(String[] args) { 6 ApplicationContext ctx = SpringApplication.run(Application.class, args); 7 } 8 9 }

最后,還需要提醒的是,由于我們的batch中的entity沒有配置自動建表,所以我們需要自己提前在數(shù)據(jù)庫中創(chuàng)建一個User表或者在我們的resources包下面建一個schema-all.sql文件,在這里寫入我們的建表語句就可以了,schema-all是可以直接被Spring batch框架識別的。

1 DROP TABLE IF EXISTS user; 2 3 CREATE TABLE user ( 4 user_id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, 5 user_name VARCHAR(20), 6 address VARCHAR(20), 7 birth Date, 8 gender varchar(1) 9 );

好了一切到此就結(jié)束了,現(xiàn)在啟動我們的工程就可以將我們的文件內(nèi)容導(dǎo)入到我們的數(shù)據(jù)庫中了。

轉(zhuǎn)載于:https://www.cnblogs.com/xincunshannian/p/4032622.html

總結(jié)

以上是生活随笔為你收集整理的关于Spring batch的学习之CSV2DB的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人精品视频网站 | 狠狠操一区 | 午夜宅男影院 | 一区二区三区在线播放视频 | 免费麻豆视频 | 一区二区三区四区欧美 | 亚洲少妇18p | 91插插视频| 天天av天天翘 | av少妇| 亚洲精品~无码抽插 | 久久久久精彩视频 | 午夜日韩在线 | 久久人人爽爽 | 免费av免费看 | 欧美偷拍少妇精品一区 | 成年人国产 | 一道本不卡视频 | 成人深夜福利在线观看 | 淫片一级国产 | 伊人春色视频 | 奇米精品一区二区三区在线观看 | 国产剧情一区在线 | 在线观看www | 香港三级日本三级 | 国产成人久久精品麻豆二区 | 国产区视频在线观看 | 黄色91免费版 | 国产乱妇无码大片在线观看 | fc2ppv在线播放 | 熟妇人妻久久中文字幕 | 精品无码久久久久成人漫画 | 国产簧片| 中文字幕av一区二区三区人妻少妇 | 中文字幕黄色片 | 国产伦精品视频一区二区三区 | 久色国产 | 午夜福利三级理论电影 | 不卡视频一区 | 欧美不卡高清 | 98在线视频 | 久久中文字幕在线观看 | 午夜亚洲天堂 | 日韩在观看线 | 国产欧美视频在线观看 | 熟妇高潮一区二区高潮 | 国产精品一区二区三区四区五区 | 蜜桃久久久久 | 成人免费福利 | 男女羞羞动态图 | 国产一区二区小视频 | 国产91精品久久久久 | 久久r这里只有精品 | 国产呻吟av | 波多野结衣黄色网址 | 久久久福利 | 美女视频黄a视频全免费观看 | 国产福利电影在线 | 免费播放片大片 | 特级一级片 | 欧美大肥婆大肥bbbbb | 日韩精品国产一区二区 | 亚洲一道本 | 免费男女乱淫真视频免费播放 | 黄av在线播放 | 国产精品探花一区二区在线观看 | 久久精品在线视频 | 97av超碰| 日日夜夜狠狠 | 亚洲自啪 | 国产黄色大片免费看 | 国产少妇自拍 | 色婷婷av一区二区三区四区 | 国产黄色在线网站 | 欧美日韩一区二区中文字幕 | 理论片91| 农村妇女毛片 | 青青草五月天 | 另类激情综合 | 97福利社| 亚洲精品视频久久久 | 中文字幕第80页 | 欧美3p在线观看 | 国产日韩精品在线观看 | 久久久久久成人 | 超碰蜜臀 | 国产三级在线看 | 亚洲免费在线观看 | 国产精品第八页 | 久久久久香蕉视频 | 日韩av大片 | 黄色三级国产 | 欧美肉丝袜videos办公室 | 800av凹凸| 一级片自拍 | 无码精品人妻一区二区三区湄公河 | 9色在线 | 无码免费一区二区三区免费播放 | 亚洲AV无码成人精品区在线观 |