随笔分类 - 开发常用
摘要:问题 项目A、B,都基于SpringBoot技术栈开发。 发现其中项目A在本地IDE启动时控制台会打印spring-webmvc里@Controller的mapping映射信息,其中一行如下: 2024-11-20 21:10:12 [ main:76835 ] - [ INFO ] org.spr
阅读全文
摘要:String str = "abc"; 需求是String转换为List<Character>或List<String>。 第一眼想到是通过String#toCharArray()转换为char[],然后再转换为List,尝试用Arrays.asList(T... a): char[] chars
阅读全文
摘要:背景 Redis提供了scan命令,用于增量迭代获取db里的key。 命令格式:SCAN cursor [MATCH pattern] [COUNT count] 其中SCAN、MATCH、COUNT为命令关键字; cursor为游标,如果为0表示起始,每次执行命令会返回新的cursor,可用于下次
阅读全文
摘要:去年写过一篇博客记录了日常项目开发中使用BigDecimal遇到的问题和注意事项: Java项目日常开发中使用BigDecimal常见问题总结 今年在项目开发中又遇到了几个实例,这里补充记录下。 BigDecimal初始化时入参使用String类型,如果不是数字会抛异常NumberFormatExc
阅读全文
摘要:场景 项目基于SpringBoot搭建,默认使用Tomcat Web容器,对于每个HTTP请求,Tomcat Web容器会分配1个线程来处理请求。 在pom.xml里查看依赖关系: spring-boot-starter-web添加了tomcat-embed-core依赖 Tomcat线程池配置可在
阅读全文
摘要:问题 项目里使用xxl-job定时任务框架,某个任务定义如下: @Slf4j @RefreshScope @Component @JobHandler("xxxTask") public class XxxTask extends IJobHandler { @Value("${xxx.enable
阅读全文
摘要:场景 某天在钉钉阿里云运维群收到提示,部分节点阿里云网络异常告警。 检查组内项目微服务发现有1个节点出现了假死现象,进程运行服务没有挂,CPU、内存等资源正常, 但访问服务提供的RESTAPI接口均无法响应,通过网关调用接口一直等待直到超时。 分析 通过jstack导出线程堆栈信息到文件: jps
阅读全文
摘要:Java项目中有计算精度要求高的场景(如金额计算)会使用`BigDecimal`类型来代替`Double`、`Float`。 本文整理了一些日常开发中使用`BigDecimal`值得注意的问题和代码实例。 1. `BigDecimal`初始化时入参应使用`String`类型 例1: ```java
阅读全文
摘要:背景 在项目开发前的设计阶段,我们会根据需求分析、业务梳理的结果进行领域建模。 通常有2种方式: 实体设计优先 数据库设计优先 无论哪种方式,最终会创建数据库、数据表。 通常在每一张表,会设计2个时间字段,创建时间和修改时间,这样在查询数据时能够清晰的看到数据行 是什么时候创建、什么时候最后修改的,
阅读全文
摘要:问题 java8提供了Stream API,配合Lambda表达式,让开发者能对集合对象进行便利、高效的操作。 在日常业务开发中,有个经常用到的场景是将List类型对象转换为Map类型对象,进行后续处理。 在java8之前,这种转换需要先new一个Map对象,遍历list然后通过Map#put来初始
阅读全文
摘要:问题 以前使用老版本IDEA时,如果一个Project下有多个基于SpringBoot的module,本地启动时需要一个个点击Debug或者Run来启动,无法一键启动和停止多个应用。 解决 新版本的IDEA考虑到了这个问题,增加了Services模块界面,可以统一管理所有SpringBoot应用,对
阅读全文
摘要:问题 使用Spring Cloud搭建微服务体系,如果注册中心选用Eureka,使用spring-cloud-starter-netflix-eureka-client包,能在项目中方便的整合Eureka。 在日常开发中经常会遇到一个问题,某提供方服务的停止和启动,调用方仍然会调用到已停止的服务,而
阅读全文
摘要:场景 在项目开发过程中,有时会遇到ElasticSearch(简称:ES)的数据需要迁移和同步。 例如: 索引结构发生变化,如字段修改了类型 ES集群从开发环境迁移到测试环境 ES集群虚拟机测试环境迁移到K8S容器环境 ES线上环境数据导入到测试环境 其它场景 思路 迁移同步的数据包含索引和文档。
阅读全文
摘要:背景 项目中有时我们需要对应用进行诊断和调试,如调用某个接口进行业务验证、业务执行、数据修复、刷新缓存、查询数据、跑批量任务等等。 微服务项目 如基于Dubbo搭建的微服务,我们可使用Dubbo支持的telnet运维管理,其中invoke命令方便直接调用Dubbo接口; 也可整合swagger-du
阅读全文
摘要:问题 项目中经常会遇到列表去重的问题,一般可使用Java8的stream()流提供的distinct()方法:list.stream().distinct()。 list的类型为List<String>、List<Integer>,list里的元素为简单包装类型。 或者List<Xxx>,其中Xxx
阅读全文
摘要:背景 今天收到产品反馈一个线上问题,运营在设置组合商品价格时,输入19.9点击保存后变成了19.89。 分析 这个功能3年前就有了,第一次收到反馈这样的问题。 定位到该接口,注意到接口的请求vo是用Double类型定义的价格相关字段, 类似: public class XxxReqVo implem
阅读全文
摘要:场景 最近项目上遇到一个需求:运营后台设置商品分子分类组合查询条件,前端APP由子分类进入展示商品列表。 其中有一种查询条件是在后台添加或导入商品,商品可指定展示的排序,排序号可以重复,也可不设置排序。 商品需满足特定条件才展示,如定位的门店有库存且上架,即可能后台设置了10个商品,但只有5个商品满
阅读全文
摘要:场景 项目中接入了阿里云日志服务,比起以前自己搭建的ELK日志体系,云上的服务优点是接入简单,提供了易用的web ui界面方便查询日志。 省了自己搭建日志监控体系,但缺点是完全依赖云服务,没法自己定制,需要仔细阅读文档才能在日常工作更好地运用。 问题 昨天搜索某服务日志时遇到一个问题: 项目里的代码
阅读全文
摘要:场景 在项目开发中我们对dubbo接口通常可以通过junit编写单页测试来进行自测,配合spring-boot-starter-test,通常是如下方式: @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = XxxApp
阅读全文
摘要:场景 项目中很多地方使用Redis,有的用于缓存,有的直接做为存储,有的key设置有过期,有的key没有过期时间。 随着时间增长,Redis存储数据越来越多,消耗内存不断增长; 无论测试或生产环境,总内存是有限的; 有的key可能临时或测试使用的; 于是有了清理Redis key的需求。 Redis
阅读全文