SpringBoot
文章平均质量分 61
朝花不迟暮
这个作者很懒,什么都没留下…
展开
-
jdbcTemplate的queryForList报错:Incorrect column count: expected 1, actual 2
jdbcTemplate的queryForList方法有多种传参形式,我们常用的就是这种传class类,参数返回数据,结果报expected 1, actual 2,意思是预期只返回一列,但却返回了2列。这是不合理的,因为返回参数都是List,怎么能预期1呢?使用用query(sql, BeanPropertyRowMapper.newInstance(T.class));只构建一个mapper列,不等于1就抛错,真是岂有此理。不能拿来查对象,那么怎么办呢?这个时候点进源码看,原创 2023-07-04 21:30:11 · 2351 阅读 · 2 评论 -
关于Sharding-JDBC数据源配置有下划线报错的问题
这里是继上文中,关于数据源配置了下划线之后读取不到的问题的探究。再上篇文章中我在文章里强调了这个问题,网上说的模棱两可。官方文档也未作出详细说明,所以自己花了点时间,进行调试略有心得,在这里分享!原创 2022-09-24 21:23:57 · 1103 阅读 · 0 评论 -
Sharding-JDBC读写分离配置
注意的是数据源的自定义名称:ds0master 这个是有效的,写成 ds0_master 启动会报错,注意这个天坑~ 这里笔者专门花了一个小时左右时间,去层层进断点调试,下面会说!这个结果是正常的,因为这一章我至少配置了 sharding 的读写分离,单库分表,但是在数据库层面却没有设置主从同步,所以这个是正常的。创建两个数据库:master_order 和 slave_order。由于这里我只有 2 台数据库,就搞个一主一从,规划如下;创建表:m_order_0 和 m_order_1。原创 2022-09-24 20:55:38 · 900 阅读 · 1 评论 -
Sharding-JDBC主子表(绑定表)关联
主子表关联在我们的开发业务中是及其常见的,本文我们就来看下如何在分库分表的情况下,使用来完成主子关联。官方文档指分片规则一致的主表和子表。例如:t_order 表和 t_order_item 表,均按照 order_id 分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。其中 t_order 在 FROM 的最左侧,ShardingSphere 将会以它作为整个绑定表的主表。原创 2022-09-23 21:42:56 · 3165 阅读 · 0 评论 -
Sharding-JDBC简单使用
sharding-jdbc 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。JAVA APIYamlSpringBootSpring 命名空间(xml 配置文件)原创 2022-09-21 21:38:33 · 2447 阅读 · 3 评论 -
Spring Plugin 的使用
配置@EnablePluginRegistries注解,可以配置多个Class类型每一个Class类型都创建一个类型为PluginRegistry(具体实现类为OrderAwarePluginRegistry)的Bean,将此Class类型的所有Bean都添加到此PluginRegistry对象中后续可以通过每一个PluginRegistry对象获取到其内部的所有Plugin对象。原创 2022-09-18 11:22:27 · 2245 阅读 · 0 评论 -
Mybatis自定义类型映射处理器
mybatis作为一款相当优秀的一款orm框架,不仅本身就提供了很多类型映射,还支持自定义类型映射(javaType与jdbcType之间的关系),通过TypeHandler我们可以自己在数据库类型与实体类型之间任意转换。比如说,我现在需要讲前端传来的手机号进行脱敏入库处理,而用户查的时候,看到的得是正常的!这就涉及加密解密处理了,当然我们可以在service里处理,这里我们演示下如何通过自定义类型映射,进行处理。原创 2022-09-17 23:42:22 · 927 阅读 · 0 评论 -
图片压缩thumbnailator
我们日常上传图片时,如果需要做图片预览直接使用前端组件预览没有问题。但是如果上传的图片较大,组件加载稍微比较耗时怎么办呢?我们的思路是在上传大图片时,同时生成一个压缩后的预览图片,压缩图片尽可能保证不失真。编写工具类接口测试测试原图压缩后...原创 2022-07-07 22:05:42 · 374 阅读 · 1 评论 -
使用kaptcha生成验证码
前言说到生成验证码,我们第一个想到的就是kaptcha包,因为这个包已经存在很久了,比较稳定,用的人也多网上的示例代码多,而且很多项目脚手架做验证时也都是用这个框架的。代码添加依赖 <!-- 验证码 --> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</arti原创 2022-05-17 22:23:21 · 2619 阅读 · 0 评论 -
maven打jar包时报update interval of XXX has elapsed or updates are force
前言今天给项目打包时报resolution will not be reattempted until the update interval of XXX has elapsed or updates are force,重新clean也没用,我想可能和我引用外部jar包有关系环境jdk8,maven3.3.9解决方法命令行方式mvn clean install -U修改settings.xml添加<repositories> <repository&g原创 2022-04-22 18:56:33 · 962 阅读 · 0 评论 -
springboot定义过滤器放行swagger遇到的问题
最近在项目里加了个过滤器,拦截请求的token,但是我想放行swagger的页面,我在过滤器里配置了放行规则但是swagger出现Unable to infer base url。百度了一下有以下几种可能:需要在SpringBoot的启动Application前面加上 @EnableSwagger2注解;可能是由于使用了Spring Security 影响;在排查该问题时,假设你的swagger-ui访问路径是http://localhost:8080/swagger-ui.html,可以先直接访原创 2022-04-22 18:50:21 · 2645 阅读 · 2 评论 -
通过flyway实现项目启动自动建库建表
目录前言代码实现添加依赖sql文件命名方式也有讲究代码配置启动建库前言我之前研究过一个开源论坛项目,pybbs,他代码下载下来直接启动会自动建库建表,所以我拿过来研究一下(不难),这样以后方便开发萌新部署项目。代码实现添加依赖 <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactI原创 2022-03-10 22:55:54 · 2387 阅读 · 0 评论 -
Hutool树形插件使用构建多层级数据
目录前言使用范例环境数据库代码结语前言在我们实际开发中,像菜单/评论等这样的业务,它通常都是有层级的(层级结构肯定完全一致)。对于处理这样的数据我们通常的思维是通过mybatis构建层级结构,然后使用sql进行关联,第二就是通过单表递归查询。 而对于强大的辅助开发工具包hutool来说,他已经为我们开发者考虑到了这些需求,并且提供了TreeUtil工具类。使用范例环境jdk8,idea2020.1,MySQL8.0(5.x亦可),hutool5.7.22(我公司那个hutool好像是5.3.x,这原创 2022-03-10 22:40:08 · 1710 阅读 · 0 评论 -
项目是聚合工程 required a single bean, but 2 were found: 问题
项目结构之所以贴出来,是因为就是这个搞的鬼!!!控制台打印:Description:Field commentService in com.zhbcm.squad.controller.SqCommentController required a single bean, but 2 were found: - sqCommentServiceImpl: defined in file [E:\JavaSpace\squad_page\squad_server\squad_service\ta原创 2022-03-09 19:50:06 · 602 阅读 · 2 评论 -
RabbitMQ延迟队列实现
目录前言代码依赖application.yml配置消费者写测试类前言在电商项目中,当我们下单之后,一般需要 20 分钟之内或者 30 分钟之内付款,否则订单就会进入异常处理逻辑中,被取消,那么进入到异常处理逻辑中,就可以当成是一个延迟队列。很多场景下我们都需要延迟队列,本文我们就用RabbitMQ自带的延时和死信机制来实现延时队列。代码依赖 <dependency> <groupId>org.springframework.boot&l原创 2022-02-23 19:54:43 · 1464 阅读 · 0 评论 -
springboot+mybatis实现多数据源
目录前言准备环境建表语句代码项目结构依赖配置dao测试前言在一个项目体量不断增大的情况下,数据量随之增大,那么为了分散数据库的压力,可能会通过分库分表来进行减缓操作。这就与我们单一的数据源就不一样了,而是要配置多数据源了,本文就通过简单的示例,来示范多数据源实现的过程准备环境jdk8,idea2020.1.1,mysql8.0,maven3,springboot2.5.0建表语句这两张表要建在不同的数据库下CREATE TABLE `job_test` ( `id` int(11) NOT原创 2022-02-09 20:56:29 · 4171 阅读 · 2 评论 -
SpringBoot使用过滤器过滤参数中的空格
前言最近项目中需要对前台提交的参数进行去空格,这种事本来应该前台做,但是我想如果前台做的话,所有input框都得进行trim代价太大,我就想着后台可不可以对提交的参数进行去空格,查了一下,可以使用过滤器进行实现。代码过滤器import org.springframework.stereotype.Component;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.htt原创 2021-12-25 22:14:54 · 1588 阅读 · 1 评论 -
Java实现本地的分片上传和断点续传
目录前言代码环境说明后台依赖实体分片工具类控制层前端封装页面后续前言关于分片上传和断点续传这个需求,但凡涉及到文件服务的应用,无不需要考虑这个问题,我本人之前也发过两篇博客,一篇讲述分片的一些原理,一篇描述了分片的实现。我现在的一个项目里面就需要对文件进行分片上传,在之前我写了文章,这里我不赘述。但我们的项目使用的文件系统时FASTDFS,似乎总是出现问题(虽然不一定就是它的问题,但是项目里的其他人似乎觉得就是它的问题),可能有想拿掉他的趋势,自己写文件服务。所以我自己抽取项目里的上传功能,单独抽成了一原创 2021-12-25 21:34:31 · 3460 阅读 · 18 评论 -
多线程+队列做大数据量批量插入
多线程+队列做大数据量批量插入原创 2021-12-01 22:23:30 · 4965 阅读 · 2 评论 -
SpringSecurity放行接口之后,接口里拿不到用户信息
目录前言分析原因解决方法参考前言项目使用的是security安全框架,今天打开项目发现有个接口报npe很奇怪。于是看了下是SecurityContextHolder获取用户信息时候获取不到用户信息了。这个情况以前没有出现过,所以问了下我们项目组长,他说有没有可能是放行接口的原因。为此我专门研究了一下~分析原因我们的放行方式是:@Overridepublic void configure(WebSecurity web) throws Exception { web.ignoring().原创 2021-07-30 19:37:21 · 1557 阅读 · 0 评论 -
spring.jackson.date-format配置不生效的问题
前言今天接完单点登录之后, 前端一直在报错. 我一直以为是接单登的问题, 排查之后才发现是因为日期格式又变回绝对秒了, spring.jackson.date-format失效了. 查了一下发现是我添加拦截器并继承 WebMvcConfigurationSupport 后会覆盖@EnableAutoConfiguration关于WebMvcAutoConfiguration的配置!从而导致所有的Date返回都变成时间戳。解决方法import com.fasterxml.jackson.databind原创 2021-07-03 19:40:32 · 2251 阅读 · 0 评论 -
SpringBoot+Vue+Cas单点登录与登出
前言什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分.我们常见的实现框架有OAuth2和cas. 我下面的例子是基于其他博客的作者发给我的一个可运行示例进行一些说明, 实际上也就一个关键点, 一直困扰我们.环境cas服务5.2springboot2.0.3vue2.0Tomcat8.5.39这里需要注意, 我在内网运行cas服务端的时候,发现Tomcat8.0原创 2021-07-02 22:52:35 · 6272 阅读 · 3 评论 -
springboot设置指定文件上传路径(外部路径)
目录前言示例测试前言这两天重新看erupt框架, 发现他设置的本地文件上传路径不在项目的指定静态文件夹下, 于是看了下他的源码, 原来它是通过重写静态资源目录设置的! 这样做可以将上传的文件与项目脱离, 不会对jar包文件产生冗余负载示例WebMvcConfigimport org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.Re原创 2021-06-26 21:16:45 · 4556 阅读 · 6 评论 -
xxl-job学习记录
概述XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。准备环境文档地址: https://www.xuxueli.com/xxl-job/项目地址: https://gitee.com/xuxueli0323/xxl-job/tags具体搭建方法请看文档 快速入门, 运行SQL脚本并将项目编译打成jar包或者在idea中打开启动如果常规启动的8080端口被别的项目占用需要更改端口的话, 那么需要去调度中心原创 2021-06-20 20:58:19 · 344 阅读 · 1 评论 -
Java集成socket.io
前言本文基于SpringBoot2.2.6, 集成netty-socketio依赖<dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.7</version></dependency><dependency> &l原创 2021-06-18 22:11:21 · 8654 阅读 · 13 评论 -
达梦服务中断重启后项目无法连接重连数据库
前言最近线上的达梦服务总是中断, 然后我们线上的项目就连不上数据库了.我们排查加百度认为是druid连接池的问题, 一旦项目和连接池中断, 那么即便达梦服务恢复也无法重新连接. 根据我们百度的情况在原有的配置上, 再加个闲时探活机制!配置#连接池 使用阿里的druidspring: datasource: url: jdbc:mysql://127.0.0.1:3306/wbpost?useUnicode=true&characterEncoding=utf-8&ser原创 2021-06-01 00:26:57 · 1140 阅读 · 2 评论 -
SpringBoot2.x集成Activili7工作流
目录准备工作搭建springboot项目引入依赖文件配置项目结构添加基本配置开始画流程图在resources目录下建一个文件夹导出png图片代码参考文章准备工作安装actiBPM插件, 此插件在idea2020版本已经在市场搜不到了, 必须通过连接去下载下来本地安装了https://wws.lanzoui.com/i2CI0p60yxi密码:9htv搭建springboot项目这里需要注意的是,springboot的版本对activili的版本兼容都不太友善, 比如我之前建的是2.2.6, 用的原创 2021-05-16 10:37:39 · 555 阅读 · 1 评论 -
使用mybatis实现拦截参数自动分页
前言之前说过我们的项目使用的是达梦数据库, 我一开始带了pageHelper进去, 发现他实现不了分页. 然后我们组长就通过mybatis的拦截器自己实现了分页. 今天正巧刷到一篇文章, 也是教自动分页的, 所以整理实现了一下实现过程我对比了下他的实现步骤和我们项目几乎是一样的, 毕竟天下代码一大抄. 但是他的实现的效果是指定方法分页, 而我们项目的效果是dao层方法里有Page参数的分页, 所以这里我要进行下改动~拦截器import org.apache.ibatis.binding.Mappe原创 2021-04-30 23:24:12 · 432 阅读 · 1 评论 -
springboot项目打包, 配置文件抽离到jar包外面
每隔一周的时间, 项目有大功能或者是修复大bug, 都要重新部署到服务器上. 我的springboot项目是多环境配置, 用到了fastdfs, rabbitmq等一些配置. 每次正式库,临时库来回切换. 这次要让我们把配置文件全部抽离出来, 不要打在jar包里.今晚问了下Erupt的作者大哥. 他说只要放在jar包外面就可以自动覆盖测试一下我分了两个环境, 端口不一样, 打印端口. 显示完全正常...原创 2021-04-28 20:08:38 · 588 阅读 · 0 评论 -
FastDfs大文件分片上传和断点续传
前言其实之前在大文件分片上传与极速秒传实现文章中我写过一次关于分片上传和断点续传, 但其实那个时候对断点续传的理解及其有限. 最近在项目里需要对大文件进行分片上传, 所以开始重新研究. 不过我觉得对于这个我只想讲下核心的思想.分片上传思想根据之前的文章, 我说过, 假如我们对500M的文件进行分片上传, 每片大小是5M, 那么总共就是100M分片. 前端主要就是通过文件大小和设置的分片的大小计算出分片的数量, 将这些必要参数传给后端, 后端通过分片的数量一次一次的将每个分片传到后台, 后台也同样一次次原创 2021-04-22 00:39:57 · 6429 阅读 · 4 评论 -
Java官方SDK进行QQ接入
前言如果你尚未认证成功,请参考我的文章《QQ授权登陆 接入》,完成之后拿到AppID和APP Key进行授权操作。官网的SDK是九年前的代码了,还是基于servlet的。所以如果搭建springboot项目的话,完全可以去码云上找一个代码import com.qq.connect.QQConnectException;import com.qq.connect.api.OpenID;import com.qq.connect.api.qzone.UserInfo;import com.qq.co原创 2021-02-25 22:22:28 · 843 阅读 · 0 评论 -
mp生成的service Bean重复问题
首先这个问题的原因目前为止仍在排查。今天将官网的代码生成器集成进了项目里,在测试类里面测试的时候发现报这是说有两个ISqArticleService的Bean。我起初以为是集成了IService的原因,但是很快我就否了,因为我上次就集成过一次了,并没有出现这样的问题。所以这个问题现在依然在找原因,不过已经有了对应解决办法。既然是Bean的重复,那么给service起个别名就行!@Service注解里,参数就是service的别名设置。当然,如果有哪位遇到过这样的问题 会解决的,麻烦下方留言,感激不尽原创 2021-02-08 23:00:02 · 510 阅读 · 0 评论 -
mybatis-plus代码生成使用
前言最近搞得一个项目持久层用的就是mp,这是一个基于mybatis的一个增强版持久层框架,强大性不言而喻。并且自带一个代码生成器,所以今天我们就来折腾一下这个代码生成器!配置根据官网的配置,我们创建一个Maven工程,添加依赖<!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>l原创 2021-02-08 20:07:53 · 326 阅读 · 0 评论 -
springboot文件上传超过最大长度自定义异常不生效解决方式
springboot做文件上传如果用户上传的文件超过规定范围,控制台会提示错误,但是如果用户自定义异常拦截却拦截不到,因为这个错已经被Tomcat抛出去了,所以要解决这个问题需要对springboot内置Tomcat进行配置spring: servlet: multipart: max-request-size: 15MB #改为自己的想要的 max-file-size: 5MB #改为自己的想要的 enabled: trueserver: tomca原创 2021-02-04 21:56:46 · 2799 阅读 · 2 评论 -
SpringBoot+自定义注解+拦截器实现接口幂等性问题
前言这是一个老生常谈的话题,关于如何实现接口幂等性,网上也给了好几个解决方案:数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据token 机制,每次接口请求前先获取一个 token,然后再下次请求的时候在请求的 header 体中加上这个 token,后台进行验证,如果验证通过删除 token,下次请求再次判断 token悲观锁或者乐观锁,悲观锁可以保证每次 for update 的时候其他 sql 无法 update 数据 (在数据库引擎是 innodb 的时候, select 的条件原创 2021-01-30 22:44:22 · 483 阅读 · 0 评论 -
mybatis返回map数据,解决null值实体不返回的问题
springboot整合mybatis返回map字段,value为空时这个字段就不返回。而我们希望及时是空,也可以将空值返回,所以在配置文件中添加mybatis配置mybatis: configuration: call-setters-on-nulls: true原创 2021-01-26 22:27:31 · 1232 阅读 · 0 评论 -
Erupt框架入门案例(一)
什么是 erupt ?erupt 是一个低代码 全栈类 框架,它使用 Java 注解 来生成页面以及增、删、改、查、权限控制等后台功能,不需要懂前端,也不需要写繁琐的CURD,自动创建表结构,controller / service / sao / mapper 文件都不用创建,极大减少开发工作量,将后台开发速度提升到极致。取代代码生成器,开发后台管理系统更优解!开源项目地址:https://gitee.com/erupt/erupt入门案例地址:https://gitee.com/erupt/原创 2021-01-11 00:08:32 · 10820 阅读 · 0 评论 -
SpringBoot+Netty实现CS交互(一)
添加依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.25.Final</version> </dependency>ws服务端package com.imooc.netty.websocket;import io.netty.boots原创 2020-12-29 00:19:14 · 293 阅读 · 0 评论 -
SpringBoot+JPA框架分页、带条件查询等操作
前言最近项目工作持久层选型暂定JPA,所以有机会加强学习了一下。初学SpringBoot时也简单学过,但是不是很深入,所以这次主要是说一些进阶且常用、实用的操作!前置准备创建两张表或者让JPA自动建表,任意选择!学生表package com.example.jpa.entity;import javax.persistence.*;import java.io.Serializable;@Entity@Table(name = "t_student")public class Stu原创 2020-12-12 22:37:24 · 6082 阅读 · 0 评论 -
大文件分片上传与极速秒传实现
目录为啥要有断点续传断点续传的大致流程图创建工程添加依赖配置文件创建数据库创建实体类mapper层响应工具类服务层控制层页面码云传送门为啥要有断点续传传统的文件传输方式一旦遇到网络问题或者浏览器做重刷的话,那么对于上传过程是灾难性的。那么为了解决这个问题,就出现了断点续传。在之前已传输的地方再接着传输!今天我们这里就用springboot来实现断点续传!断点续传的大致流程图这里的核心在于如何分片,记录分片,然后再获取分片重新从分片处接着传输!创建工程添加依赖<?xml version=原创 2020-11-19 21:26:40 · 1467 阅读 · 4 评论