- 博客(66)
- 收藏
- 关注
原创 自定义注解 + AOP 记录用户的使用日志
配置自定义注解“LogPoint”,之后会用在关键的接口上,作为切入点来记录该接口的访问信息。/**** @Description 日志描述*/
2024-01-27 10:10:48 427
原创 第三方以安全为由限制了我方发送请求的ip和源端口号,kafka推送不过去,如何说服第三方
第三方以安全为由限制了我方发送请求的ip和源端口号,kafka推送不过去,如何说服第三方
2022-08-23 19:54:46 2063
原创 容器启动时从yml或者properties里取值,然后给jar包里的某一个静态类赋值
容器启动时从yml或者properties里取值,然后给jar包里的某一个静态类赋值先上代码,我再解释#properties配置web.host=127.0.0.1:8080web.appKey=123456web.appSecret=qwertyuweb.path=/pathpublic class MyApplicationRunner implements ApplicationRunner { @Value("${artemis.host}") privat
2021-09-12 17:03:46 263
原创 解决使用RestTemplate时 PKIX:unable to find valid certification path to requested target
解决使用RestTemplate时 PKIX:unable to find valid certification path to requested target@SpringBootApplicationpublic class BeanConfig { @Bean public RestTemplate myRestTemplate() { return new RestTemplate(simpleClientHttpRequestFactory());
2021-09-12 15:15:04 1007
原创 当我接手设计一个功能,到底需不需要考虑用到多线程?
当我接手设计一个功能,到底需不需要考虑用到多线程?个人分析,从我实际经历的项目出手。需求背景:各级省BOSS系统(这里简称BOSS-ALL),会把他们的某些数据以excel的形式上传到固定服务器的固定路径,excel的后缀为 ***20210722_APN.xlsx(不同地域省BOSS对应不同文件) ,而我这里的CRM系统(简称CRM)需要:把当天的这些后缀的excel复制到当前服务器的一个临时路径按照不同地域的BOSS文件分别读取数据读取数据后与本系统表里的一些数据整合成新数据将新数据在一
2021-07-22 21:35:11 344 4
原创 个人分析理解,项目到底需不需要用到MQ技术
个人分析理解,项目到底需不需要用到MQ技术订单项 -> 订单规格-> 履行集 -> 履行流程-> OPU上面是公司根据订单业务抽象成的订单框架流程结构。这里的OPU是最小执行单元,它可以是同步也可以是异步。由于该项目没有秒杀方面的需求,MQ就是用来跨系统的异步通信。这里的异步用到过两种技术,一开始是多线程(线程池) + 定时任务(Quartz),后来改为了 RabbitMQ。由于涉及保密条例,这里用伪代码来表示下不用MQ的情况下,是如何实现与外围系统的异步通信:有几点要
2021-07-21 16:45:44 1422 1
原创 RabbitMQ面试题
消息队列分为四步(同时这些这些步骤也会造成消息丢失和发送失败):生产者 -> Broker交换机(Exchange) -> Queue消息在Queue中存储消费者在Queue中订阅消息什么情况下消息发送失败?1.消息没有从Producer发送到Broker,比如网络连接异常或者磁盘故障、磁盘满了。这里有两种确认消息是否发送失败的方法:事务模式try{ channel.txSelect(); //发送消息 //String exchange, String ro
2021-07-20 22:38:57 425 4
原创 SpringSecurity OAuth2 整合JWT,获取token,解析token(密码模式为例子)
我前面的文章曾自己引入JWT,并且定义规则,并用于权限判断(想了解的可以看看源码),这篇将重点记录下,当我发现SpringSecurity可以使用业界公认的OAuth2规范来自动生成token,并且可以整合JWT,我是如何把它用于项目里的。源码地址: https://github.com/longqiyuye925/blogServer直接从依赖开始:这些都是我所用到的相关包,注意下我这篇文章的时间,如果和你当前时间很接近而且你是新建的SpringBoot项目,不要使用最新版本,应该使用2.5.X,否
2021-06-26 16:47:12 5669 6
原创 Spring里面怎么使用Redis
首先在pom.xml里面添加相关的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency>
2021-06-22 16:47:53 837
原创 HashMap分析
MapHashMap看源码前,先看一下类上带的注释,很多问题和答案你在这里都能够找到:Map接口的基于哈希表的实现。此实现提供所有可选的映射操作,并允许空值和空键。 (HashMap 类大致等同于 Hashtable,只是它是非同步的并且允许空值。)该类不保证映射的顺序;特别是,它不保证订单会随着时间的推移保持不变。 此实现为基本操作(get 和 put)提供恒定时间性能,假设散列函数在存储桶中正确分散元素。迭代集合视图需要的时间与 HashMap 实例的“容量”(桶的数量)加上它的大小(键值映射的数
2021-06-22 11:37:29 390
原创 基于SpringSecurity实现权限管理
先想一下,不让你用框架,让你自己去实现权限管理功能,你的脑海里能蹦出几个关键词?FilterInterceptor这两个概念应该是一瞬间想到的,它们都可以帮助我们去实现权限功能,一个是servlet的规范,一个是spring的概念。在系统执行顺序中,Filter先于Interceptor执行。至于更详细的对比,网上有很多资料。SpringSecurity对于权限这方面的实现流程先了解下它里面比较重要的几个点:FilterAbstractSecurityInterceptor (权限管理s
2021-06-21 19:11:02 710
原创 老板让我做登录模块,犹豫再三我选择SpringSecurity
前言 大家都知道,后端的接口访问一定是要有权限管理的,我本身也了解RBAC这个模型,当然可以自己写一套简单的权限管理模块。但是作为一名开发,在保证功能的前提下,是能省事则省事,毕竟加班没有加班费,还吃力不讨好,所以我想通过开源的框架来实现这个权限管理。 我从网上找到了两款谈论度比较高的权限管理框架,一个是SpringSecurity,一个是shrio,大家都认同shrio是简单且容易上手,但是这次的项目由我负责,demo也是我来开发,shrio我还曾经用过,那选哪款还用说吗
2021-06-21 15:46:18 220
原创 List常用集合分析,让你直接搞懂ArrayList和LinkedList
List集合分析先理解两种数据结构:数组和链表数组连续性的内存空间,可以利用空间局部性原理,借助CPU cache进行缓存。**一经声明就要占用整块的内存空间,大小固定,不能再修改 **。链表链表是离线存储线性结构,每个节点通过指针连接,无法进行缓存。链表没有大小限制,支持动态扩容。再看具体集合Vector已废弃,不用再考虑。问题为什么ArrayList在查询方面比LinkList要快?因为,ArrayList数据结构是数组,在内存中是连续存储,CPU Cache会缓
2021-06-06 21:43:37 360
原创 Java开发中,对于 Inteliji2021的方便设置 持续更新
Inteliji2021设置新建的maven项目,不自动下载依赖,如何设置?把source和annotations勾上,不要勾documentation(文档太大,没必要下)联想提示的时候如何忽略大小写?match case不打勾Inteliji中如何在pom.xml中查找库alt+insert修改pom后,点击右上角更新依赖inteliji如何连接数据库报错:Server returns invalid timezone. Need to set ‘serverTimezon
2021-06-06 11:49:27 143
原创 关于SpringIOC的理解,以及自定义IOC的实现demo
IOC功能模拟实现什么是IOC?把创建和管理bean的过程转移给了第三方,而这个第三方就是Spring IOC.何为控制,控制的是什么?是bean的创建、管理的权利,控制bean的整个生命周期。什么是反转?对象的创建这个权利交给了Spring容器,而不是自己去控制,就是反转。何为依赖,依赖什么?程序运行需要依赖外部的资源,提供程序内对象的所需要数据、资源。什么是注入?配置文件把资源从外部注入到内部,容器加载了外部的文件、对象、数据,然后把这些资源注入给程序内的对象,维护了程序内外对象之间
2021-05-28 14:46:53 266
原创 关于SpringAop的理解和实现自定义AOP的demo
Aop功能模拟实现JDK代理CGlib代理自定义注解。自定义切面类。1 获取所有的切面类。2拼接aspectInfoList。3遍历容器中的类。4 粗筛符合条件的Aspect 5 尝试进行Aspect的织入AOP(Aspect-Oriented Programming)OOP( Object-Oriented Programming)什么是AOP什么是Aspect切面,用来切入目标对象的载体什么是advice增强,扩展的逻辑代码一般写在这里什么是join point程序运行的
2021-05-25 16:43:54 253 3
原创 Shrio异常The security manager does not implement the WebSecurityManager interface.
Shrio异常FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanInitializationException: The security manager does not implement the WebSecurityManager interface.2020-09-23 21:09:52.721 [restartedMain] ERRO
2020-09-23 21:36:50 2709 10
原创 Flutter采坑实录
Flutter采坑实录搭建环境踩了不少坑,这里开始记录下:因为科学上网,正常的依赖下载不下来,这里记录下遇到的问题,大家直接全文搜索你的关键词,如果有,直接去文章末尾参考我修改的地方修改吧。看不懂的地方,可以留言,我会尽力描述清楚。wrong:A problem occurred configuring root project ‘android’.Could not resolve all artifacts for configuration ‘:classpath’.Could n
2020-08-13 22:14:04 6985
原创 Redis主从复制
Redis主从复制由于windows版的redis无法进行哨兵模式配置,为了演示,就切换到linux的redis上。概念是指将一台redis服务器上的数据复制到其他redis服务器上。前者称为主节点(master),后者称为从节点(slave)。主机可以读写,从机只能读。作用:高可用 (坏了一个,还有从机)负载均衡 (读写分离)故障恢复手动配置环境将redis.conf 在原目录复制二份,分别将复制后的起名redis6380.conf、redis6381.conf(我这里的red
2020-07-16 21:20:06 273 1
原创 Redis的发布和订阅
Redis的发布和订阅Redis的发布订阅是一种消息通信模式。里面的逻辑很简单,引用如下图。订阅:127.0.0.1:6379> subscribe wushichao # 订阅wushichao频道Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "wushichao"3) (integer) 1发布:127.0.0.1:6379> publish wushichao 111 #向wushic
2020-06-20 11:10:52 164
原创 Redis持久化: .rdb 和 .aof
Redis持久化: .rdb 和 .aofRedis为什么要持久化? Redis是保存在内存中,断电数据消失。为了能够在重启后也保留数据,则需要对数据持久化。Redis自带了两种持久化方式:RDB和AOF。在指定的时间间隔内(可以在service.conf 中找关键字:save “”),将内存的数据集快照(snapshot)写入磁盘,数据恢复时,是直接读取rdb文件到内存。整个过程,主进程不进行IO操作,确保了高性能。我们知道save “” 是有多少秒内多少次操作才进行数据集快照保存,所以会存在
2020-06-17 20:56:07 170
原创 Redis配置文件:redis.conf学习
Redis配置文件:redis.conf学习单位# 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes# 大小单位,忽略大小写# units are case insensitive so 1GB 1Gb 1gB are all the sa
2020-06-16 22:57:27 125
原创 特殊数据类型 :BitMap
特殊数据类型 :BitMapBitmap数据结构是采用二进制来进行记录,就只有0 和 2两个状态127.0.0.1:6379> setbit sign x 0(error) ERR bit offset is not an integer or out of range127.0.0.1:6379> setbit sign 0 0 # 设置一个map(sign) 状态为0(integer) 0127.0.0.1:6379> setbit sign 1 0(integer) 0
2020-06-06 16:20:38 799
原创 特殊数据类型 :Hyperloglog
特殊数据类型 :Hyperloglog127.0.0.1:6379> flushallOK127.0.0.1:6379> pfadd key1 a b c d e f #添加元素(integer) 1127.0.0.1:6379> pfadd key2 q w e r t y(integer) 1127.0.0.1:6379> pfcount key1 #统计元素数量(integer) 6127.0.0.1:6379> pfcount key2(intege
2020-06-06 16:00:53 194
原创 特殊数据类型 :Geospatial地理位置
特殊数据类型 :Geospatial 地理位置127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing # 加入一个地理位置(integer) 1127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai(integer) 1127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing(integer) 1127.0.0.
2020-06-06 10:35:12 585
原创 Redis数据类型:Zset( 有序集合)
Redis数据类型:Zset( 有序集合)Zset是set的基础上加了有序127.0.0.1:6379> zadd myset 1 one 2 two 5 five(integer) 3 #添加元素127.0.0.1:6379> zrange myset(error) ERR wrong number of arguments for 'zrange' command127.0.0.1:6379> zrange myset 0 -1 #获取元素1) "one"2) "two
2020-06-06 09:00:16 246
原创 Redis数据类型:Hash
Redis数据类型:Hash127.0.0.1:6379> dbsize(integer) 11127.0.0.1:6379> keys * 1) "user:2:age" 2) "k3" 3) "v9" 4) "k4" 5) "user:2:name" 6) "k1" 7) "k2" 8) "my123" 9) "key"10) "key2"11) "user:1"127.0.0.1:6379> flushtable(error) ERR unknown
2020-06-06 08:57:59 135
原创 Redis数据类型:Set(可以实现共同好友和好友推荐功能)
Redis数据类型:Set注意点:set是无序不重复的集合127.0.0.1:6379> sadd myset "hello" #新建set(integer) 1127.0.0.1:6379> sadd myset "kuangsu"(integer) 1127.0.0.1:6379> sismember myset hello #判断set集合中有没有hello元素(integer) 1127.0.0.1:6379> sadd myset "hello" (in
2020-05-31 20:25:53 2233 2
原创 3年经验面试题汇总+自我解答(每天更新一点)
一.微服务之间是如何独立通讯的?同步:1 Rest Http协议2 RPC TCP协议异步:二. 项目中缓存如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?使用方向:字典项 、菜单配置要用缓存原因:高性能对于一个请求,耗时几百毫秒查出一个结果,然后这个操作员就用了一次,这很浪费。而同一个不经常改变的结果,从缓存取,只需要几毫秒。高并发redis官方测评数据,每秒10W左右的读写,而mysql远远达不到这个数量。不当的后果?暂时未想好。三. 为什么进行分库分表?(涉及到
2020-05-31 16:14:09 515
原创 Redis数据类型:List
Redis数据类型:ListRedis学习准备篇https://blog.csdn.net/longqiyuye925/article/details/106246041所有的list命令都是l开头的127.0.0.1:6379> lpush list one --将值插入list列表的头部(integer) 1127.0.0.1:6379> lpush list two(integer) 2127.0.0.1:6379> lpush list three(integer
2020-05-24 20:44:44 205
原创 Redis数据类型:String
Redis数据类型:String127.0.0.1:6379> set key1 v1 --设置值OK127.0.0.1:6379> get key1 --取值"v1"127.0.0.1:6379> keys* (error) ERR unknown command 'keys*'127.0.0.1:6379> keys * --显示所有key1) "key1"127.0.0.1:6379> exists key1 --判断存在key(integer) 1
2020-05-23 22:16:38 150
原创 Redis从零学习篇
Redis学习准备篇重新复习RedisRedis汉语网站https://www.redis.net.cn/order/为了方便,直接使用Windows版的Redis下载地址:https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100下载zip版启动客户端和服务端开始练习Redis-keysizedb 当前库里的数据条数select index 进入哪一个库keys * 显示所有key-valueflus
2020-05-20 22:31:10 205
原创 SpringBoot服务端数据校验
SpringBoot服务端数据校验第一步:首先对需要校验的pojo类,添加注解/** * @Description: * @NotNull对基本类型的对象类型做非空校验 * @NotBlank 对字符串类型做非空校验 * @NotEmpty 对集合类型做非空校验 * @author: wsc * @Param: * @Return: * @Date: 2020 05 2020/5/17 */public class Users { @NotNull(message = "{N
2020-05-17 15:45:36 245
原创 Inteliji中的SpringBoot项目通过DevTools热部署
Inteliji种的SpringBoot项目通过DevTools热部署第一步:pom种添加下面的依赖<!--添加热部署--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional>
2020-05-13 21:39:49 123
原创 SpringBoot异常处理4种方式
SpringBoot异常处理先附上异常跳转的页面<!DOCTYPE html><html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head> <meta charset="UTF-8"> <title>出错了</title></head><body><form> <input type="tex.
2020-05-13 21:09:18 395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人