- 博客(180)
- 资源 (17)
- 收藏
- 关注
原创 需求分析案例:消息配置中心
本文介绍了一个很常见的消息推送需求,在系统需要短信、微信、邮件之类的消息推送时,边界如何划分和如何设计技术方案。并最终展示了消息服务和消息配置中心服务的设计。
2023-07-29 11:09:07 382
原创 前端不暴露ak/sk直接上传阿里云oss的方案
介绍如何在不暴露ak/sk的情况下,使用javascript直接上传阿里云 oss的方案,并小小的吐槽一下
2023-07-07 10:20:37 1737
原创 SpringBoot项目登录并接入MFA二次认证
MFA多因素认证():一些需要身份认证的服务(如网站),为了提升安全性,通常会在账号密码登录成功后,要求用户进行第二种身份认证,以确保是正确用户登录,避免用户密码泄露了或其它原因导致用户信息泄露。不过,用户体验就比较差,因为要登录2次嘛。本文只介绍网站的MFA软件接入方案,并采用手机应用进行认证。
2023-06-04 22:13:40 2846 1
原创 SpringCloudConfigServer配置刷新优化方案
Config-Server端:提供管理API,用于开发人员更改 最近配置刷新时间提供客户端API,用于客户端定时拉取最近的配置刷新时间,并判断是否需要重新加载配置和刷新Config-Client端:定时轮询Config-Server端的API,获取自己的最近的配置刷新时间;如果比上一次刷新时间大,则进行配置刷新/*** 客户端使用:获取指定app的配置更新时间} /*** 管理端使用:设置指定app的配置更新时间,以触发该app更新配置if(!
2023-05-29 09:49:18 763
原创 IDEA常用提升效率的操作小记
Ctrl+鼠标左键点击方法,会转到方法的定义点击变量,会转到变量的定义注:如果进入了反编译的代码,可以点右上角的【下载源码】看带注释的正常代码。
2023-04-29 22:44:05 967
原创 分享一个自研的工具项目:代码生成|表结构对比|配置对比
从MySQL读取表结构,并生成对应的Java源码文件和对应的前端VUE编辑/列表页面,可以直接复制到项目中,entitymapperservicecontrollerdtoentity与dto互转的mapstruct-mapper转换类基于VUE2.0的前端html页面点击页面的下载文件, 并解压解压的文件,除html,其它文件复制到你的SpringBoot项目对应的java目录下html复制到你的SpringBoot项目的目录下复制项目根目录下的res.zip。
2023-04-21 19:25:02 490
原创 SpringCloudConfigServer配置中心使用与刷新详解
介绍SpringCloud原生的配置中心部署、使用,以及如何自动刷新配置的完整步骤。
2023-03-22 15:24:15 1245
原创 DevOps-8:需求开发生命周期与DevOps系统能力
简述我使用过的DevOps系统能力和完整需求生命周期流程图,包括需求与代码关联、代码扫描、配置比对、表结构比对等
2023-03-10 10:54:49 451
原创 SpringBoot项目配置明文密码泄露问题处理
在项目开发过程中,需要配置数据库连接密码、Redis密码、网盘上传的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心。这些信息如果泄露,还是会造成一定的困扰,这里介绍2种处理方案:1、使用系统环境变量储存密码比如K8S的环境变量、Windows的环境变量、Centos的环境变量等等,然后在程序里使用 System.getenv()方法读取。这种方式的好处:只有运维人员知道,连开发都不知道生产的密码。密码变更也简单,运维直接操作就好了。缺点就是部署时,容易遗漏,不过可以通过统一的环境镜
2022-01-20 17:17:50 2565 2
原创 SpringBoot项目日志输出为JSON格式,方便Elastic采集
这段时间,使用K8S部署项目,同时使用Elastic采集日志并提供给开发检索,使用过程中,经常出现换行日志无法完整采集和展示的问题。比如抛出的Exception会有换行,被ES采集后,变成多条日志,极其不方便检索和排错。经运维提示,并参考 https://groups.google.com/g/fluent-bit/c/XoOibAxGGeI改用json输出项目日志,本地调试依然使用旧日志格式。注:本文基于:spring-boot-starter:2.4.11 或 spring-boot-star
2022-01-19 14:56:44 1396
原创 生产问题一则:ThreadLocal使用不当导致的内存泄露
先简单介绍一下 ThreadLocal,它是一个线程级的数据存储对象,生命周期是从一个线程的创建到该线程销毁。ThreadLocal里的数据,只能被所持有的线程读取,所以是线程安全的(前提是该数据不是多线程共享的)。ThreadLocal的get、set、remove等方法,其实是对Thread.threadLocals字段的封装,而Thread.threadLocals的类型是ThreadLocalMap,它维护了一个key/value键值对,ThreadLocalMap.set方法简略代码如下:/
2021-07-28 15:31:29 778
原创 生产问题一则:MySQL隔离级别引发的数据读取失败问题
先简介MySQL的4种隔离级别和解决的3种问题:隔离级别脏读不可重复读幻读读未提交 read-uncommitted是是是读已提交 read-committed否是是可重复读 repeatable-read否否是串行化 serializable否否否脏读:事务A新增或更新数据,还未提交,事务B就能读取到,然后事务A回滚了,导致事务B读取的是脏数据。不可重复读:事务A读取一行数据,事务B更新该数据,事务A再次读取同一行数据,两次读取
2021-06-30 13:03:45 411
原创 SpringCloudGateway限流后,默认返回429的改造:改302跳转或增加响应body
上篇介绍了使用SpringCloudGateway如何在内存中进行限流操作。但是,SpringCloudGateway默认是返回HttpStatus.TOO_MANY_REQUESTS 429状态,可是我们并不希望用户看到这个不友好的提示,而是希望用户看到我们的自定义界面,更好看,或者去一个游戏界面让用户玩玩游戏吧。有一个解决方案,一般在api网关的前面还会部署一个nginx服务,用于网关的负载均衡,那么可以在nginx收到429响应时,转向特定页面进行展示。但是如果我们希望根据不同的服务,转向不同的
2021-03-25 15:06:10 4320 1
原创 SpringCloudGateway内存中基于令牌桶进行限流
研究了一下网上的很多文章,基本都是使用 RedisRateLimiter,即根据Redis来进行限流操作。这样有个好处,就是网关的集群可以使用同一套数据进行限流;当然也有缺点,网关本来就是所有流量的集中出入口,如果每个请求都要往返一次Redis,无疑加重了网关的负担,性能有下降。本文介绍了如何直接在内存中进行限流,内存限流的缺点,当然就是对集群不友好了,比如有3个网关实例在运行,每个网关按每秒1个令牌,令牌桶容量为10,那么实际上就是每秒3个令牌,最大容量是10~30波动,不过基于令牌桶算法的控制,我
2021-03-24 11:52:36 975
原创 生产慢查询记录:MySQL IN 子查询导致的慢查询
嗯,先说结论:MySQL的 in subquery 会导致全表扫描,并不会走索引,即使是用主键id in (子查询)也一样,比如:SELECT id FROM Activity WHERE Id IN (SELECT 1 WHERE 1=1)SELECT id FROM Activity WHERE Id IN (SELECT 1 WHERE 1=0)参考官方对 IN(子查询) 的说明,里面说:先执行外层查询,再匹配子查询生成的数据MySQL evaluates queries “from out
2021-02-05 16:08:56 826
原创 Spring Cache缓存使用问题整理
接上篇,解读了Spring框架的缓存实现原理后,本文记录一些使用过程中的怎么办问题。前言:在没有引入其它类库,也没有自定义配置的情况下,一些默认的缓存实现:CacheManager: org.springframework.cache.concurrent.ConcurrentMapCacheManagerCacheResolver: org.springframework.cache.interceptor.SimpleCacheResolverKeyGenerator: org.spring
2021-01-23 17:06:15 1078 3
原创 Spring框架的Cache缓存实现源码解读与原理解析
项目需要,对Spring的Cache缓存实现做了一次分析,写一篇小结在此。本文基于 spring-context 5.2.12.RELEASE的源码:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.12.RELEASE</version> <
2021-01-14 08:00:52 1615 2
原创 Spring项目统一cacheManager出错:No CacheResolver specified, and no unique bean of type CacheManager found
起因,一些基础数据的接口访问量居高不下,在高峰期很容易出现服务性能问题,并经常需要扩容。最早的解决方案,是让各调用方,自己添加缓存,避免频繁访问基础服务接口。该方案存在的问题,就是数据经常不一致,基础数据变了,但是调用方不知道,如果用MQ去通知,技术方案又复杂了。第二期的解决方案,是在基础数据提供方添加缓存,因为这些数据是否变化,只有提供者知道并可以及时过期处理。该方案效果还是比较明显的,但是监控数据上的TPS依旧存在,大量的HTTP请求也依然存在性能浪费的问题。而且各个服务的缓存方案各不一致,比如
2021-01-09 14:35:06 6516 1
C#的Demo项目:RabbitMQ封装和使用
2018-05-23
2014年驾照科目一考试大图版
2014-03-07
2014年驾照科目一考试
2014-03-06
带进程路径的任务管理器
2012-02-14
基于C#.net开发的hosts静态域名解析文件修改工具
2010-11-25
ASP.Net做的简易版文件管理器,就一个aspx文件
2010-11-17
修正:支持Chrome、FireFox的梅花雨日历控件3.0修正版
2010-09-14
小巧的Asp.net分页控件源代码
2009-12-15
支持AJAX的TreeView树例子,使用省市县三级xml作演示
2009-07-06
C#版本和javascript版本的DES加密函数(注:可以交互加解密)
2009-06-24
C#版的贪食蛇程序(使用VS.Net2005重新封装)
2008-09-04
不要下载这个了,又做了一个新的
2007-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人