- 博客(51)
- 收藏
- 关注
原创 Flyway 入门教程
Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理我们的数据库版本。
2022-09-21 10:37:07
1448
原创 RabbitMQ重试机制+死信队列
现在想实现一个功能,消息消费失败重试三次,重试三次后仍失败,则发送至死信队列踩坑按照之前找到的资料,RabbitMQ支持的重试机制需要添加配置rabbitmq: host: 127.0.0.1 port: 5672 username: xxx password: xxx virtual-host: xxx listener: simple: # 开启手动ACK acknowledge-mode: man
2022-05-25 16:11:54
7738
2
原创 RestHighLevelClient Could not autowire. There is more than one bean of ‘RestHighLevelClient‘ type.
在使用SpringBoot整合Elasticsearch7.x的时候,创建RestHighLevelClient的时候出现了一下问题具体的配置文件如下package priv.cwr.es.config;import org.elasticsearch.client.RestHighLevelClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.contex
2022-04-02 17:27:41
2904
原创 EasyExcel的使用
1、什么是EasyExcelEasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目它有以下优势:注解式自定义操作 输入输出简单,提供输入输出过程的接口 支持一定程度的单元格合并等灵活化操作 可以基于对象的方式操作Excel 节省内存 EasyExcel 能大大减少占用内存的主要原因是在解析 Excel 时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析二、基本使用1、简单导出GoodsSimpleVo.java..
2022-03-30 18:34:57
5817
原创 Java8 Stream流
Steam流是Java8新增的特性,对于集合的处理更加简洁,有更高的可读性和可维护性,可以使用Lambda表达式作为参数Goods.classpackage priv.cwr.model;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import priv.cwr.enums.GoodsTypeEnum;import java.math.BigDecimal;
2021-10-29 14:18:33
281
1
原创 Java 下载网络图片到项目目录
第一步引入依赖<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version></dependency>第二部
2021-08-06 11:32:57
422
原创 SpringBoot注入Feign失败
今天在再注入Feign的时候启动失败了在启动类上加入扫描Feign路径的直接即可@EnableFeignClients(basePackages = "...")
2021-07-26 11:01:25
767
原创 Mybatis @Select in
要在Mybatis中使用in查询主要有三种方式:1.XML2.Mybatis-plus里的QueryWrapperqueryWrapper.lambda().in(ToolUtil.isNotEmpty(ids), User::getId, ids);3.@Select注解XML的方式编写SQL从功能上来说是非常完备的,但是最大的缺点就是编写成本高,复杂,QueryWrapper写SQL比较便捷,可以使用Lambda,但是对多表查询以及自定义返回值不太友好,个人比较偏好于使用@
2021-07-01 17:24:30
8753
1
原创 SpringBoot 文件下载
使用场景:前端调用接口然后触发浏览器下载后端代码/** * 文件下载 * * @param id 文件id * @return */@GetMapping("/download/{id}")public ResponseEntity<?> download(@PathVariable(value = "id") String id) { // 通过id获取文件信息 FileManageViewModel viewModel = fileManageService
2021-03-17 13:54:02
710
原创 开启独立事务循环入库
今天遇到一个开发场景,导入一个excel(多个sheet),将里面的每行数据入库,入库成功则直接保存,失败则返回各行异常信息,也就是行与行直接互不影响,是独立的事务大概的结构是这样的,有两个service,一个是ExcelImportService,另一个是MaterialService,调用过程就是ExcelImportService作为入口调用MaterialService,二话不说直接上代码ExcelImportService.java/** * Excel导入 *
2021-02-10 10:10:17
540
1
原创 多表查询最值
今天处理业务的时候遇到一个问题,简单一点描述就是多表查询取最值的问题,我用一个类似的场景来重现这个问题:查询各个用户最近一次登录时间(使用的MySQL)这里给定两个表,t_user用户表以及t_login_log登录日志表,结构如下CREATE TABLE `t_user` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARS
2020-09-23 16:08:38
379
原创 Parameter 0 of constructor in XXX required a bean of type ‘XXX‘ that could not be found.
今天在搭建微服务项目的时候遇到了一个问题项目结构实际的场景是OperationLogService需要注入OperationLogMapper,也就是最常见的业务层注入数据层,但是项目启动的时候报了这个错误,最开始我还以为是Mapper没有注入到注册到Spring中,检查了之后我确定Service和Mapper是没有问题的,然后找了好久也没有找到原因,这时候我想到会不会是Mapper没有被扫描到?于是我检查了一下Applicaiton启动类的位置,发现真的是这个问题我各个模块的包命名规则
2020-09-08 10:43:46
21287
2
原创 Could not autowire. No beans of 'xxxx' type found 的一种解决方案
今天在注入一个bean的时候遇到一个问题然后我就在想是不是没有把它注册到Spring容器里面,然后一检查发现注册了经过了半个小时的思考和寻找之后,发现了可能的原因,因为我搭建的是一个微服务架构,而RedisHelper是另外一个基础项目里面的类,所以我在当前项目的启动类上加了扫包的范围,然后就搞定了这只是我遇到的其中一种可能出现的情况,具体问题,具体分析...
2020-03-31 15:44:19
1171
原创 MySQL查询出的时间与实际时间相差八小时
今天通过Navacat查询数据,但是发现时间格式的字段比实际的时间少了八个小时,查找了一些资料后发现只需要在配置文件中数据库的url加一个参数serverTimezone=GMT%2B8即可,这个参数表示设置数据库时间为东八区(北京)时间。url: jdbc:mysql://localhost:3306/cwr-article?useUnicode=true&characterEnc...
2020-03-27 16:59:37
4906
原创 List深度克隆
/** * @Description: List深度克隆 * @Param: source 源集合 * @Return: java.util.List<T> * @Author: CWR * @Date: 2019/12/26 16:17 */public static <T> List<T> deepCopy(List<T> sou...
2020-03-24 13:34:03
611
原创 SpringBoot整合Swagger2自动生成Api文档
现在前后端分离式的开发已经成为一种趋势,在这样的一种开发模式下,对于前端来说接口文档就显得尤为重要,回想起在我之前的公司,我们都是在word里写接口文档,这样其实会存在很多问题,比如繁琐,风格不统一,极大的增加了后端开发的工作量,后来接触了Swagger,是真的非常的方便好用,所以分享一下。生成后的文档大概是这个样子页面非常的干净简洁,也很美观,接下来就开始搭建这个Api文档一...
2020-03-24 11:37:18
418
原创 Querydsl使用fetchCount()报错
最近发现在使用Querydsl fetchCount()的时候使用groupBy()会报错,经过多次测试后发现,如果使用fetchCount()之前使用了groupBy()并且有多个字段分组,如groupBy(qUser.name,qUser.gender) ,这种时候就会报错,但是如果只是按一个字段分组,groupBy(qUser.name)如则不会报错,不知道是框架的bug还是使用方法不对,至...
2020-01-21 15:07:49
1953
3
原创 使用Lambda筛选出List中重复或未重复的元素
今天突然想起之前有一次面试的一道笔试题,但是当时没有做出来,所以今天把它做出来了,顺便记录一下。题目如下:从[1, 5, 3, 2, 1, 9, 3, 6, 7, 5]中筛选出未重复的元素(也就是只出现一次的元素),虽然用笨一点的方法for循环也可以实现,但是我想用lambda去实现,但是后面还是没有做出来,二话不多说,直接上代码。List<Integer> number =...
2019-08-06 15:03:35
13214
1
原创 微服务架构定义全局异常处理(@ControllerAdvice + @ExceptionHandler)没有生效
最近在学习基于SpringCloud和SpringBoot的微服务架构,想实现全局异常处理这样一个功能,实现后的效果就是所有服务抛出的异常都在这个全局异常处理里面统一处理,而不是在每个服务里面都写一套异常的处理,先大概说一下我的项目结构,既然要做一个全局异常处理,那么肯定要写在一个公用的地方,这里我有一个基础服务,它不是一个独立的服务,没有启动类,也不需要注册到Eureka,它的作用是提供...
2019-08-06 10:50:50
7655
7
原创 JS选取一个数组中另一个的数组的补集
有时候,我们可能会遇到这样一个需求,从A数组中选取除去B数组后的内容,举个例子,最后需要得到C数组a = [1,2,3,4,5]b = [1,4,5]// 需要的结果c = [2,3] 下面主要通过两种方式来实现一下。因为一般的情况下不会只是简单的基本数据结构(如上面的数组),所以这里我们使用对象数组作为测试数据let a = [{ "id":"1",...
2019-07-08 14:52:27
1197
原创 使用vue-mugen-scroll组件实现pc端滚动刷新
由于工作的原因,现在需要实现一个滚动加载(PC端)的效果,之前使用的是vue+element,但是element没有类似的组件,所以去github上找了一个名叫vue-mugen-scroll,使用起来很简单也很方便,所以给大家分享一下如果使用。一、准备工作首先需要安装一下组件:npm install --save vue-mugen-scroll不需要全局引用,在需要的地方引...
2019-06-25 14:34:55
3012
1
原创 websocket实现服务器端消息推送
因为工作原因,需要实现一个服务器端消息推送的功能,就类似发布一篇文章,同时推送给指定用户,最后决定采用websocket的方式实现该功能。一、准备实现主要分为服务器端和客户端,客户端通过websocket与服务器端保持连接,这样服务器就可以向客户端主动发起请求。二、服务器端服务器端我是使用的springboot,要是用websocket只需要引入websocket的依赖即可&...
2019-06-17 10:00:47
5940
2
原创 MySQL分组查询前几条数据
分组查询是一个比较常见也稍微复杂一点的查询,比如查询每个班成绩最好的三名学生,每个部门工资最高的三个员工等等,今天就分享一下分组查询这样一个用法。一、准备工作首先上两张表,部门表和员工表。部门表DROP TABLE IF EXISTS `department`;CREATE TABLE `department` ( `id` int(10) NOT NULL AUTO_I...
2019-06-14 16:00:25
3094
1
原创 实现钉钉开放平台扫码登录内部应用
因为项目的原因,现在需要实现通过手机钉钉扫码登录内部系统,钉钉提供了这样的一种扫码登录的方式,下面我们一起来看一下实现过程。这是钉钉开放平台对应技术文档的地址:https://open-doc.dingtalk.com/microapp/serverapi2/kymkv6实现功能之前要有一个开发者平台账号,怎么开通这里我就不一一阐述了,很简单,自己去申请一个即可。1、创建扫码登录应用授...
2019-05-24 14:19:10
10882
15
原创 删除node_modules
今天开发vue项目,遇到一些问题需要删除node_modules文件夹,然后重新npm install,但是直接删除文件夹会很慢而且很麻烦,需要权限,反正我是没有直接删除成功,这里分享另一种高效而且方便的方法:首先安装rimraf,它主要是用来删除文件以及文件夹npm install rimraf -g然后进入到项目根目录删除目录rimraf node_modules...
2019-05-13 10:17:37
214
原创 关于调用entityManager.persist()方法报错,cannot reliably process 'persist' call
最开始出现这个错误的时候,查询了一些资料,发现是没有在方法上面加@Transactional注解,加上之后发现还是出现同样的异常,再次查询资料,发现@Transactional只对公有的方法有效,其他权限访问修饰符的方法无效但是不报错(如果放在类上,则只有公有方法会生效),而我的方法是默认的修饰符,改为public之后仍然报错,代码逻辑大概是这个样子(因为代码比较复杂,就大概举个例子)pub...
2019-04-28 12:22:00
5336
原创 ArrayList初始化容量对性能的影响
ArrayList是我们最常用的类集框架之一,它的本质是一个数组,有时候我们也把它称为动态数组,但是这个"动态"只是表象,因为数组的大小是不能扩大或缩小的,数组的大小在数组被创建的时候就已经确定了。所谓"动态"其实是在要向ArrayList中新增元素但是数组容量已经满了的时候,会创建一个更大的数组然后将原数组的内容拷贝到新创建的数组中,这里也可以称为"扩容",所以扩容是非常耗费时间以及内存的,...
2019-01-31 11:51:20
2003
原创 Java 8 Optional详解
在进行Java开发的时候NullPointerException已经算是我们的老朋友了,有些情况没有考虑到就很有可能出现空指针异常,即使考虑到了也要使用类似 if (obj != null){ } 去判断是否为空,这样确实会让代码看上去复杂一些.现在Java8有了Optional之后,空指针的校验就变得非常的方便和简洁,可以理解为将数据作为泛型封装到Optional对象中而形成的空指针预防机制,下...
2019-01-15 15:22:58
373
原创 SpringBoot + JPA的自学之路(三)多表连接查询
上一节分享了一下JPA的基本操作,但是有时候这些基本操作并不能满足业务的需求,用惯了Mybatis的我觉得多表查询也是挺容易的一件事情,不用修改实体,自己写sql非常的灵活也非常的方便,但是在JPA中要实现多表查询就稍微麻烦一点,需要对实体进行修改,加上一些注解表示与其他实体的关联关系(一对一、一对多、多对一,多对多),下面我们就通过例子来讲解一下。现在我们假设有这样的一个需求:查询一个用户列...
2018-12-20 16:00:46
15640
8
原创 SpringBoot + JPA的自学之路(二)简单使用
上一节大概说了一下JPA的基本配置、项目结构以及数据库的结构,这一节说一下JPA的简单使用这节主要以用户管理作为例子,完成用户的添加和查询(包括分页查询)。控制层UserController.javapackage priv.cwr.controller;import org.springframework.data.domain.Page;import org.springf...
2018-12-20 14:04:57
533
原创 SpringBoot + JPA的自学之路(一)基本配置
由于现在的项目要使用JPA,所以也需要学习一下JPA的使用,之前一直使用的是Mybatis,不得不说JPA要上手确实比Mybatis要复杂一些,难一些,Mybatis和JPA的比较我这里就不多说了,关于这个网上有很多总结的非常好的文章,大家有兴趣可以去看一看,这里就主要分享一下在SpringBoot下使用JPA。1、环境搭建这里主要需要引入JPA和MySQL的依赖<depend...
2018-12-19 18:18:35
662
原创 使用反射加载类以及方法的调用
反射很大的一个优点就是灵活性高,能够动态(运行时)加载资源,这里分享一下如何使用反射加载类以及调用方法二话不说,直接上代码,目的是使用反射创建ReflexDemo类对象以及调用它的方法。目录结构如下(普通Java项目)ReflexDemo.javapackage priv.cwr.demo;import java.util.Map;import java.util.UU...
2018-12-18 18:25:01
603
原创 SpringBoot读取配置文件(读取属性、映射对象)
从配置文件中读取属性或对象这是一个非常普遍也非常基础的一个操作,今天就和大家分享一下如何读取配置文件里的信息。1、yml配置文件r: config: datasource: driver: "r-driver" url: "r-url" username: "r-username" password: "r-password"...
2018-12-12 13:42:03
3099
1
原创 使用JdbcTemplate查询数据库(单个对象,列表等)
因为工作需要,所以学习一下JdbcTemplate的用法。JdbcTemplate的基本用法可以参考我之前的一篇博客 https://blog.csdn.net/cwr452829537/article/details/845629511、准备工作这里我们先准备一张用户表CREATE TABLE `t_user` ( `id` bigint(20) NOT NULL AUTO...
2018-12-11 16:06:44
33486
1
原创 使用Mybatis的PageHelper插件实现分页
分页查询是一个非常普遍的操作,记得最开始实现分页的时候还是自己在JS中保存两个全局变量,用来记录当前页数和每页记录条数,然后在SQL中动态得去拼装LIMIT语句(MySQL),这个实现过程没有任何的业务逻辑,也没有任何的难度,但是就是很麻烦,后来慢慢得接触到了一些分页的插件,让这一过程变得非常的方便,大大地增加了开发的效率,今天就说一说Mybatis的分页插件PageHelper的使用。首先说...
2018-11-28 10:12:55
383
原创 使用JdbcTemplate和RowMapper查询数据库
记得最开始学习使用数据库的时候都是使用底层的JDBC直接访问的,主要分成三个部分,通过数据库的配置信息(DRIVER,URL,USERNAME,PASSWORD)去获取数据库连接; 通过PreparedStatement执行SQL语句; 通过ResultSet接收查询结果。JdbcTemplate就是对JDBC的一种封装,使用起来更加的方便,但是JDBC的效率要比JdbcTemplate...
2018-11-27 14:08:11
4506
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人