![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 60
wl_Honest
这个作者很懒,什么都没留下…
展开
-
解决EasyPoi导出Excel文件后提示无法打开文件的问题
问题原因:请求头的Content-Length,在未设置的情况在是-1,下载时需重新定义Content-Length。原创 2022-11-15 16:25:14 · 4335 阅读 · 4 评论 -
CompletableFuture解决多线程返回结果问题
在Java中CompletableFuture用于异步编程,异步编程是编写非阻塞的代码,运行的任务在一个单独的线程,与主线程隔离,并且会通知主线程它的进度,成功或者失败。在这种方式中,主线程不会被阻塞,不需要一直等到子线程完成。主线程可以并行的执行其他任务。使用这种并行方式,可以极大的提高程序的性能。原创 2022-10-12 17:31:02 · 7360 阅读 · 1 评论 -
Springboot整合Netty提供WebSocket服务
昨天重温Netty学习视频,发现Netty还能够提供WebSocket服务,刚好前段时间做了个WebSocket服务的接口,感觉做的不是很好,特地查了一下如何用Springboot整合Netty提供WebSocket服务。经过网上的搜查和昨天视频学习的现学现用,整理出此篇文章记录如何用WebSocket接口定时发送消息。原创 2022-10-09 15:55:37 · 1427 阅读 · 0 评论 -
Spring AOP之3种增强方式简单示例
AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。从《Spring实战(第4版)》图书中扒了一张图:从该图可以很形象地看出,所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。想象下面的场景,开发中在多个模块间有某段重复的代码,我们通常是怎么处理的?显然,没有人会靠“复制粘贴”吧。在传统的面向过程编程中,我们也会原创 2022-07-03 11:37:50 · 688 阅读 · 0 评论 -
SpringBoot+Redis哨兵模式
最近学习到了Redis的哨兵模式,光看视频还不行,需要自己动手实现一遍才能加深映像,特此记录。由于没有真实的服务器可以供我操作,所以在虚拟机上启动了3个redis服务,分别占用7001、7002、7003端口。Redis下载安装不多赘述,只在这里记录一下配置。首先在tmp目录下创建3个文件夹:cd /tmpmkdir 7001 7002 7003然后将redis的配置文件redis.conf拷贝到刚刚创建的3个文件夹下cp redis-6.2.6/redis.conf原创 2022-04-14 16:10:17 · 8518 阅读 · 0 评论 -
Redisson之分布式锁解决商品秒杀简单示例
一般电商商品秒杀活动会面临大量用户同时下单的情况,不仅要面临高并发的问题,还要保证下单数量不超过商品数量和用户对同一商品不能重复下单(保证商品不被同一个用户抢购完,也就是防黄牛)。面对这些问题,可以采用Redis分布锁来解决,通过Redis中setnx命令来保证同一时间只有一个线程能够正常下单,待订单创建成功后解锁,其余线程再来抢锁。首先模拟一下未采用Redis加锁的代码实现,创建了3张表:用户表、商品表和订单表maven依赖:<dependencies>...原创 2022-04-07 10:40:01 · 2775 阅读 · 5 评论 -
SpringBoot设置动态定时任务
之前写过文章记录怎么在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活。经过网上搜索学习后,特此记录如何在SpringBoot项目中实现动态定时任务。因为只是一个demo,所以只引入了需要的依赖:<dependencies> <dependency> <groupId>org.springframework.bo..原创 2022-03-22 10:51:01 · 4959 阅读 · 1 评论 -
Redis缓存击穿解决方案之互斥锁
一、缓存击穿缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库造成巨大的冲击。 --引用哔哩哔哩UP主“黑马程序员”教程《Redis入门到实战教程》中的PPT内容常见的解决方案有2中:1.互斥锁2.逻辑过期二、互斥锁互斥锁原理示意图(引用B站视频中的PPT):简单来说,就是线程1查询缓存未命中,这时它会去获取互斥锁,然后查询数据库获取结果并将结果写入缓存中,最后释放锁。在线程1释放锁之前,其它线原创 2022-03-17 18:29:30 · 7321 阅读 · 0 评论 -
SpringAmqp之常用模型Demo
一、消息队列消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。二、SpringAmqpAMQP:Advanced Message Queuing Protocol,用于在应用程序之间传递原创 2022-03-13 19:37:36 · 2354 阅读 · 0 评论 -
SpringCloud组件之Gateway微服务网关
学习SprinngCloud到了网关这一组件,照例简单记录下网关的作用网关有以下几个作用:统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。 动态路由:动态的将请求路由到不同的后端集群中。 减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。在1.x版本中都是采用Zuul网关。但是在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关代替Zu.原创 2022-03-07 18:09:29 · 372 阅读 · 0 评论 -
SpringCloud组件之Feign远程调用
上篇文章运用SpringCloud组件Eureka简单写了个服务注册Demo,并用RestTemplate实现了服务之间的远程调用,这篇文章则用到SpringCloud的另一个组件Feign来实现更方便更优雅的远程调用。首先引入maven依赖<!-- feign客户端 --> <dependency> <groupId>org.springframework.cloud</groupId>原创 2022-03-06 14:41:26 · 243 阅读 · 0 评论 -
SpringCloud之Eureka注册Demo
早在18年的时候写过一篇关于Eureka的文章,不过在那以后就没有深入学习SpringCloud了,恰好最近比较空闲,适合沉下心来好好学习SpringCloud,所以还是从注册中心开始,写个Demo记录一下。此篇文章代码参考了哔哩哔哩上黑马程序员的视频,在教学代码上稍作修改了,视频链接:https://www.bilibili.com/video/BV1LQ4y127n4?p=13数据库用的MySQL,用到的2张表用idea创建maven项目,目录结构如图:最外层pom....原创 2022-03-04 16:10:01 · 535 阅读 · 0 评论 -
SpringBoot+Redis简单实现文章浏览量记录
现在做的大部分项目都用到了SpringBoot和Redis,不过实际开发中,Redis只存了Token之类的数据,大部分的增删改查还是直接走的MySQL数据库。这2天逛论坛发现其实很多场景其实更需要Redis这样的存在,于是参考网上的代码简单做了个文章浏览量记录的Demo。首先放出maven依赖:<dependencies> <dependency> <groupId>junit</groupId> <artif原创 2022-02-23 09:51:35 · 5245 阅读 · 26 评论 -
EasyPoi通过模板生成Excel文件
之前用easypoi实现过导出简单的excel文件,最近又有需求导出固定格式的excel文件,所以在网上搜索学习了一下,现将学会后写的demo记录一下方便以后回顾。 首先照例引入maven依赖(这里版本要注意一下,之前引入4.3.0导出图片会失败,后面在网上看到有人遇到同样的问题,换成4.2.0后就可以正常导出图片了):<!-- easypoi --> <dependency> <groupId>cn.afterturn.原创 2022-01-07 14:10:37 · 7569 阅读 · 2 评论 -
SpringBoot搭配Quartz实现动态定时任务
前面2篇文章讲述了如何实现简单的定时任务,不过由于执行周期是写在配置文件里的,如果想要修改周期或者暂停任务都是比较麻烦的事情,那么能不能在不修改代码和暂停服务的情况下动态修改定时任务周期或者手动暂停任务?通过Quartz是可以实现这一目标的,本文参考了GitHub上的文章,写了个动态定时任务的demo,特此记录。参考链接:https://github.com/xkcoding/spring-boot-demo/tree/master/demo-task-quartz首先引入需要的jar包:原创 2021-12-27 17:37:16 · 2361 阅读 · 1 评论 -
SpringBoot项目给定时任务配置线程池
上篇文章简单介绍了怎么在SpringBoot项目中运用简单的定时(间隔)任务,并且举例用的是单个任务,如果是多个定时(间隔)任务,并且想同时执行,应该怎么办?首先经过了解,@Scheduled是单线程的,如果有多个定时任务,势必需要前一个任务执行完才会执行后面的任务,先放代码:package com.wl.standard.task;import com.wl.standard.entity.City;import com.wl.standard.entity.CityGdp;import原创 2021-12-23 15:46:07 · 1529 阅读 · 0 评论 -
SpringBoot项目配置简单定时任务
平时项目中有不少场景需要用到定时任务,以前的公司采用的自己开发的框架,可以通过数据库动态配置定时任务的触发时间,还有间隔任务的间隔周期。鉴于之前太过懒惰,没有自行去认真研究过开源的定时任务框架,遂特此记录一下基于SpringBoot项目的简单定时(间隔)任务。 首先创建一个定时(间隔)任务的配置文件,用于定义每个任务的间隔时间。我这里取名就叫task-config.ini了,放置于resources路径下。内容如下:lineAllCity.cron = */30 * * * * ?...原创 2021-12-23 14:24:03 · 613 阅读 · 0 评论 -
SpringBoot项目配置拦截器打印访问日志
package com.tct.ii.ucr.core.filter;import com.tct.ii.ucr.common.BodyReaderHttpServletRequestWrapper;import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;import javax.servlet.Filter;import javax.servlet.FilterChain;import ja.原创 2021-12-23 10:33:11 · 1183 阅读 · 0 评论 -
Java&EasyPoi将数据导出Excel
最近工作中有需求需要将数据导出到Excel中,这个功能以前做过的项目中几乎都有,但都是人家已经实现了的,这次自己做也折腾了不少的时间,特此记录方便以后自己查阅。 首先需要借助第三方jar包,如标题所言,这次需要导入的是easypoi,官方介绍如下:easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成...原创 2021-08-11 11:10:35 · 2779 阅读 · 0 评论 -
Java Stream对List集合做分组统计
写代码时如果不想通过SQL查询做分组统计,通过Stream流也是可以做到的,现用简单demo记录一下。先创建一个学生类import lombok.AllArgsConstructor;import lombok.Data;@Data@AllArgsConstructorpublic class Student { private Integer id; private String name; private String sex; private原创 2021-08-05 14:08:41 · 16279 阅读 · 0 评论 -
SpringBoot+Mybatis-plus分页
分页的插件有多种,现简单记录一下使用Mybatis-plus的分页插件。环境说明:SpringBoot版本:2.3.2数据库:MySQLMybatis-plus的Maven依赖:<!-- mybatis-plus --><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifac..原创 2021-07-27 15:43:39 · 2702 阅读 · 0 评论 -
Netty之服务端与客户端简单实现
'Quick and easy' doesn't mean that a resulting application will suffer from a maintainability or a performance issue. Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and v原创 2021-07-02 15:21:55 · 488 阅读 · 0 评论 -
Java正则表达式忽略大小写
之前很少写正则表达式,即便是要判断手机号和邮箱之类的功能也是直接copy的网上的内容,最近工作中用到正则表达式比较多,特此记录正则表达式中最常用到的忽略大小写的写法。直接上代码:import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test { public static void main(String[] args) { String text = "Invoice No : 6543原创 2021-03-06 11:08:43 · 2650 阅读 · 0 评论 -
Java之文件和base64字符串互转
项目中有时需要通过接口传输文件,则一般通过将文件转为base64字符串进行传输。需要引入的包:<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.13</version></dependency>文件转base64字符串:impo原创 2020-12-28 14:52:38 · 1496 阅读 · 0 评论 -
Java使用for循环删除集合元素需要避免的犯错
最近写Java代码使用for循环遍历集合并在其中删除满足条件的元素时,发现集合明明有5个元素,遍历却不足5次,经过排查后发现是自己犯了一个不该犯的错误,就是在for循环中删除了一个元素后,下次遍历的集合size已经-1了,而用来遍历计数的变量i在上次的循环中已经+1,从而导致循环次数不足集合的原始长度。 问题重现例子,删除集合里的3:public class CollectionTest { public static void main(String[] args) { Inte...原创 2020-06-03 15:13:30 · 339 阅读 · 0 评论 -
Java+微信公众号开发学习总结(二)
上一篇文章总结了Java语言开发微信公众平台的第一部分——环境搭建与开发接入,这一篇总结消息的接收与响应。接入微信公众平台的时候,微信将发送Get请求给我们的校验方法。那当我们接收消息的时候,微信将向我们发送Post请求,并以XML的格式发送与接收数据。看一下微信发给我们的普通文本消息的XML包结构:<xml> <ToUserName><...原创 2018-08-10 10:35:51 · 1093 阅读 · 0 评论 -
Java DecimalFormat 用法(数字格式化)
我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子。下面是常用的例子:import java.text.DecimalFormat;public class Test{ public static void main(String[] args){ double pi...转载 2018-09-07 15:17:31 · 157 阅读 · 0 评论 -
MyBatis - No constructor found
Mybatis出现了一个报错:No constructor found in XX类 解决方法添加无参构造器以及各个getter/setter字段转载 2018-09-14 11:09:14 · 419 阅读 · 0 评论 -
Jsoup简单例子2.0——多线程爬取网页内的邮箱
上一篇文章讲了利用Jsoup爬取贴吧帖子里的邮箱,虽然爬取成功了,但我对效率有所追求。10页的帖子爬取了两百多个邮箱,最快用时8秒,一般需要9秒。在思考了一下怎么提升效率后,决定采用多线程的方式爬取网页内的邮箱。废话不多说,直接上代码。引入Jsoup的jar包此处省略,没有的可以查看上篇文章。import java.io.IOException;import java.util.Ha...原创 2018-10-18 15:49:46 · 1094 阅读 · 0 评论 -
浅谈WebSocket
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态。以下以一个小例子浅谈WebSocket:1.新建一个web项目:2.在pom.xml中添加Jar包依赖:...原创 2018-10-16 09:34:44 · 279 阅读 · 0 评论 -
Jsoup简单例子——爬取网页内的邮箱
一、前言Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。主要功能: 1)从一个URL,文件或字符串中解析HTML 2)使用DOM或CSS选择器来查找、取出数据 3)可操作HTML元素、属性、文本二、案例这里以...原创 2018-10-17 09:22:01 · 835 阅读 · 0 评论 -
Java读取EXCEL表格中的数据
之前有一个需求,需要将Excel表格中的数据导入到数据库中,在参看网上的例子后完成了任务。这里贴出我的代码以供有需要的同学参考。首先,看一下表格数据: 我建的是maven工程,这里贴出需要用到的jar包:<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->...原创 2018-11-12 08:57:52 · 4313 阅读 · 0 评论 -
JDBC简单增删改查
最近发现框架用得多了,一些Java原生的东西反而有些忘了,大一大二使用过的JDBC都已经不会写了,古人说温故而知新,那么就在此记录一下复习JDBC的简单增删改查例子。一、什么是JDBCJDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。J...原创 2018-11-21 16:59:28 · 317 阅读 · 0 评论 -
Java调用Python脚本
最近突发奇想地想要在Java里调用Python脚本,在网上查过之后还真的可以。常见的java调用python脚本方式通过Jython.jar提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件这两种方法我都尝试过,个人推荐第二种方法,因为Python有时需要用到第三方库,比如requests,而Jython不支持。所以本地安装Python环境并且安装第三库...原创 2018-11-22 16:15:06 · 21195 阅读 · 11 评论 -
Java+微信公众号开发学习总结(一)
这两天自己想学习微信公众号开发,于是在网上搜索并上手练习,在这个过程中因为各种问题,(描述不完整,有的文章不知道怎么就蹦出个新的常量,也没说在哪定义的,还有jar包版本的问题坑了我一天的时间)所以特此在这记录。1.首先,先得注册一个微信公众号,上度娘搜索微信公众平台,进入这个页面注册(已有账号的跳过这个步骤):2.然后用Eclipse新建一个项目,这里我建的是web项目,jdk是1.8...原创 2018-08-09 16:02:23 · 9628 阅读 · 5 评论