编程日记 批量导入数据

news/2024/9/18 23:10:03/文章来源:https://www.cnblogs.com/vastjoy/p/18415707

编程日记 批量导入数据

1.用可视化界面:适合一次性导入,数据量可控

2.写程序:for循环,建议分批,不要一把梭哈(可以用接口控制),要保证可控、幂等,注意线上环境和测试环境是有区别的

导入1000w条,for i 1000w

(不能再main方法里面写,会报空指针异常,userMapper无法注入)

缺点是.class并不是一个spring的bean,他没有被spring托管,无法使用@resounces注解

3.执行SQL语句,适用于小数据量

编写一次性任务

for循环插入数据的问题:

​ 1.建立和释放数据库链接(批量查询解决)

@Resourceprivate UserService userService;/*** 批量插入用户*/@Test//fixedDelay就是每隔5s执行一次public void doInsertUsers() {StopWatch stopWatch = new StopWatch();stopWatch.start();final int INSERT_NUM = 100000;List<User> userList = new ArrayList<>();for (int i = 0; i < INSERT_NUM; i++) {User user = new User();user.setUsername("原_创 【鱼_皮】https://t.zsxq.com/0emozsIJh");user.setUserAccount("fakeyupi");user.setAvatarUrl("https://636f-codenav-8grj8px727565176-1256524210.tcb.qcloud.la/img/logo.png");user.setGender(0);user.setUserPassword("12345678");user.setPhone("123");user.setEmail("123@qq.com");user.setTags("[]");user.setUserStatus(0);user.setUserRole(0);user.setPlanetCode("11111111");userList.add(user);}// 20 秒 10 万条userService.saveBatch(userList, 1000);stopWatch.stop();System.out.println(stopWatch.getTotalTimeMillis());}

​ 2.for循环是绝对线性的(并发)

并发要注意执行的先后顺序无所谓

@Resourceprivate UserService userService;/*** 并发批量插入用户*/
@Testpublic void doConcurrencyInsertUsers() {StopWatch stopWatch = new StopWatch();stopWatch.start();// 分十组int batchSize = 5000;int j = 0;List<CompletableFuture<Void>> futureList = new ArrayList<>();for (int i = 0; i < 100; i++) {List<User> userList = new ArrayList<>();while (true) {j++;User user = new User();user.setUsername("假鱼皮");user.setUserAccount("fakeyupi");user.setAvatarUrl("https://636f-codenav-8grj8px727565176-1256524210.tcb.qcloud.la/img/logo.png");user.setGender(0);user.setUserPassword("12345678");user.setPhone("123");user.setEmail("123@qq.com");user.setTags("[]");user.setUserStatus(0);user.setUserRole(0);user.setPlanetCode("11111111");userList.add(user);if (j % batchSize == 0) {break;}}// 异步执行CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {System.out.println("threadName: " + Thread.currentThread().getName());userService.saveBatch(userList, batchSize);}, executorService);futureList.add(future);}CompletableFuture.allOf(futureList.toArray(new CompletableFuture[]{})).join();// 20 秒 10 万条stopWatch.stop();System.out.println(stopWatch.getTotalTimeMillis());}

注意第38行代码:

这段代码是使用Java的CompletableFuture类来等待一组CompletableFuture对象全部执行完毕。

CompletableFuture.allOf(...),是一个静态方法,它接收一个CompletableFuture数组作为参数,并返回一个新的CompletableFuture对象。这个新的CompletableFuture对象会在参数中所有的CompletableFuture对象都执行完毕之后完成,即它会等待传入的所有CompletableFuture对象完成,才会执行下一条语句。

array.toArray(new CompletableFuture[]{}),这段代码是将一个List集合(array)转换成一个数组,并作为参数传递给CompletableFuture.allOf()方法。这是通过将List集合转换为一个空的CompletableFuture数组来实现的。

.join(),是CompletableFuture对象的一个方法,会阻塞当前线程,直到该CompletableFuture对象完成,并返回对象的结果值。

此代码CompletableFuture.allOf(array.toArray(new CompletableFuture[]{})).join()的意思是等待List集合(array)中的所有CompletableFuture对象都执行完毕,并阻塞当前线程直到所有CompletableFuture对象都完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797812.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程日记 后端使用redis

编程日记 后端使用redis 问题:在写伙伴匹配系统的时候,要使用redis存储数据,需要在xml文件中设置spring.session.tore-type=redis 但是3.x版本的spring不再有这个参数。 那么怎么设置是否使用redis存储呢?只要导入了org.springframework.session包那就启用,不导入就不启用…

帝国cms网站忘记登陆账号密码怎么办

如果你忘记了帝国CMS的登录账号和密码,可以尝试以下方法来恢复访问权限:通过官方提供的找回功能:访问帝国CMS的登录页面。 查看是否有“忘记密码”链接。 点击此链接,并按照提示通过注册时绑定的邮箱或手机号来找回密码。手动重置数据库中的密码:使用数据库管理工具(如ph…

phpcmsV9 管理员密码丢失或忘记了怎么办

如果你在本地测试安装phpcmsV9时忘记了管理员密码,可以通过以下步骤手动重置密码: 方法/步骤打开数据库管理工具使用如phpMyAdmin这样的数据库管理工具连接到你的本地数据库。 通常,你可以通过访问 http://localhost/phpmyadmin/ 来打开phpMyAdmin。选择数据库和表选择你的p…

如何重置帝国CMS的忘记密码

重置帝国CMS的后台管理员密码可以通过以下方法实现: 方法一:使用官方提供的密码重置工具 如果帝国CMS官方提供了密码重置工具,可以使用该工具来重置密码:下载重置工具:从帝国CMS官方网站或其他可信来源下载官方提供的密码重置工具。 上传文件:将下载的重置工具文件上传到…

帝国cms忘记密码怎么办

如果你忘记了帝国CMS的管理员密码,可以通过以下步骤来重置密码: 1. 登录数据库 首先,你需要登录到你的数据库。这通常可以通过以下几种方式完成:phpMyAdmin:通过Web界面登录数据库。 命令行工具:使用MySQL命令行工具登录数据库。 主机控制面板:通过主机控制面板(如cPan…

极致CMS忘记后台账号密码的解决办法

如果你忘记了极致CMS的后台账号密码,可以通过以下方法来找回或重置密码: 1. 通过数据库直接修改密码 如果你对数据库操作比较熟悉,可以采用此方法:登录数据库管理工具:使用phpMyAdmin或其他数据库管理工具登录到你的数据库。 找到管理员表:在数据库中找到存储管理员信息的…

phpcms v9忘记管理员后台密码的解决方法

如果你忘记了PHPCMS v9的管理员后台密码,可以通过直接修改数据库的方法来重置密码。以下是详细的步骤: 1. 通过数据库直接修改密码登录数据库管理工具:使用phpMyAdmin或其他数据库管理工具登录到你的数据库。找到管理员表:在数据库中找到存储管理员信息的表。对于PHPCMS v9…

phpcms管理员账号密码忘记了如何重置

如果你忘记了PHPCMS的管理员账号密码,可以通过以下几种方法来找回或重置密码: 1. 通过数据库直接修改密码 如果你对数据库操作比较熟悉,可以采用此方法:登录数据库管理工具:使用phpMyAdmin或其他数据库管理工具登录到你的数据库。 找到管理员表:在数据库中找到存储管理员…

PbootCms忘记后台管理员密码如何找回

如果你忘记了PbootCMS的后台管理员密码,可以通过以下方法来找回或重置密码: 1. 使用重置工具 PbootCMS提供了一个简单的密码重置工具,你可以使用它来重置密码:下载重置工具:下载PbootCMS提供的密码重置工具文件resetpw.php。 上传文件:将resetpw.php文件上传到网站的根目…

苹果cms忘记后台管理员密码如何找回

如果你忘记了苹果CMS的后台管理员密码,可以通过以下方法来找回或重置密码: 1. 通过数据库直接修改密码 如果你对数据库操作比较熟悉,可以采用此方法:登录数据库管理工具:使用phpMyAdmin或其他数据库管理工具登录到你的数据库。 找到管理员表:在数据库中找到存储管理员信息…

帝国cms忘记密码怎么找回

如果你忘记了帝国CMS的管理员密码,可以通过以下几种方法来找回或重置密码: 1. 通过邮箱找回密码 如果帝国CMS支持通过邮箱找回密码,并且你在注册时提供了有效的邮箱地址,你可以尝试以下步骤:访问登录页面:前往帝国CMS的后台登录页面。 点击“忘记密码”:在登录页面上寻找…

0914人工智能教育技术学

本节课老师给我们安利了很多实用的小程序(配音神器pro、录音转文字助手)以及飞书App。柏拉图说过:思维是灵魂的自我谈话。思维导图可以根据学生的实际情况进行个性化调整帮助学生找到最适合自己的学习路径,鼓励我们从多角度多层面思考问题有助于激发创新思维,图形、颜色和代…