JavaWeb
文章平均质量分 88
JavaWeb
秋夜无霜
好学Java
展开
-
Spring同一个Service类非事务方法调用事务方法事务失效解决方案
今天看到线上异常,根据异常排查了相关落库存储的数据,然后进而排查相关业务Service中逻辑代码,事务方法中对A、B、C三张表调用其相关Service依次插入记录。但是B插入失败,A表插入记录并没有事务回滚。然后排查了一下业务代码逻辑,发现在一个Service中,一个非事务方法调用事务方法导致的事务并没有生效导致的。原创 2021-12-08 15:45:00 · 5177 阅读 · 3 评论 -
带有继承的Lombok @Builder
文章目录1。概述2。@ Builder*和继承2.1。定义问题2.2。解决问题2.3。使多个* @ Builder* s共存2.4. 支持更大的继承层次结构3。 @ SuperBuilder*和继承3.1. 应用注释3.2. 使用构建器4。结论原文:原文链接1。概述Lombok库提供了一种无需编写任何样板代码即可实现* Builder Pattern的好方法: [@Builder](https:// projectlombok.org/features/Builder)*注释。在这个简短的教程中转载 2020-11-24 15:12:49 · 11416 阅读 · 3 评论 -
记一次每日跑批任务耗时性能从六分钟优化到半分钟历程及总结
话说做了一个产品需求上线后,涉及到有一个每日凌晨七点跑批任务,跑批查询出来的待处理订单也就1100单作用,但是耗时却花费了5~6分钟,虽说跑批中,又调用外部服务,但是仅仅在空闲时间,鉴于此情况我觉得这个跑批任务有优化的空间,伴随着一次次性能优化,最终耗时优化到只需平均20多秒就跑批完毕,鉴于此,写一篇自己的优化过程分享给大家。一、业务概述话说我们产品需求有个每日凌晨七点,之所以为什么是定时,还要凌晨七点,那是由于在你跑批之前,中后台也有一步步跑批任务,只有等他们跑完任务,我们才能发起跑批调用,否.原创 2020-08-21 20:52:56 · 1624 阅读 · 0 评论 -
我说如何解决业务场景状态机流转及验证问题
文章目录一、业务概述二、技术方案AttentionEvent 定义一个状态机接口AttentionEventEnum 定义一个枚举实现该接口WorkOrderStatusEnum 工单状态OperateStrategy(工单操作策略类接口)DelayedOperate(延迟操作接口)AbstractOperateStrategy(抽象策略类)AbstractSubmitOperateStrategy(抽象提交操作类)SubmitWithSuspendOperateStrategy(挂起操作)SubmitWi原创 2020-08-16 19:26:19 · 1745 阅读 · 0 评论 -
基于Redis解决业务场景中延迟队列的应用实践
文章目录一、业务概述二、代码实现2.1、工单队列实现2.1.1、定义上下文类(`WorkOrderContext`)2.1.2、定义抽象缓存类(`AbstractCacheManager`)2.1.3、定义基于Redis Cache的Manager类(`WorkOrderCacheManager`)2.1.4、工单队列管理器(`WorkOrderQueueManager`)2.2、工单队列转移管理器2.2.1、工单队列转移管理器(`WorkOrderQueueTransfer`)2.3、Redis过期key原创 2020-08-16 17:47:44 · 390 阅读 · 0 评论 -
记一次使用Redis Cache引起的Bug排查及修复总结
一次产品需求愉快的上线后,翌日下午有用户反馈,工单流程状态不对,为何不对呢?经过跟用户微信电话沟通,工单提交后,流程子状态应该展示转存量。是的,没有错,业务流程没有问题,应该是我的程序出现bug了。恰巧上线后翌日,北京气象局多次短信通知,有大暴雨,注意防涝。尽管如此,当日我依然来到公司,排查一些其他反馈问题。室外开始大雨来临,我收拾电脑准备回家,到家后准备吃饭,微信群又反馈出现几单状态不正确,我回复"刚到家,吃饭后立即排查"。吃饭后,经过电脑前一系列排查最终找到问题,当时已经晚上22点多了。业务概.原创 2020-08-13 21:56:38 · 1245 阅读 · 0 评论 -
数据标签场景的设计方案以及BiConsumer的妙用
文章目录1、需求场景2、方案设计2.1 关系型DB存储2.1.1 表结构设计2.1.2 java代码示例2.2 结构化DB存储伴随着互联网的发展,数据标签不知从何时应运而生。譬如各种社交APP,个人中心都有标签功能,言简意赅,对某人的文字概述。诚然,数据标签也可以用到日常运营平台中,其作用可以作为归类,检索作用。如果发挥的好,就像自己整一个书架一样,瞬间找到文学类,计算机类,科学类书籍。这就得...原创 2020-04-24 22:04:05 · 1286 阅读 · 0 评论 -
代码写了那么多,CURD也可以如此简单(下)?
文章目录1.准备2.开始2.1 定义一个ORM实体2.2 定义一个VO实体2.3 定义一个Form2.4 定义Mapper2.5 定义Service2.6 定义Service实现类2.7 定义Facade2.8 定义VO的转换器2.9 定义Controller3.总结话说进入一家公司,如果经常CURD,是不是感觉很枯燥,但是自己有没有想过,写了一个模块又一个模块,怎么能让自己的代码稍微提高些...原创 2020-03-29 20:14:23 · 507 阅读 · 0 评论 -
代码写了那么多,CURD也可以如此简单(上)?
文章目录1.前言2.思考3.架构4.设计`BaseMapper话说进入一家公司,如果经常CURD,是不是感觉很枯燥,但是自己有没有想过,写了一个模块又一个模块,怎么能让自己的代码稍微提高些逼格呢?本文就是基于此背景,应运而生。1.前言话说曾经在一家公司,尤其是参与了后端给运营端比如某某平台,参与的大多数需求,常年日积月累就是一个个增加、删除、编辑、查询列表等等。写的多了,或多或少会有些感慨...原创 2020-03-29 19:23:35 · 875 阅读 · 0 评论 -
一口气说出 9种 分布式ID生成方式,面试官有点懵了
文章目录一、为什么要用分布式ID?1、什么是分布式ID?2、那么分布式ID需要满足那些条件?二、 分布式ID都有哪些生成方式?1、基于UUID2、基于数据库自增ID3、基于数据库集群模式4、基于数据库的号段模式5、基于Redis模式6、基于雪花算法(Snowflake)模式7、百度(uid-generator)8、美团(Leaf)9、滴滴(Tinyid)原文链接一、为什么要用分布式ID?...转载 2020-02-17 20:21:13 · 502 阅读 · 0 评论 -
大型网站技术架构演变过程
前言我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能:用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理阶段一、单机构建网站网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/ser转载 2017-07-20 12:55:19 · 388 阅读 · 0 评论 -
Java类中的静态变量、成员变量、局部变量
文章目录概述1.运行时数据区介绍2.GC Roots的对象3.差异对比3.1 成员变量 && 局部变量3.2 成员变量 && 静态变量3.3 final、static、static final4.回收机制概述本文主要讲述Java类的成员变量(实例变量)、静态变量(类变量)、局部变量的差异(涉及到存储区域,加载时机等方面)。1.运行时数据区介绍各个数据区...原创 2019-12-25 13:51:52 · 582 阅读 · 0 评论 -
20位活跃在Github上的国内技术大牛
20位活跃在Github上的国内技术大牛本文列举了20位在Github上非常活跃的国内大牛,看看其中是不是很多熟悉的面孔?1. lifesinger(玉伯)Github主页: https://github.com/lifesinger微博:@ 玉伯也叫射雕玉伯(王保平),淘宝前端类库 KISSY、前端模块化开发框架SeaJS、转载 2017-03-31 23:12:18 · 1485 阅读 · 0 评论 -
Apache Shiro 使用手册(二)Shiro 认证
认证就是验证用户身份的过程。在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法。最常见的“实体/凭证”组合便是“用户名/密码”组合。 一、Shiro认证过程 1、收集实体/凭据信息 Java代码 //Example using most common scenario of username转载 2015-07-20 18:25:18 · 368 阅读 · 0 评论 -
linux安装jdk1.8出现错误bash: export JAVA_HOME=/usr/local/java/jdk1.8.0_144: 没有那个文件或目录
昨天在公司一台物理机配置环境,安装jdk1.8 从oracle官网下载1.8 tar包,然后解压,并配置环境变量 但是 执行source /etc/profile遇到如下截图问题:bash: export JAVA_HOME=/usr/local/java/jdk1.8.0_144: 没有那个文件或目录-bash: export JAVA_BIN=/usr/local/java/jdk1.8.0原创 2017-09-13 12:09:13 · 36537 阅读 · 13 评论 -
通过SpringMVC集成freemark模板生成页面
1、maven依赖 true false true false 4.1.9.RELEASE 3.3.0 4.11 org.springframework spring-conte原创 2017-07-15 18:06:29 · 1434 阅读 · 0 评论 -
理解RESTful架构
越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必转载 2015-11-21 14:19:10 · 345 阅读 · 0 评论 -
【设计模式活用】之适配器、中介者、简单工厂、享元模式的示例应用
最近有一个需求,由于涉及调用第三方接口有所改变,而需求所涉及的应用(lyqc-cas)由于涉及一个基于暴露dubbo服务的应用(lyqc-data),而目前又不想再修改这个应用,只好在一个新应用(gps-provider)中提供基于Eureka服务注册。但是对于该需求,新提供的接口又不兼容老的代码调用,而又希望通过开关开启关闭,以防上线新接口有问题,可以进行降级。鉴于此,认真想了一下,通过设计模...原创 2018-10-02 22:25:20 · 338 阅读 · 0 评论 -
Mac环境使用IDEA如何把一个JavaWeb项目部署起来?
我们知道,在mac环境,部署安装相关如jdk,跟window相似(那是安装步骤),跟linux也相似(那是配置文件),不过在安装部署配置中,细节还是蛮重要的,否则你会感觉疑惑,不应该啊???1、安装idea打开官方下载url:https://www.jetbrains.com/idea/download/#section=mac 下载mac版本,安装即可。2、安装jdk2.1、下载安装...原创 2018-10-02 22:25:07 · 3498 阅读 · 0 评论 -
【设计模式活用】之一个榨汁机应用场景示例
文章目录1、原料定义抽象水果类:AbstractFruit具体水果类:Apple具体水果类:Banana2、机器定义榨汁接口:Juicing果汁类:Juice抽象榨汁机:AbstractJuicer通用榨汁机类:GeneralJuicer3、榨汁比例策略比例配置类:ScaleConfig榨汁策略上线文:ScaleContext抽象榨汁输出策略类:AbstractJuiceStrategy苹果原...原创 2018-10-05 18:25:35 · 1833 阅读 · 0 评论 -
【SpringBoot】spring.output.ansi.enabled引起日志出现ESC[开头颜色日志
今日突然发现线上日志,通过linux less命令日志都乱了,这就导致kibana收集的日志无法分割都汇聚成一条记录了,直接导致kibana查询平台该索引下日志搜索极具缓慢。故障现象通过less 或 more命令查看日志结果如下图所示:但是使用cat 或者 tail命令看到日志就是正常的,如下图:问题很诡异,直接想到应该是logback配置问题,带着疑问,通过百度查询发现,如果基于...原创 2018-10-12 18:51:55 · 17987 阅读 · 2 评论 -
Spring AOP中JDK和CGLib动态代理
文章目录1、基本概念简述2、代理区别说明3、性能对比说明4、代码示例介绍1、基本概念简述首先,我们知道Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。自Java 1.3以后,Java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,后来这项技术被用到了Spring的很多地方。JDK动态代理主要涉及java.lang.reflect包下边的两...原创 2018-10-06 22:12:07 · 376 阅读 · 0 评论 -
基于oval注解支持JavaScript表达式约束条件
通常我们经常需要在接口中对DTO进行相关字段校验,我们可以采用传统的大量判断校验。目前我们采用使用基于oval(版本:1.90)注解约束,通过SpringAOP切面使用注解约束拦截。但是对于相关字段校验,如果字段跟其他字段有相关业务逻辑关系,,我们可以采用基于Oval javascript表达式约束,如果不依赖Mozilla Rhino,oval内部表达式引擎将会采用JSR223支持。文章...原创 2018-10-09 14:47:54 · 902 阅读 · 0 评论 -
Java动态追踪技术探究
引子原文:https://tech.meituan.com/2019/02/28/java-dynamic-trace.html在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代...转载 2019-03-01 10:00:04 · 270 阅读 · 1 评论 -
Spring 表达式语言(SpEL)入门实战
文章目录1、文本表达式2、对象属性表达式3、数组、List 和 Map 表达式5、操作符表达式5.1 关系操作符5.2 逻辑操作符5.3 运算操作符6、安全导航操作符7、三元操作符8、Elvis 操作符9、赋值表达式10、类型操作符11、创建对象操作符12、变量表达式13、集合选择表达式14、集合元素布尔判断15、实战经验1、文本表达式文本表达式支持字符串、 日期 、 数字(正数 、 实数及十...原创 2019-07-19 21:43:34 · 2650 阅读 · 0 评论 -
我是如何完成GPS审核MySQL拆库的?
文章目录1、总体概述2、项目背景3、拆库准则4、目标拆解4.1、一期目标4.2、二期目标4.3、三期目标4.4、四期目标5、总结GPS拆库是我所在M这家公司负责MySQL拆库的第二个项目,该项目历经四个阶段(一期-查询类研发,二期-写入类研发,三期-灰度代码下线,四期-正式数据源切换),前后历经两个月最终上线告诫,但这个项目之所以划分四个阶段,从而也体现我总会把一件事情通过分解成各个小目标,各...原创 2019-07-20 19:54:24 · 325 阅读 · 0 评论 -
开发十年,只剩下这套Java开发体系了
蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜我错过了,我用这五年时间和很多程序员一样在困惑和迷茫中找不到出路!原文链接:https://my.oschina.net/u/3779583/blog/1862418路其实一直都在那里,只是我...转载 2018-09-24 16:22:46 · 265 阅读 · 0 评论 -
基于oval注解与自定义aspect应用对接口DTO数据约束校验
我们在对外提供接口服务时,对于参数校验总会存在大量的if条件语句判断,代码冗余,本来代码看起来挺干净整洁的,但是恰巧看到这些大量的if判断语句代码,显得那么碍眼。因此,我们在开发的道路上,总会想到是否有更好地方法以解决这种碍眼的代码?鉴于我的实践道路上,我悟出了自己的一条光明之路,以分享给大家,那就是基于oval的entity注解+aspect实现。1、初识Ovaloval,是...原创 2018-09-11 18:24:36 · 1354 阅读 · 0 评论 -
基于google aviator计算引擎的场景应用
Aviator是一个开源的Java表达式求值器,不仅支持四则运算、三元运算、逻辑运算,而且其强大的接口支持自定义扩展函数。鉴于此,金融产品重构优化团队在金融产品平台中,选择了这个google的计算引擎,为了扩展我们业务需求,我们自定义了一系列自定义函数,以支撑我们业务场景。1、简单地API调用示例第一步:我们的maven工程需要引入依赖<!-- 表达式解析引擎 -...原创 2018-09-11 18:23:22 · 4019 阅读 · 4 评论 -
Java中的“抽象接口”
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:618528494 我们一起学Java! 在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现。转载 2017-03-13 22:51:04 · 280 阅读 · 0 评论 -
Java中取两个集合的并集、交加和差集
java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法。今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例)package org.suk;import java.text.MessageFormat;import java.util.ArrayList;import java.util.List;/** * Desc原创 2017-04-07 13:25:59 · 9316 阅读 · 1 评论 -
java动态解析文本模板
import java.util.HashMap;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Msg { /** * 根据模板及参数获得短信内容 * @return */ public static原创 2016-11-22 10:31:24 · 4434 阅读 · 0 评论 -
JAVA获取两个日期间隔几个月
/** * 获取两个日期相差几个月 * @author 石冬冬-Heil Hilter(dd.shi02@zuche.com) * @date 2016-11-30 下午7:57:32 * @param start * @param end * @return */ public static int getMonth(原创 2016-11-30 20:02:50 · 11780 阅读 · 0 评论 -
集合分解
package com.chris.test;import java.util.ArrayList;import java.util.List;public class Resolve { /** * Description: 集合分解 * @Version1.0 2015-12-8 下午12:37:27 by 石冬冬-Chris Suk(dd.shi02@zuche.com)原创 2015-12-08 13:03:36 · 859 阅读 · 0 评论 -
RESTful API 设计指南
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"API First"的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。我以前写过一篇《理解RESTful架构》,探讨如何理解这个概转载 2015-11-21 14:17:30 · 363 阅读 · 0 评论 -
Apache Shiro 使用手册(三)Shiro 授权
授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限。 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,以及是否拥有打印的权限等等。 一、授权的三要素 授权有着三个核心元素:权限、角色和用户。 权限 权限是Apache Shiro安全机制最核心的元素。它在应用程序中明确声明了被允许的行为和表现。一个格式良好好的权限声明可以清晰表转载 2015-07-20 18:26:29 · 346 阅读 · 0 评论 -
Apache Shiro 使用手册(一)Shiro架构介绍
一、什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”;授权 - 访问控制;密码加密 - 保护或隐藏数据防止被偷窥;会话管理 - 每用户相关的时间敏感的状态。对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。并且相对于其他安全框架,Shiro要简单的多。转载 2015-07-20 18:23:10 · 396 阅读 · 0 评论 -
Apache Shiro 使用手册(五)Shiro 配置说明
Apache Shiro的配置主要分为四部分: 对象和属性的定义与配置URL的过滤器配置静态用户配置静态角色配置其中,由于用户、角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包含前两项的配置。 Apache Shiro的大多数组件是基于POJO的,因此我们可以使用POJO兼容的任何配置机制进行配置,例如:Java代码、Sping XML、YAML、JSON、ini文转载 2015-07-20 18:28:43 · 406 阅读 · 0 评论 -
Apache Shiro 使用手册(四)Realm 实现
在认证、授权内部实现机制中都有提到,最终处理都将交给Real进行处理。因为在Shiro中,最终是通过Realm来获取应用程序中的用户、角色及权限信息的。通常情况下,在Realm中会直接从我们的数据源中获取Shiro需要的验证信息。可以说,Realm是专用于安全框架的DAO. 一、认证实现 正如前文所提到的,Shiro的认证过程最终会交由Realm执行,这时会调用Realm的getAut转载 2015-07-20 18:27:46 · 389 阅读 · 0 评论 -
痛并快乐着,我的程序世界
我陶醉于自己的编码世界,每一块代码块都包含着我的欢乐和悲伤,那些代码块恨不得都打上我的专属水印,印证着我曾经的冥思苦想,当经过N次测试,我看到了自己世界中的喜悦,那种喜悦无与伦比,是骄傲,是辉煌,是历史的见证。这就是我,一个爱程序的Coder~~原创 2014-12-04 21:52:38 · 1036 阅读 · 0 评论