- 博客(54)
- 收藏
- 关注
原创 spring全局异常处理类ExceptionHandler获取request入参
项目中需要用到的数据校验、异常捕获,所以会用@ExceptionHandler方法,对Controller做统一的全局异常处理。当发生异常时,需要记录异常的url、入参、出参、错误信息等。但是request的inputStream已经读取过一次,此时拿到的request是空的。
2024-04-22 17:04:59 332
原创 给20w用户发优惠活动的短信,让用户领取优惠券,问怎么设计
我们经常有一些业务需要发送优惠券给用户,优惠券发放有两种方式,一种是直接发送,一直是给用户领取,还有一些是需要支付的。此处以发送短信给用户领取为例。此场景类似于京东app发送话费优惠券短信给用户,用户点击链接跳转到网页或app领取。
2024-04-17 16:17:45 224
原创 getOutputStream() has already been called for this response
在做java导出Excel数据的时候,接口层面需要有HttpServletResponse的入参来设置输出流然后执行的时候报getOutputStream() has already been called for this response错误。
2024-04-16 19:53:20 258
原创 java实现根据sql动态下载数据到excel
由于生产数据库不能直接连接下载数据,所以需要在监控系统上做一个根据sql动态查询并下载数据的功能。
2024-04-16 19:10:24 282
原创 如何升级node.js版本
如果你使用的是npm(Node Package Manager)或Yarn等包管理器,它们可能也提供了更新Node.js的功能。具体步骤取决于你使用的包管理器,你可以查阅相关文档或在线资源来了解如何使用包管理器来更新Node.js。无论你选择哪种方法,都建议在升级Node.js之前备份你的代码和项目,以防万一出现任何问题。同时,也要注意检查你的项目依赖是否与新版本的Node.js兼容,以避免升级后出现运行错误。访问Node.js的官方网站,下载对应你操作系统的最新版本安装程序。
2024-04-12 11:44:12 1295
原创 Can not set final java.lang.Class field com.baomidou.mybatisplus.core.override.MybatisMapperProxy.ma
多数据源使用时,不能正确创建数据源连接。
2024-04-10 18:12:06 188
原创 多线程实现Scheduler定时任务
在Spring框架中,@Scheduled注解用于标记一个方法作为定时任务,它使用cron表达式来定义任务的执行频率。对于cron表达式定义的定时任务,如果上一个任务的执行还没有完成,下一个任务的执行行为取决于你使用的调度器(scheduler)以及任务的配置。Spring的@Scheduled注解默认使用的是单线程的,这意味着如果上一个任务还在执行,下一个任务的触发将会被阻塞,直到上一个任务完成。因此,在这种情况下,下一个任务不会在上一个任务还没执行完的时候就开始执行。然而,如果你配置了多线程的。
2024-03-29 16:04:20 367
原创 springcloud+nacos服务注册与发现
看了下官方的demo,直接使用的话有很多jar包缺失或者版本号没有指明。可以参考他的demo代码。比较全。
2024-03-23 13:21:27 1037
原创 nacos-config实现配置中心功能
在本地、开发、测试、uat、生产等环境中通过修改启动参数-Dspring.cloud.nacos.config.namespace=local,来获取不同环境的配置,实现不同环境的配置隔离。这是个简单可行的demo,有什么不足或者需要完善的地方欢迎交流指正。
2024-03-22 19:49:14 259
原创 java springboot 时间格式序列化 UTC8
我们在项目中使用序列化和反序列化组件中,默认一般采用Jackson,如果遇到特殊配置,我们该怎么配置呢,大致有如下两种方式:采用配置文件【application.yml】和代码配置。如果我们在项目中使用了FeignClient,可以指定Mapper,同时也可以进行Jackson的通用配置修改。链接:https://www.jianshu.com/p/b4bd43ed38be。商业转载请联系作者获得授权,非商业转载请注明出处。ObjectMapper的设置。比如添加jackson节点。
2023-09-01 14:45:24 446
原创 新旧库切换流程
新旧切换标准流程前言 随着业务壮大,我们系统涉及数据库迁移、接口切换迁移等等相关的工作越来越多。但在实际落地的操作过程中也发现了很多各种各样的问题,给系统稳定性造成了重大威胁。因此,根据之前的经验教训,总结出一个标准化的流程,后续大家按照标准流程操作执行。最大程度保障系统稳定性。 数据库迁移流程包含但不限于MySQL、HBASE、MongoDB、Redis等。1. 双写读旧新库刚初始化还没有数据,所以要读取旧库,同时将增量数据写入新库。2. 双写读旧,旧数据
2023-08-04 16:24:36 594
原创 springboot多数据源根据开关控制方法访问的数据源
有个需求需要通过开关控制需要访问的数据源,此处参考DS多数据源,采用注解加aop切面实现此功能。此处使用时要多测试防止异常。
2023-08-02 19:56:48 500
原创 如何画时序图
信息量还是不少,我给你总结下。时序图,用来描述多个对象参与实现业务目标时,彼此之间按时间顺序进行交互的过程。常见的应用场景,是在支付领域。用好时序图,能帮我们,搞清楚业务规则、系统逻辑,提高工作效率。1、画时序图的方法1)定目标,指定用例或业务目标展开分析2)找对象,找出参与实现目标的对象/角色3)列消息,按时间顺序列出对象的交互消息2、画时序图的经验1)给交互消息加序号,方便阅读沟通2)触发交互的对象画在最左,交互频繁的走近些3)同一个流程,画不同视图,理解更全面、深刻。
2023-06-28 21:15:47 4930
原创 java mysql自定义查询需要的列
有时候不同的业务需要查询不同的数据,如果都全表查询,效率较低,网络传输量也比较大,所以可以采取自定义需要查询的字段的方式解决。我们可以通过入参传入需要查询的字段和排序字段进行数据查询,然后返回数据信息先建表枚举类表字段枚举类排序枚举类结果过滤类,封装了需要的字段还有排序字段信息。此处用枚举类的主要目的是为了参数的合法化,想简单的话可以直接用字符串。工具类,用来获取查询的字段还有排序字段信息,个别方法可能没用,可以后续自己扩展。
2023-06-13 18:48:54 450
原创 设计模式之责任链模式
责任链模式是一种。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
2023-05-17 23:57:20 85
原创 设计模式之装饰模式
半透明(Semi-transparent)装饰模式用具体装饰类型来定义装饰之后的对象,而具体构件使用抽象构件类型来定义对于客户端而言,具体构件类型无须关心,是透明的;但是具体装饰类型必须指定,这是不透明的可以给系统带来更多的灵活性,设计相对简单,使用起来也非常方便客户端使用具体装饰类型来定义装饰后的对象,因此可以单独调用扩展新增的方法最大的缺点在于不能实现对同一个对象的多次装饰,而且客户端需要有区别地对待装饰之前的对象和装饰之后的对象透明(Transparent)装饰模式。
2023-05-17 00:28:22 345
原创 设计模式之门面模式(Facade Pattern 外观模式)
门面模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。
2023-05-16 00:05:22 860
原创 设计模式之策略模式
策略接口的定义,通常包含两个方法:获取策略类型的方法和处理策略业务逻辑的方法。*** 第三方支付*//*** 获取支付方式* @return 响应,支付方式*//*** 支付调用* @param order 订单信息* @return 响应,支付结果*/2.策略接口的实现每种支付类都实现了上述接口(基于接口而非实现编程),这样我们可以灵活的替换不同的支付方式。/*** 微信支付*/@Component@Override@Override调用微信支付。
2023-05-14 01:03:29 231
原创 mybatis通过拦截器动态的修改sql
比如你的orderInfo有个版本号,你需要每次修改的时候版本号增加1,如果手工添加比较麻烦,容易遗漏,可以通过拦截器实现。添加MybatisConfig,注入拦截器。
2023-05-05 18:09:56 1497
原创 设计模式六大原则
LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
2023-04-28 19:11:45 808
原创 GitLab配置ssh key:gitlab add an ssh key
GitLab配置ssh key:gitlab add an ssh key
2022-09-09 10:40:45 844
原创 springboot+mybatis
环境:开发工具Intellij IDEA 2017.1.3 springboot: 2.1.0 jdk:jdk1.8.0_141 maven:3.3.9插件PageHelper 分页插件 mybatis generator 代码生成插件步骤1.创建一个springboot项目2.设置项目属性(Packageing默认jar)3.选择项目需要的依赖(web m...
2018-11-29 18:01:08 215 1
原创 git安装 git TortoiseGit ssh配置
安装Git-2.15.0-64-bit安装TortoiseGit-2.4.0.2-64bit安装TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN 获取sshkey https://blog.csdn.net/everything1209/article/details/53100263git config --global ...
2018-11-29 16:40:58 155
原创 java多线程
两种简单的实现方式,一种是有链接阻塞队列,多余的任务会直接放到队列里面等待执行,一种是同步队列 public void testLinkedBlockingQueue(){ List<Integer> waitDealList = new ArrayList<>(10); for (int i = 0; i < 100; i++...
2018-11-29 16:40:05 65
原创 C#创建指定大小的文件并下载
private void txtFileSize_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 0x20) e.KeyChar = (char)0; //禁止空格键 //if ((e.KeyChar == 0x2D) &...
2018-07-25 10:23:12 999
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人