- 博客(53)
- 收藏
- 关注
原创 springboot利用Spring的自动装配,策略模式提高系统接口扩展能力,
前段时间有个简单的短信登录功能,需要集成短信服务实现短信发送,一开始用的阿里云,后面领导又说用天翼云,还说阿里云的保留,以后说不准还会集成其他的服务商,于是用nacos的热更新来解决动态切换,又为了代码优雅一点,就用了策略模式来实现这个功能。
2024-05-21 17:16:15
545
1
原创 springboot自定义注解+aop+redis实现延时双删
这里之所以要延时一段时间再删除,是为了避免多线程情况下,更新数据库的操作还没执行,就执行了第二次删除缓存的操作,此时如果有请求进来,就会读取数据库并将数据写入缓存,这时再更新数据库就会导致数据不一致的问题。两次删除缓存是因为第一次删除缓存后,这时如果有请求进来,得到了数据并写入redis,然后再更新数据库,就会导致数据不一致。redis作为用的非常多的缓存数据库,在多线程场景下,可能会出现数据库与redis数据不一致的现象。我在queryWorkOrderDetail()中将查到的数据存入了redis中,
2024-01-16 20:03:41
740
1
原创 省市区三级联动查询redis(通过python脚本导入数据)
最近工作有一个工作需求是实现省市区联动,点击省下拉框,选中一个省,然后再选市,最后选区,当然最重要的首先自然是数据了,没数据怎么测试接口,我数据是在这里拿的,得到一个json文件,里面是一个list的结构,每一条数据都是省市区树级展示。那么有数据之后,就要导入库中,之所以选用redis而不是mysql,是因为省市区数据是比较固定的,很难会有改动,所以放在redis反而更好。
2023-10-29 22:10:55
838
原创 Thread.sleep()不释放锁 Object.wait()释放锁
wait()方法是Object类里的方法, wait()方法、notify()方法和notiftAll()方法用于协调多线程对共享数据的存取,所以只能在同步方法或者同步块中使用,否则抛出IllegalMonitorStateException。当线程1执行 Thread.sleep() 后,线程2开始执行了,但是进不去synchronized代码块,直到3秒后才继续执行线程1,因为 sleep方法不会释放锁。当线程获取锁时,sleep()方法不会释放对象锁。sleep不会释放锁。
2023-08-13 23:36:17
588
原创 断电/非正常关机后docker启动失败 Job for docker.service failed because start of the service was attempted too oft
断电/非正常关机后docker启动失败 Job for docker.service failed because start of the service was attempted too oft
2022-07-25 12:21:09
1841
原创 nacos服务注册不上
如果你配置加了,并且启动类也加了注解,在nacos服务列表中还是注册不上服务,那可能是依赖的问题:把config放在discovery下面即可,亲测有效
2022-06-30 10:29:24
8271
4
原创 java8使用stream流将数据处理成树状结构(非递归)二
有时需要将数据处理成树形结构,如果数据是一张表内以 id,parentId的形式,可以看看这篇java8使用stream流将数据处理成树状结构(非递归)如果数据是两张表A B,B表的parentId对应A表的id这种形式,可以用下面的方法:章节表 小节表一个章节可以有多个小节public List<ChapterVo> getChapterVideoByCourseId() { // 章节信息 List<EduChapter> eduChap
2022-05-19 21:11:48
545
原创 在非spring管理的类中,如何注入ioc中的对象
前言一般情况下,可以用 @Service @Repository等注解将类交由spring管理,再用 @Autowired 或 @Resource 来调用对象。但有时候会遇到在非spring管理的类中注入spring管理的对象,比如监听器Listener,Listener的生命周期是由servlet管理的,而spring容器中的bean是由spring管理的,导致servlet容器不认得 @Autowired 注解,最终注入失败错误使用在最近用 easyexcel 读取数据导数据库的实际使用中,一
2022-05-18 12:00:36
1546
原创 @RequestParam和@RequestBody注解的大概执行流程
序言:supportsParameter resolveArgument 都是 HandlerMethodArgumentResolver 接口下的定义的方法:(1)supportsParameter 用于判断是否支持对某种参数的解析(2)resolveArgument 将请求中的参数值解析为某种对象@RequestParam执行流程:1、HandlerMethodArgumentResolver 的子类 RequestParamMethodArgumentResolver 中的 support
2021-11-29 11:55:14
590
原创 自定义注解RequestBodyParam实现接收json数据
一、添加注解@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestBodyParam { /** * 请求参数的名称 {@link #name} */ @AliasFor("name") String value() default ""; /** * 请求参数的名称 {@link #va
2021-11-29 11:47:24
1172
原创 java8使用stream流将数据处理成树状结构(非递归)
在开发中经常能遇到需要将带有父子级的数据处理为树形结构数据,网上搜到的基本都是递归,这里不用递归,递归性能太差@Overridepublic Map<String, List<Region>> test2() { Map<String, List<Region>> map = new HashMap<>(); List<Region> regionList = list(); List<Region&g
2021-11-15 11:04:44
4912
5
原创 springboot+token实现登录拦截完整
最近写的项目中又写了一遍前后分离的微信授权登录功能(本人后端),顺便梳理下,不想看可直接看后面的干货通过登录拦截强制未登录用户进入授权界面,无法直接访问其他页面用户进入授权界面完成授权会返回code,后端根据code进行一系列操作后将用户注册保存至数据库(后端会进行一些处理比如判断主动授权、静默授权,是否更新过信息)同时会生成token,后端将token保存在redis中,前端保存在storage中前端在访问除登录请求或业务需要的请求外,前端都需要将token携带在请求头中,后端接收到token进
2021-11-01 11:29:09
2250
1
原创 Zabbix4.0监控环境搭建详细笔记
Zabbix是一个高度集成的企业级开源网络监控解决方案,与Cacti、nagios类似,提供分布式监控以及集中的web管理界面。zabbix具备常见商业监控软件所具备的功能,例如主机性能监控,网络设备性能监控,数据库性能监控,ftp等通用协议的监控,能够灵活利用可定制警告机制,允许用户对事件发送基于E-mail的警告,保证相关人员可以快速解决。还能够利用存储数据提供杰出的报表及实时的图形化数据处理,实现对监控主机7x24小时集中监控。Zabbix通过C/S模式采集数据通过B/S模式在web端展示和配置,通
2021-10-20 14:54:23
818
1
原创 renrenfast人人开源后端项目启动报错The last packet sent successfully to the server was 0 milliseconds ago解决办法
网上看了很多说的都没用,这里记录下如果确定连接数据库的ip、账号密码等没错的话修改application-dev.yml配置文件:spring.datasource.druid.url 问号后面修改为 useSSL=false&useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai...
2021-09-30 11:58:06
637
5
原创 docker搭建及部署容器
安装docker啥的就不多说了,个人比较喜欢tar包安装docker,可以参考这篇文章(https://www.jianshu.com/p/abbcbe004290),不过如果没代理还是乖乖的国内源下载dockerDocker常用基本命令docker ps 启动docker save -o xxx.tar swj-portal:0.0.1-SNAPSHOT (从docker导出镜像)docker load < xxx.tar (拉取镜像进docker)docker tag 镜像ID 镜像名
2021-07-16 15:13:05
295
原创 nginx搭建部署前后端项目
nginx安装下载依赖环境yum -y install gcc pcre-devel zlib-devel openssl openssl-devel安装cd /usr/localmkdir nginxcd nginxwget http://nginx.org/download/nginx-1.13.4.tar.gztar -xvf nginx-1.13.4.tar.gzcd nginx-1.13.4./configure --prefix=/usr/local/nginx (prefi
2021-07-16 08:57:37
4602
1
原创 zookeeper安装与单机集群部署
Zookeeper下载与安装 wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz // 下载文件 这里选择是3.4.9版本 tar xzf zookeeper-3.4.9.tar.gz // 解压配置在解压后的文件夹同级创建data和logs两个目录用于存储数据和日志# /usr/local/zookeeper/zookeeper_datamkdir zoo
2021-07-09 16:13:54
293
原创 nacos配置中心无法连接或启动报错
如果你启动后是下面这样的,那就说明你连接上了,并且红框中最右边的name就是你在配置中心里的DataId如果你启动后没有上面那样或者是报错,并且你的代码没问题,那最有可能就是版本不兼容,可以参考下面的版本<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <
2021-06-25 11:41:34
3026
原创 springboot整合dubbo开发
基础知识什么是分布式系统分布式系统是建立在网络之上的软件系统随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进发展演变单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键优点:适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用缺点:性能扩展比较难、协同开发问题、不利于升级维护垂直
2021-06-10 16:43:45
176
原创 springboot整合springsecurity安全框架(后端spring_security模块代码可直接使用,根据需求自定义修改)
SpringSecurity简介用户认证和用户授权主要包含两部分:用户认证和用户授权用户认证:进入用户登录时候,输入用户名密码,查询数据库查看是否正确,如果正确,则认证成功用户授权:登陆了系统,登录用户可能是不同的角色,比如普通用户和管理员springsecurity本质上就是用filter对请求的路径进行过滤如果是基于Session,则会对cookie里的sessionId进行解析,找到服务器存储的session信息,然后判断用户是否符合请求的要求如果是token,则解析出toke
2021-06-06 16:35:17
686
原创 springboot整合canal实现与mysql数据实时同步
以下有关linux操作都是基于docker容器的一、Canal介绍1、介绍canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。2、Canal环境搭建canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能(1)检查binlog功能是否有开启mysql> show variables like ‘log_bin’;±--------------±----
2021-05-27 17:24:59
1227
1
原创 springboot整合redis及使用(RedisTemplate、@Cacheable注解)
springboot操作redis有主流的两种方法,RedisTemplate和注解@Cacheable使用RedisTemplate的方式操作redis需要一个RedisConfig配置类,最好写一个RedisUtil工具类可以更方便的操作redis,这里的RedisUtil和RedisConfig都可以直接拿去用的代码如下:RedisUtil.java/** * * @author xyouzi * 基于spring和redis的redisTemplate工具类 * 针对所有的hash
2021-04-26 21:35:04
1350
原创 jpa删除级联关系时(@OneToMany)只执行了查询语句而未删除
在使用jpa的时候,如果有@OneToMany(一对多)关系,想删除多的一方的数据会删除不了,也不会报错解决方法:大部分时候用到的是FetchType.EAGER,改成LAZY就行这两个属性的区别是:1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。3、比方User类有两个属性,name跟address,就像百度知道,登录后用户名是需要显示出来的,此
2021-03-13 17:20:39
819
1
原创 springboot整合websocket实现广播、私聊功能
一开始是看着这篇博客写的《使用websocket简单实现多人聊天》,不过有bug(用户名使用的是在线人数作为用户名,当用户退出后,用户名是人数就会出现bug了,可以自己试试,最好是用动态参数)。而且由于这是springboot启动的,需要额外写个配置类,具体原因可以看这篇文章https://blog.youkuaiyun.com/Xyouzi/article/details/113914558,如果使用独立的servlet容器则不需要目录结构引入依赖<dependency> &
2021-02-22 12:00:13
905
原创 springboot实现websocket通信握手失败报错的解决方法
一开始是按照这份代码写的https://www.cnblogs.com/best/p/5695570.html,但一直报错200,后发现是因为:如果使用独立的servlet容器,那这份代码没问题;但如果是使用springboot的内置容器,则需要多几个步骤:1、引入依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta
2021-02-21 10:25:15
1479
3
原创 Springboot项目中事件的发布和监听
在编写商品模块时用到了事件来完成业务场景,比如有商品表,商品收藏表,购物车商品表,当删除商品时,商品收藏表和购物车商品表中对应的商品也要删除。首先定义商品删除事件@Data@ToString@AllArgsConstructorpublic class GoodsDeletedEvent { private long goodsId; // 商品ID}然后定义事件监听器这里用的是注解@EventListener // 订阅商品删除 // -删除购物车中的商品 //
2021-02-04 15:20:36
326
原创 SpringDataJPA使用Specification进行多条件动态查询
springboot项目,orm框架选用的是jpa,开发过程中有一个搜索的功能,就用了Specification对象来完成多条件的动态查询。具体实现:首先定义接口并继承 JpaRepository<X,X>,JpaSpecificationExecutor因为要分页所以还加了个Pageable参数,方便后期分页public interface GoodsRepository extends JpaRepository<Goods, Long>, JpaSpecification
2021-02-03 11:24:48
1156
原创 SSM实战项目-前后分离(简单易懂)
暑假学习写的基于springboot的ssm项目,用作ssm入门项目蛮不错的,只需要会:SpringBoot-Spring-Mybatishtml、css、js、vuemysql、redis这几种技术栈基本就ok了,还可以自己买个服务器上线玩玩,虽然我的已经过期了附上github地址:https://github.com/xyouzi/StudyClass-SSM-写完这个后还自己写了个后台管理系统,在后台进行添加课程等操作,也可以自己写一个试试,不过我那时还不知道有Guns酱的框架,搭后台
2020-12-22 20:29:20
1032
1
原创 javascript获取指定范围随机数
获取5-10,参数可修改<script> // [min,max] // function getRandom(min,max){ // return Math.floor(Math.random()*(max-min+1))+min; // } // (min,max) // function getRandom(min,max){ // return Math.c
2020-07-11 17:36:19
407
原创 java idea Maven Web报错:org.apache.jasper.JasperException: Unable to compile class for JSP
这个报错这篇文章里讲的很清楚:https://blog.youkuaiyun.com/gaoxin_gx/article/details/100085161我这里讲下怎么把 pom.xml 文件里添加插件代码(如下图)设置成模板,简化书写首先复制代码块然后File->Settings:接着左上角输入live找到Live Templates再点击红框中的然后在弹出框输入一个模板组的名字随后找到这自己创建的名字,并点击红框中的:在如下图输入对应的模板名(名字自定义,后期输入这个模板名就可生成
2020-06-15 12:04:12
415
原创 JAVA打字游戏demo
刚学JAVA,开始不知道写什么,先看的别人写的,原文链接游戏类package type_Game;import java.util.Scanner;public class Player { private int rank; // 级别 private int curScore; // 分数 public Player() { } public Player(int rank, int curScore) { this.ra
2020-05-22 08:44:41
406
原创 解决SecureCRT连接Linux虚拟机没有弹出输入密码无法连接
本人遇到这个问题是因为本地ping与虚拟机ping不在同个网段,主要是前一天还可以正常连接,所以没想过是ping的问题,搞了一下午没成,问了同学才发现真的是ping的问题,遇到此问题可以试试这个方法先查看虚拟机的ip是多少,然后在cmd上ping xxx.xxx.xxx.xxx,看是否能ping成功,如果请求超时,就按下面步骤在VMware Workstation中点击左上角编辑->虚拟...
2020-05-04 17:53:34
8293
2
原创 vue.extend实现全局弹窗组件MessageBox
<template> <div class="messageBox"> <h2>{{title}}</h2> <p>{{content}}</p> <div> <div @touchstart="handleCancel">{{cancel}}</div&g...
2020-03-08 13:16:47
855
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人