
spring-boot
南熏门前一只喵
这个作者很懒,什么都没留下…
展开
-
spring-data-mongodb从2.x升级至3.x版本,aggregate group操作,分组字段出现_id前缀的解决方式
背景由于Spring boot安全漏洞,须将项目中Spring boot升级至2.3.4版本,2.3.4版本集成了spring-data-mongodb 3.x版本,项目中原spring-data-mongodb 2.x版本被替换成spring-data-mongodb 3.x版本,须进行兼容性适配。spring-data-mongodb从2.x升级至3.x版本部分api变化见官网项目链接问题描述适配过程中发现,项目中存在大量aggregate group操作,例如:TypedAggregatio原创 2020-09-22 20:04:50 · 3630 阅读 · 2 评论 -
mongodb $lookup设置多个join条件,实现关联来源表(from)的查询结果集
从mongodb 3.6开始支持为$lookup操作的来源表指定多个查询条件。实现类似如下sql的效果:SELECT a.x1,a.x2...,a.xn, b.x1,b.x2...b.xnFROM aWHERE a.x1 IN (SELECT b.x1,b.x2...b.xn FROM b WHERE a.x1 = b.x1 AND b.x2 = 'xxxx' );业务场景:zw原创 2020-09-14 19:24:32 · 4747 阅读 · 0 评论 -
燃烧我的卡路里——Spring boot项目jar包瘦身
Spring boot项目由于使用了太多依赖包,导致jar包过大,下面使用Spring boot ProperitiesLauncher加载器,从外部指定路径加载三方依赖jar包,达到项目jar包瘦身的目的Spring boot jar包瘦身的便利性将三方依赖jar包从打包的项目中移除有如下好处缩减项目jar包大小,便于网络传输。对于不经常更新的线上项目,由于三方jar包出现的安全问题(例如:fastjson多个版本被报安全问题),只需替换相关依赖jar包,无需重新发版,走提测发版流程。对于需要原创 2020-06-23 19:43:18 · 386 阅读 · 0 评论 -
高并发场景下,使用redis lua脚本实现计数范围内原子级增减
业务场景:一个时间区间内需给一批设备下发任务并让设备完成执行,该任务需要设备访问外部系统进行执行,外部设备同时仅支持60个设备同时访问。设备通过周期上报,在业务系统中获取任务下发通知。为了防止大数据高并发场景下,大量设备同时访问业务系统,查询任务通知造成的阻塞,业务系统先将一批任务通知下发到缓存中,然后通过在缓存中计数减数来限制同时有不超过外部系统最大访问量的设备在执行任务,从而达到限流的目的。...原创 2020-04-22 10:48:56 · 1552 阅读 · 0 评论 -
mongodb获取aggregate处理结果的总数
对mongodb执行aggregate操作命令得到结果集,前端页面展示时有时需要做分页这类场景,需要获得结果集的总数。将整个结果集都查询出来往往需要耗费很大网络io和内存。本文介绍一种方法返回经aggregate处理后结果集的记录总数。对3.4之前的mongodb版本,aggregate的stages并没有提供$count算子返回结果集记录数,可通过如下方式获得,对一个结果集记录中存在的key或...原创 2020-03-07 14:43:33 · 12364 阅读 · 0 评论 -
redis集群使用HashMap优化键值存储结构提升存储性能
项目中遇到Spark Streaming吞吐量太低的问题,redis集群使用HashMap优化键值存储结构提升Spark Streaming吞吐量。场景:设备将运行报文发送到kafka,Spark Streaming对报文进行加工处理,生成6类不同报文信息以json字符串形式set进redis集群。问题:kafka消费速度跟不上。分析:对于1000万设备一个上报周期上报1000万条报文...原创 2020-03-03 00:12:37 · 1183 阅读 · 0 评论 -
spring data redis使用pipline
使用stringRedisTemplate.executePipelined可以向redis批量提交一批命令,进行命令批处理。效率比遍历的方式执行单条语句要高。‘’使用pipline需要注意对客户端redis连接池的连接数。如下代码中,spring data redis客户端在执行pipline时会使用连接池中多个连接进行命令提交。当一次需发起批处理命令数较高,且命令的执行较耗时,会瞬间用尽客...原创 2020-02-29 16:06:24 · 1033 阅读 · 0 评论 -
Spring boot项目设置加载静态资源的路径(spring.resources.static-locations)
默认Springboot将从如下位置按如下顺序加载jar包对应前端静态资源:1.jar包同级static目录2.jar包同级public目录3.jar包同级resource目录4.jar包/META-INF/resources在调试模式下,Springboot将从class目录中按如下顺序加载对应前端静态资源1.class目录下static目录2.class目录下public目录3...原创 2019-10-25 13:18:00 · 27925 阅读 · 7 评论 -
使用mybatis plus代码生成器生成代码(自定义不同类型文件的生成路径)
mybatis plus在mybatis基础上进行了封装和加强,旨在提供方便的面向持久层的操作,类似Spring JPA。配置方法和详细介绍见官网。mybatis plus提供代码生成器可以方便开发者生成xml、dao、service、controller、entity层代码,简化常规crud的代码和实体类映射编码。下面提供配置模板示例,供参考,其中包含自定义指定不同类型文件在项目中的路径。...原创 2019-10-23 17:09:08 · 4845 阅读 · 7 评论 -
maven打可执行jar包,scope设为provided失效,引用jar包仍会打包到libs目录中的解决办法(可执行jar包加载外部依赖解决办法,面向基于Spring构建的项目)
适用场景在项目中遇到需求,根据不同省份需要依赖不同的jar包执行相同逻辑。由于不同省份jar包不同,且存在同一jar包不同版本,导致高版本覆盖低版本的问题,同时为缩减项目包的大小。所以希望将这部分jar包通过外部引入的方式在运行时动态加载而非放入可执行jar包的libs目录下。这样项目分省部署只需依赖相关省份的jar包即可。出现问题基于此,根据maven的scope作用域(可参见之前博文),...原创 2019-08-26 20:39:14 · 4453 阅读 · 3 评论 -
Spring Boot Actuator监控基于Spring boot的应用系统运行情况
Spring Boot Actuator提供了一组http接口,用于在应用运行时,监控和管理应用的运行情况。Spring boot Actuator内置EndPointsSpring boot Actuator提供了一组基于HTTP和JMX内置的EndPoints用于在系统运行时监控系统的运行情况。详情可以参见Spring boot官网在此列举一些常用的内置EndPoints:beans:...原创 2019-08-21 21:42:01 · 850 阅读 · 0 评论 -
记Spring boot 2.x logback在配置与应用分离的情况下读取application.yml环境变量出现的问题及解决
Spring boot支持已自定义的方式设置日志。详见官网自定义设置日志小节由于spring对日志对象的初始化先于application context创建之前,所以我们不能以 @PropertySources 或 @Configuration的方式去实例化日志对象,对日志进行设置。只能通过定义的系统属性。根据Spring官网,其指定了特定命令规范的xml配置文件,用于进行自定义的日志文件配置。...原创 2019-08-19 21:35:24 · 2094 阅读 · 0 评论 -
Spring Data api常用mongoDB操作(不定期更新)
使用projections查询collection中指定属性 Query query=new Query(); Criteria criteria=new Criteria(); criteria.and("accountId").is(accountId); query.addCriteria(criteria); query.f...原创 2019-07-24 19:57:09 · 3152 阅读 · 0 评论 -
基于spring data操作mongoDB数据库数据持久层(dao层)设计感悟
spring data项目旨在对不同数据源提供一组相似的、较一致的具有spring style的交互方法。目的方便用户对不同数据源(关系数据库、非关系性数据等)的api操作,并简化系统持久层的代码逻辑结构。spring data项目包含多个子项目,不同数据源有不同的子项目对应。详见spring data官方文档 。项目中的问题以及本文目的在项目开发过程中由于前期没有很好规划,mongoDB操作...原创 2019-07-13 20:19:37 · 2440 阅读 · 0 评论 -
Spring boot拦截器Interceptor引用外部properties配置(@Value)
Spring boot的web mvc项目中,经常会使用自定义拦截器进行权限的验证,安全验证等步骤。自定义拦截器往往会引用外部properties配置。比如:为了防范CSRF攻击,需要拦截每一个请求,并判断request header中Referer属性是不是来自合法的服务器地址。而服务器地址url为了方便管理和维护,在*.properties文件中配置。 本文基于Spring boot构建w原创 2017-12-22 13:06:16 · 7648 阅读 · 0 评论