- 博客(283)
- 收藏
- 关注
原创 Nebula基础的查询操作介绍
这里只是对Nebula基础查询进行介绍,其目的是为了让未接触过Nebula的同学最短时间了解其语句。更详细更准确的内可以查看官方文档。关于查询这里并没有使用官方例子数据,而是自己实际尝试了文档中的语句。
2023-08-24 01:04:36
2985
原创 Nebula基础的操作介绍
这里只是对Nebula基础的介绍,其目的是为了让未接触过Nebula的同学最短时间了解其概念和使用。更详细更准确的内可以查看官方文档。
2023-08-24 01:02:34
2467
原创 聊一聊代码重构——封装集合和替换算法的代码实践
正常业务中,即使逻辑分支不同,但是其需要经历的流程大多是类似的,这个时候我们使用一些系列公共逻辑将其抽象。但是这些内容有可能并不是最好的方式,在原先的做法之外,可能存在更简单的解决方案,此时在重构代码时需要尝试对原来算法进行重构。很多时候我们封装了对象属性的访问,这能提供属性的安全性,但是对于集合,我们一般会将集合作为一个整体来控制。如果一个系统中是通过优惠标记来进行产品折扣的,那么这种固定产品ID进行折扣的方式,显然和产品正常涉及的逻辑不相符合。将正常的代码逻辑和特殊的代码逻辑隔离出来。
2023-03-12 20:30:27
621
1
原创 聊一聊代码重构——存在继承关系类上的代码实践
当一个子类继承了超类的很多方法,但是只使用其中的几个方法,而且这些方法并不是在子类中实现的,此时就可以考虑使用使用委托关系取代父类重构手法。如果一个字段或者方法在多个子类中使用,但是子类中它们所代表的含义和用法完全脱离的父类的约定,两者仅仅是使用相同的名称。需要注意的是将子类构造方法提升到父类后,这些构造方法会被所有子类使用,如果不仔细考虑代码中可能存在的细微差异,这个重构技巧可能会导致一些潜在的问题。需要注意的是,如果抽取到父类中的字段名称,和某些子类的变量重名时,要注意修改子类变量名,避免混淆。
2023-03-12 19:57:01
433
原创 聊一聊代码重构——程序方法和类上的代码实践
将存在的多个参数整合成一个对象进行传递,他带来的不仅仅是方法可读性的提高。更重要的一点是,构造方法的名称被严格限制,我们无法根据不同的构造方法来分析初始化的用途,但是使用工厂方法,我们可以通过参数名称、或者初始化方法的名称了解到对应方法解释初始化对象的用途。另外一种情况是,当一组方法使用相同的上下文的时候,我们可以为这些方法和上下文设置单独的类,将执行序列中的方法,作为类自身属性。并且需要修改的数据作为命令对象共享的字段,在不同处理方法中,不再需要设置繁琐的参数,所有的字段数据在调用方法后被实时更新。
2023-03-06 00:12:32
452
原创 聊一聊代码重构——程序方法上的代码实践
修改方法名称,一个好的方法名,让我们第一时间了解到方法的在业务中的作用,让我们更快的理解业务逻辑。而移除标记参数就是为了解决这些情况,将代码逻辑根据标记参数对分支的控制,创建对应的方法,每个方法执行对应逻辑分支内的逻辑,在传递标记参数的地方就直接调用对应的方法即可。当方法涉及的业务发生变化,内部逻辑出现调整的时候就需要考虑,方法名称是否可以被修改的前提,仔细了解方法内容,只有明白方法里面到底做了什么,才清楚方法的名称是否正常。在方法中不需要考虑标记方法的含义,因为方法中只存在单一场景的逻辑。
2023-03-05 21:54:55
455
原创 聊一聊代码重构——关于条件表达式的代码实践
和方法分解类似,如果有大的表达式,我们可以将其根据业务场景、数据模型等区分方式进行归类整理,类似的判断独立成一个方法,为其提供一个可以被理解的名称。一层一层嵌套的判断,加上复杂的逻辑,在看这些代码的时候只要分神,我们可能都无法确认当前逻辑存在的层级。很多时候即使将多个简单的表达式合并为一个复杂的表达式,最终的表达式依旧是个容易识别的表达式时,将他们合并起来是个好的方法。很多时候业务中的判断是分层的,我们需要判断上层内容然后再去进行下一层代码的判断,随着参数众多层级众多,我们的判断代码可能成为这个样子。
2023-03-05 00:04:30
448
原创 聊一聊代码重构——关于循环逻辑的代码实践
如果循环中的数据存在互相影响和依赖的情况,这会导致尝试理解循环中的代码所实现的目的变的更加困难。另外当多个业务共用一个循环时,如果不同的业务操作迭代范围不同,则需要在循环中添加各种不同的控制语句,会进一步降低代码的可读性。循环中存在另外一个问题就是多层循环,当多个循环在一起出现的时候,尝试阅读每层循环的逻辑会被其他循环所干扰,在理解当前循环内容时容易产生混淆。的核心是对数据的流式操作,它可以让我们通过流水线式的操作来处理数据,而不必编写冗长的循环和条件判断语句。是Java 8引入的一个强大的数据处理工具。
2023-03-04 23:48:29
616
原创 聊一聊代码重构——关于变量的代码实践
当一个表达式被赋值给一个变量后,在后续使用的时候,如果这段逻辑参与了后续的代码业务时,可以使用变量来替代,从而提高了代码复用程度。除了这种情况以外,有些时候变量完成初始化后,在后来的某处代码中会对变量再次进行了赋值,这种赋值有时候代表着变量的职责或者当时的数据状态发生了变化。虽然看起来变量增多了,但是在后续调用的时候可以清晰的理解,这两个变量内容是不一致的,而不至于调用的时候产生混乱。在上面例子中,除了可以将变量封装在对象中使用,部分基于变量的表达式,也可以作为对象自身的特性,作为对象的内部方法进行实现。
2023-03-04 23:35:11
640
原创 【HikariCP】为HikariCP配置MetricRegistry监控
Hikari提供了setMetricRegistry方法,让我们可以注入MetricRegistry来实现对连接池指标的收集。这样我们可以较为方便的监控连接池的运行状态关于MetricRegistry设置MetricRegistry输出内容输出指标说明输出度量说明手动方式获取连接池指标信息关于MetricRegistry关于MetricRegistry可以看我之前写的内容Metrics 快速入门Metrics的Histogram可配置项Metrics数据的输出格式设置Metri.
2022-05-16 21:16:30
6230
原创 ClickHouse使用问题——Serialization is not implemented
ClickHouse使用问题——Serialization is not implemented此系列的内容主要是介绍在使用ClickHouse中遇见的问题以及排除的思路或者方案或者仅仅是过程,所以内容可能会很短也可能会很长。主要的原因是目前ClickHouse相关问题的文章实在太少了。问题在一次对ClickHouse的视图数据集进行查询的时候出现的这样的错误nested exception is ru.yandex.clickhouse.except.ClickHouseException:
2022-05-15 21:19:12
934
原创 监控工具——Metrics数据的输出格式
Metrics数据的输出格式Metrics的Histogram可配置项这篇是之前监控工具——Metrics 快速入门的补充代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里: https://gitee.com/daifyutils/springboot-samples。此篇文章所属模块为:base-metrics支持的格式Metric提供了Reporter接口可以对统计的指标进行不同格式的输出。其提供的基础的输出类型
2022-05-10 00:22:29
2484
原创 监控工具——Metrics的Histogram可配置项
Metrics的Histogram配置参数这篇是之前监控工具——Metrics 快速入门的补充代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里: https://gitee.com/daifyutils/springboot-samples。此篇文章所属模块为:base-metricsHistogram在使用Histogram进行指标统计的时候,可以看到其支持一个Reservoir类型的参数 public Hist
2022-05-09 01:08:44
1886
原创 监控工具——Metrics 快速入门
Metrics 快速入门关于Metrics更多的内容可以查看官网 https://metrics.dropwizard.io/3.1.0/getting-started/代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里: https://gitee.com/daifyutils/springboot-samples。此篇文章所属模块为:base-metrics什么是MetricsMetrics提供了一个强大的工具包,用于衡
2022-05-09 00:58:34
11489
原创 【HikariCP】HikariCP连接时间设置和连接数设置
HikariCP连接时间设置和连接数设置时间设置HikariCP用来控制连接时间的配置主要有:idleTimeout(空闲时间)、maxLifetime(最长时间)idleTimeout:用来控制连接在连接池中空闲的时间。maxLifetime:用来控制连接在连接池中最大的生命周期。idleTimeout空闲时间默认设置为600000毫秒(10分钟)。配置生效的时机当minimumIdle小于maximumPoolSize的时候,HikariCP才开始进行空闲连接的判断,这个时候idle
2022-05-04 16:36:05
12126
原创 【HikariCP】HikariCP配置参数
配置HikariCP的必需配置对于数据源必须要配置的内容只有链接信息,其他内容都是非必须内容连接信息包括数据库驱动或者JDBC URL用户名密码数据库驱动因为现在大多数的JdbcUrl配置中已经指明需要连接的数据库类型,所以一般不需要额外再去设置,这里列出来各个数据库的驱动数据库驱动JDBC URLOracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@dbip:port:SQL Serverco
2022-05-04 11:55:18
9189
原创 工作积累——stream().toMap 空指针异常解决问题时发现的小坑
引子今天测试环境一处代码使用toMap出现了空指针异常,看了下其实很多经常使用lambda表达式进行转换的开发大多遇见过这种问题,本来这个也没什么研究了,现成的解决方案,但是大概就是好久没写东西了,天天忙的焦头烂额的时候突然想写点啥,于是在看到所有文章给出了一个几乎一样的解决方案时,想看看源码是否有其他方案。问题问题很简单就是List转换为Map的时候空指针报错了。大概是一段这样的逻辑,使用toMap的三个参数:键映射、值映射、冲突解决逻辑 public static void m
2022-04-24 23:56:22
5723
原创 扩展JPA对数组字段的支持(postgresql数据库)
扩展JPA对postgresql数据库数组字段的支持postgresql虽然支持数组字段,但是Hibernate却不支持,这里需要特殊处理直接使用三方依赖直接引入Hibernate大佬Vlad Mihalcea自己写的开源库,轻松愉快引入依赖<dependency> <groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-52</artifactId&g
2021-05-30 15:01:16
3405
原创 JPA中使用自定义数据类型
JPA中使用自定义类型此内容代码并未完全贴出来,代码码云地址:https://gitee.com/daifylearn/postgresql使用Convert转换器hibernate提供了一个Convert注解,其配置在字段属性上,参数中可以指定一个类型转换器,通过此类型转换器实现JAVA数据存在到DB中以及DB中数据读取到JAVA的过程中的解析。@Convert 中需要指定一个转换器类,此类需要实现了@AttributeConverter接口示例针对实体类中某个参数是一个嵌套对象@Data
2021-05-30 15:01:02
2746
原创 Spring Boot 整合——使用Spring Shell开发java命令行工具
关于版本依赖版本springboot2.0.8.RELEASEspring-shell-starter2.0.0.RELEASE关于项目本内容也是我尝试整理工作中接触过各种工具在springboot中使用的方法。下面介绍的所有方法都已经提供了测试用例。因为每个例子涉及代码较多,所以文章中只贴出了部分代码。全部的代码在这里gitee代码仓库spring shellSpring-shell是Spring提供的一个组件,此组件可以将Java中的代码逻辑封装为shell命
2021-03-27 16:43:02
6054
1
原创 Spring Boot 整合——Spring Mobile用来识别请求设备类型的小工具
文章前面关于版本依赖版本springboot2.0.8.RELEASEspring-mobile-starter2.0.0.M2关于项目本内容也是我尝试整理工作中接触过各种工具在springboot中使用的方法。下面介绍的所有方法都已经提供了测试用例。因为每个例子涉及代码较多,所以文章中只贴出了部分代码。全部的代码在这里:https://gitee.com/daifyutils/springboot-samples。Spring Mobilespring mob
2021-03-21 14:45:21
3579
1
原创 Spring Boot 整合——Spring retry有状态重试以及其注释和组件介绍
关于版本依赖版本springboot2.4.0spring retry2.4.0代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里:https://gitee.com/daifyutils/springboot-samples。通过配置状态重试来使用CircuitBreaker带熔断功能的重试无状态的重试无状态重试,是在一个循环中执行完重试策略,即重试上下文保持在一个线程上下文中。有状态的重试有
2021-01-17 22:06:49
1344
原创 Spring Boot 整合——Spring retry的基本使用
关于版本依赖版本springboot2.4.0spring retry2.4.0代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里:https://gitee.com/daifyutils/springboot-samples。Spring retry之前在介绍Spring batch的提到过其重试功能之后被独立出了一个新的项目spring retry。通常来说我们可以使用retry来解决一些因为网络
2021-01-17 22:06:12
4001
原创 日常工作——TransactionSynchronizationManager.registerSynchronization使用中事务传播产生的问题
主要是今天遇见使用TransactionSynchronizationManager出现的事务问题TransactionSynchronizationManager是一个事务管理的核心类,通过TransactionSynchronizationManager我们可以管理当前线程的事务。而很多时候我们使用这个类是为了方便我们在事务结束或者开始之前实现一些自己的逻辑。类似下面的逻辑我们希望在事务结束后再执行某些业务。所以可以使用TransactionSynchronizationManager.reg.
2021-01-05 23:51:31
19907
13
原创 Spring Boot 整合——Spring batch重试和回滚
关于版本依赖版本springboot2.4.0spring batch2.4.0代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里: https://gitee.com/daifyutils/springboot-samples。此篇文章所属模块为:base-batch-2.4.0目录地址目录测试目录内容dai.samples.batch.allowstartdai.sa
2020-12-27 19:37:51
2732
3
原创 Spring Boot 整合——Spring batch任务流程控制以及流程分割
关于版本依赖版本springboot2.4.0spring batch2.4.0代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里: https://gitee.com/daifyutils/springboot-samples。此篇文章所属模块为:base-batch-2.4.0目录地址目录测试目录内容dai.samples.batch.allowstartdai.sa
2020-12-27 19:37:27
2901
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人