自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (4)
  • 收藏
  • 关注

原创 ngrinder应用示例

一个测试类,跟java方式相似groovy脚本package service import HTTPClient.HTTPResponseimport HTTPClient.NVPairimport model.AssetFreezeReqimport model.AssetInfoimport model.MemberGrowthAddRequestimport model.ShipperInfoimport net.grinder.plugin.http.HTTPRequestim

2021-11-30 16:49:20 1941

原创 git分支管理规范(避开多分支并行实践的潜在坑点)

分支分类本地 本地 feature分支dev dev集成环境 dev-20210802192535qa QA/PRE集成环境 release-20210802-5435prod 生产 release-20210802-5435创建分支项目启动时,去dmpt给对应工程创建一个线上变更,然后创建一个新的分支(须在dmpt上创建,不允许私下自行创建分支),比如feature-20210802-45545-v1.2.1,命名规范以对应需求的版本号结尾,dmpt创建的这个分支默认是基于master分支

2021-08-17 14:15:18 1902

原创 git-revert的坑

背景一个兄弟在做了feature1合并到feature2,并在feature2做了revert动作,feature2发布上线后发布master,master在反合feature1时,feature1中原来合并到feature2并被revert掉的内容,被下架。还原场景虽然v2分支有属性v3的内容 但是在合并到v1分支中丢失 是因为v1中有revert v3属性的动作。revert的在revert 可以找回找回之后的merge回归正常 这里原来master分支 没有v3属性 v1

2021-08-17 13:56:54 1250

原创 最佳实践-轻量级事务编程(绕开事务失效的坑)

1、代码中开启事务常见问题现象:方法加了@Transactional,同类中方法调用,事务未生效。原因:采用Spring aop注解事务方式,同类中方法调用不会进入AOP拦截。2、推荐方案 1、定义动作执行接口@FunctionalInterfacepublic interface IActionService { /** * 动作执行接口 * 事务 多线程 等可以封装 * */ void doAction();}2、定义事.

2021-04-16 09:56:27 246

转载 Tomcat,SpringBoot,Docker 的优雅关闭

转自https://my.oschina.net/pengranxiang/blog/4297551Java,Tomcat,SpringBoot,Docker 的优雅关闭软件架构进入专区参与更多专题讨论1 什么是优雅关闭@RestControllerpublic class DemoController { @GetMapping("/demo") public String demo() throws InterruptedException { // 模拟业务耗时.

2021-03-16 15:36:20 1315 1

原创 java开发规范-异常-错误码

错误码【强制】错误码的制定原则:快速溯源、简单易记、沟通标准化。说明: 错误码想得过于完美和复杂,就像康熙字典中的生僻字一样,用词似乎精准,但是字典不容易随身携带并且简单易懂。正例:错误码回答的问题是谁的错?错在哪?1)错误码必须能够快速知晓错误来源,可快速判断是谁的问题。2)错误码易于记忆和比对(代码中容易 equals)。3)错误码能够脱离文档和系统平台达到线下轻量化地自由沟通的目的。【强制】错误码不体现版本号和错误等级信息。说明:错误码以不断追加的方式进行兼容。错误等级由日志和错误码

2021-03-16 15:09:36 1316 1

转载 mysql的B+树机制说明

转自https://www.cnblogs.com/leefreeman/p/8315844.htmlInnoDB一棵B+树可以存放多少行数据?一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是5.

2021-03-10 10:54:29 347

原创 java进程cpu使用率高问题排查

以下对近期排查了一个生产cpu使用率高问题做个复盘:简单说下过程1、top查看耗时大进程2、再top -Hp 进程id,查看耗时高的线程。3、printf “%x\n” 线程id 转16进制,比如这里是4a714、jstack 19022 | grep 4a71 -A 50 找到线程执行栈信息。也可以jstack -l 进程号,看所有的,排查可疑。jstack信息如下:定位到关键代码:找到代码位置:再往下看:这里是可疑代码,通过日志信息中的业务代码入口,找到了相对的Excel模板

2021-03-04 11:25:35 260 2

原创 Java函数式接口(Functional Interface)

简单介绍函数式接口(Functional Interface)是Java 8对一类特殊类型的接口的称呼。 这类接口只定义了唯一的抽象方法的接口,并且使用@FunctionalInterface 进行注解。在jdk8中,引入了一个新的包 java.util.function, 提了几种分类场景,使java 8 的函数式编程变得更加简便。示例要实现一个场景,业务的执行实现和任务链实现分开。采用函数式编程进行抽象分离。如下定义了任务链的逻辑。有三个点:1、采用泛型定义业务数据类型2、业务的链条规则

2021-02-22 17:38:45 2951 3

原创 递归实现yaml配置转properties的keyvalue

如下代码:public class YamlConfig { private static String defaultName = "/application.yml"; private static Map<String, Object> map = new HashMap<String, Object>(); /** * 自定义sql前缀 */ private static String prefix_sql_biz = "fast.etl.sql

2021-02-20 14:41:09 320 2

原创 Redis持久化策略

Redis 持久化Redis 提供了两种级别的持久化方式:RDBRDB持久化方式是在指定的时间间隔能对你的数据进行快照存储.AOFAOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.混合方式可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保

2021-02-09 17:00:37 92

原创 JDK各版本特性简要说明(JDK5-JDK9)

jdk1.9新特性1、Java 平台级模块系统当启动一个模块化应用时, JVM 会验证是否所有的模块都能使用,这基于 requires 语句——比脆弱的类路径迈进了一大步。模块允许你更好地强制结构化封装你的应用并明确依赖。2.Linking当你使用具有显式依赖关系的模块和模块化的 JDK 时,新的可能性出现了。你的应用程序模块现在将声明其对其他应用程序模块的依赖以及对其所使用的 JDK 模块的依赖。为什么不使用这些信息创建一个最小的运行时环境,其中只包含运行应用程序所需的那些模块呢? 这可以通过 J

2021-02-09 15:03:30 552

原创 自定义spring-boot-starter实现及配置说明

前言对于自定义的组件,可以通过自定义spring-boot-starter来达到开箱即用的目的。实例有这样一个公共组件data-author-column,这里是具体的逻辑实现。对它我们来自定义starter。创建两个工程,其实可以是一个,这里按照springboot的标准分类,定义两个。1、data-author-spring-boot-starter2、data-author-spring-boot-autoconfiguredata-author-spring-boot-starte

2021-02-07 18:37:22 1073

原创 Springboot自动装配原理说明

前言SpringBoot有四大核心:1、Starter,开箱即用组件。2、autoconfigure,自动装配,根据上下文完成bean的装配。3、Actuator,springboot 应用监控。4、Springboot CLI,提供基于命令行,快速构建Springboot应用。自动装配自动装配,及自动将bean装配到IoC容器。在Springboot应用中,自动装配是通过@EnableAutoConfiguration注解来开启的。而这个注解申明在启动类注解@SpringBootApli

2021-02-04 12:08:32 269

原创 java多线程volatile与synchronized使用说明

无锁代码测试测试代码public class TestThread2 extends Thread{ private static int count = 0; private static Object monitor = new Object(); public static void main(String[] args) { TestThread2 t1 = new TestThread2(); TestThread2 t2 = new TestThread2();

2021-02-01 11:39:31 212

原创 Spring容器初始化AbstractApplicationContext说明

看下面的代码注释 @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. // 为上下文做刷新 prepareRefresh(); // Tell the subclass to refresh the i

2021-01-29 11:05:44 192

原创 RabbitMQ集群方式说明

RabbitMQ集群方式说明搭建集群的目的有两个:1、高可用,在某些节点故障情况下,能够继续提供服务2、横向扩展,可以通过增加集群节点,提高处理能力。三种部署方式1、单节点(这种部署方式不是集群)2、普通集群3、镜像集群单节点不用多说,这里重点说一下普通集群和镜像集群。普通模式默认的集群模式,假设两个节点(rabbit01、rabbit02)。对于Queue来说,消息实体只存在于其中某一个节点,比如rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相

2021-01-28 16:26:47 287

转载 Kafka HighLevel API与LowLevel API说明

Kafka的Consumer API有两种High Level Consumer APILow Level Consumer API对于开发这来说,选用哪个,首先要弄清楚这两种API的工作原理什么样,分别开放了哪些功能。High Level Consumer API说明High Level Consumer API围绕着Consumer Group这个逻辑概念展开。它自动管理每个Topic的每个Partition的Offset(自动读取zookeeper中该Consumer group的las

2021-01-27 15:09:00 1325

转载 Kafka分布式设计原理

Kafka是啥Kafka是一个由Scala语言开发的,多分区,多副本,可扩展,分布式流式平台。Kafka三大功能1、发布&订阅类似消息系统,读写流式数据2、分布式备份存储、安全的将流式数据存储在一个分布式、有副本备份、有容错的集群。3、流式扩展处理编写可扩展的流处理应用程序,用于实时响应的场景。Kafka适用什么场景Kafka适合应用于两大应用场景1、构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)2、构建实时流式应用程序,对

2021-01-27 12:21:11 509

转载 redis高可用-哨兵模式说明

Redis 的 Sentinel (哨兵)Redis 的 Sentinel 系统用于管理多个 Redis 服务器实例(instance), 该系统执行以下三个任务:监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。使用流言协议(gossip protocols)提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。自动故障迁移(Automatic fai

2021-01-26 12:28:25 192

原创 linux端口开放关闭命令参考

firewall汇总命令参考systemctl start firewalld # 开启防火墙firewall-cmd --zone=public --add-port=8080/tcp --permanent # 放行指定单个端口firewall-cmd --zone=public --add-port=3306/tcp --add-port=6379/tcp --permanent # 添加放行指定单个端口firewall-cmd --reload # 生效添加的要放

2021-01-26 11:20:08 909

原创 linux出现“rsyslogd was HUPed”错误解决

现象Linux实例出现系统日志无法输出的情况,例如message、syslog系统日志。原因由于系统日志服务异常退出导致。解决方案登录服务器,执行命令service rsyslog restart

2021-01-25 18:03:57 4763

原创 linux服务“TCP: time wait bucket table overflow”排查处理

背景生产服务有2分钟服务中断,但是系统cpu、内存、IO这些资源正常。于是排查。查日志先看了应用日志,没有异常出来,再看系统日志,这里是阿里云服务。cd /var/log/ls看到messages文件,打开看看。检查tcp配置1、查看并修改配置vim /etc/sysctl.conf将net.ipv4.tcp_max_tw_buckets参数的值调整为“20000”,之前是5000。net.ipv4.tcp_max_tw_buckets = 200002、执行命令、生效配置

2021-01-25 17:57:17 156

原创 mysql索引说明

前言项目采用开源数据库mysql比较多,使用数据库,绕不开索引,这里简单对mysql索引做个说明。索引类型mysql 索引有五种:主键索引、 唯一索引、普通索引 、全文索引、组合索引。来看看各自特点:主键索引(PRIMARY)它 是一种特殊的唯一索引,不允许有空值。唯一索引(UNIQUE)与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。普通索引(INDEX)最基本的索引,没有任何限制。全文索引(FULLTEXT )用于在一篇文章中,检索文本信息的, 针对较大的数据

2021-01-17 17:27:59 73

原创 java开发规范-编程规范补充

编程规范补充正常表达式推荐使用预编译【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。说明:不要在方法体内定义:Pattern pattern = Pattern.compile(“规则”);属性拷贝推荐spring工具类BeanUtils【强制】避免用 Apache Beanutils 进行属性的 copy。说明:Apache BeanUtils 性能较差,可以使用其他方案比如 Spring BeanUtils, Cglib BeanCopier,注意均是浅拷贝

2020-12-29 14:42:23 305 3

原创 mybatis插入记录的主键自增赋值机制说明

前言现在的项目实践中,表设计一般采用自增主键,那么在这当中会涉及到数据插入后,获取插入数据主键的一个场景处理。对于这种情况,mybatis框架做了封装,提供了支持。代码说明通过debug方式,跟进执行路径,查看对应逻辑代码。1、找到执行入口这里的参数赋值有三个,但不包括id的赋值,id是由数据库自增。这里看到一个KeyGenerator的类型,这个名字name的很好,自说明性很好。2、看看keyGenerator的执行逻辑这里可以看出,参数类型的id依然是空,但是上图的sql执行已结

2020-12-28 15:21:39 881 2

原创 java开发规范-注释规约

注释规约类 属性 方法 必须用/** 的注释【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,不得使用// xxx 方式。说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。抽象及接口方法必须使用javadoc注释【强制】所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、

2020-12-24 17:52:05 546 1

原创 java开发规范-控制语句

控制语句switch的case终止必须显示明确【强制】在一个 switch 块内,每个 case 要么通过 continue/break/return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个 default语句并且放在最后,即使它什么代码也没有。说明:注意 break 是退出 switch 语句块,而 return 是退出方法体。String类型参数 switch前,先判空【强制】当 switch 括号内的变量类型为 Stri

2020-12-24 15:18:26 342

原创 java开发规范-并发处理

并发处理单例对象的获取及对象中方法要保证线程安全【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。说明:资源驱动类、工具类、单例工厂类都需要注意。【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。正例:自定义线程工厂,并且根据外部特征进行分组,比如,来自同一机房的调用,把机房编号赋值给 whatFeaturOfGrouppublic class UserThreadFactory implements ThreadFactory {private fin

2020-11-27 12:20:35 468

原创 sql优化-mysql执行计划调优实践

第一版sqlexplain SELECT COUNT(*) AS waitFinancialReviewCount FROM clai_base WHERE clai_base.obj_status = 1 AND EXISTS ( SELECT clai_financial_review_process.id FROM clai_financial_review_process INNER JOIN user_rel_permission ON user_rel

2020-11-10 22:43:06 123

原创 sql优化-mysql子查询索引失效问题解决

问题生产某些功能执行较慢,找出来对应的sql,看看执行计划,入下:sql:SELECT COUNT( 1 ) FROM fich_base t1 LEFT JOIN cont_base t2 ON t1.contract_id = t2.id LEFT JOIN orga_base t3 ON t3.id = t1.transfer_organization_id LEFT JOIN user_base t4 ON t4.id = t2.sale_user_id LEFT JOIN em

2020-11-05 17:58:19 2799 10

原创 SQL state ‘23000‘, error code ‘1062‘, message [Duplicate entry ‘2‘ for key ‘PRIMARY‘]-batch批处理问题小结

场景使用batch方式在mysql数据库插入数据,源数据表A数据如下:A这张表是没有主键约束的。从A查询这些数据,插入到相同表结构的B表中。B表的id是主键约束。插入结果如下:可以看出,重复的保留了一条,且是后面一条。并且前面的重复对后面的数据插入没有影响。在批处理执行完后抛出DuplicateKeyException。总结批处理,需要考虑对数据库约束去重,避免脏数据或丢数据。...

2020-11-03 17:05:00 1211

原创 面向sql的快速ETL工具-使用说明

前言有需求要建数仓,自然就涉及到数据同步的需求。在这个项目的场景中,需要每天定时从各个业务系统拉取数据到数据仓库。基于这,便设计实施了一个面向sql的ETL工具。用好三张表t_etl, t_etl_execute, t_etl_data_source三张表。t_etl:用于配置etl任务,从哪些源库取什么源数据t_etl_execute: 对应t_etl中配置的任务,配置目标库,在目标库执行哪些操作t_etl_data_source:数据源配置信息。一个简单的示例从源库的源表t_produ

2020-10-30 17:57:15 711

原创 jvm监控三板斧实战-进程假死排查:jmap、jstat、jstack

问题应用在大批量任务执行一段时间进入假死状态。排查dump java进程jmap -dump:format=b,file=20201020.dump 726726是进程号结果通过mat分析,没啥问题。jstat -gcutil 726 5000jstat -gcutil pid 时间间隔毫秒每隔5秒 输出进程726 垃圾回收情况这里也是正常的查看死锁jstack -F pidjstack -F 726死锁到没有,但是有很多数据源线程阻塞。因此复盘代码,存在数据库连接没有主动

2020-10-28 12:33:19 2697 2

原创 java基于POI-3.14的Excel模板合并&模板解析

前言在一个老工程中涉及到了Excel作为合同模板的合并需求及合同模板中动态数据处理需求。因此,基于POI编写了这样一个组件。这里POI使用的版本是3.14。模板合并/** * Excel合并 行从上往下拼接 Workbook 面向接口 * @param towb * @param fromwb * @return */ private static Workbook merge(Workbook towb, Workbook fromwb) { // 默认取第一个sheet

2020-10-28 11:32:09 578 1

原创 java开发规范-集合处理

集合处理hashCode和equals二人转【强制】关于 hashCode 和 equals 的处理,遵循如下规则:1) 只要重写 equals,就必须重写 hashCode。2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法。3) 如果自定义对象作为 Map 的键,那么必须覆写 hashCode 和 equals。说明:String 因为重写了 hashCode 和 equals 方法,所以我们可以愉快地

2020-10-27 16:27:26 551 2

原创 java开发规范-日期时间

日期时间日期pattern 年份yyyy Not YYYY【强制】日期格式化时,传入 pattern 中表示年份统一使用小写的 y。说明:日期格式化时,yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year(JDK7 之后引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的 YYYY 就是下一年。正例:表示日期和时间的格式如下所示:new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)

2020-10-27 14:19:11 431

原创 docker下redash搭建实践

拉取资源从github上拉取redashgit clone https://github.com/getredash/redash.git创建docker服务进入到工程目录下,执行docker-compose up -d 命令cd redash/docker-compose up -d初始化表服务# Create tablesdocker-compose run --rm server create_db安装npm依赖包在工程根目录下执行命令 redash/npm insta

2020-10-23 15:39:36 346

原创 mac下MAT安装workspace问题解决

下载安装介质https://www.eclipse.org/mat/downloads.php安装完成,拖到Application中找到应用位置,右击在包内容中,找到info.plist 文件修改,在array标签中增加workspace配置注意缩进。如果MacOS下没有workspace目录,需要新建。到这里就完成了。不明白,官方为啥没打补丁。。...

2020-10-22 20:40:56 315

原创 继承HashMap的类实现BeanPostProcessor接口,执行失效问题解决

问题场景代码实践中,碰到一个小问题,实现类A继承了HashMap 并实现了BeanPostProcessor接口。结果在应用启动,容器初始化工程并没有按照预期执行类A中postProcessBeforeInitialization实现方法。解决定义一个简单类,实现BeanPostProcessor,在B的postProcessBeforeInitialization方法中实现A要做的逻辑。...

2020-10-15 11:35:14 156

java服务错误码.docx

错误码定义及错误说明

2021-03-16

mysql5.7版本的配置参考

mysql5.7版本的配置参考

2021-01-29

MySQL开发规范.pdf

基于mysql数据库的sql开发规范,遵循、借鉴规范,有效的保证交付的质量及后期的可维护性。

2020-11-13

dbflute_dfclient.zip

dbflute_dfclient.zip,执行dbflute命令所需资源包,用于生成dbflute客户端,包括实体描述、行为描述文件

2020-07-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除