
java
浩浩_海东青
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
本地缓存caffeine
说起本地缓存,很多人可能会想到guava,guava是google一些列程序包中一个非常方便好用的本地化缓存实现。在以往项目中有需要本地缓存方案时,我都会用guava来做实现,确实很有效且方便。但前段时间看到Spring官方推荐的本地化缓存实现方案为caffeine,很吃惊不是guava,考虑到caffeine是Spring官方推荐的,应该是有其独到之处。性能从上图可看出caffeine的性能是非常出色的,具体可参见官方文档caffeine官方文档入手实践1、首先在项目中引入jar包:<原创 2020-12-15 21:04:09 · 515 阅读 · 0 评论 -
批量insertOrUpdate或replace-into使用useGeneratedKeys报错简单分析
在项目中我们经常使用useGenerateKeys来返回自增主键,避免多一次查询。在项目中不管是单条数据插入还是批量数据插入,用此方法获取自增主键ID屡试不爽。当然也会使用on duplicate key update,来进行insertOrUpdate,来避免必须先query后才觉得是insert还是update。这招用起来很爽,但是也容易不知所以的掉坑,鄙人在一次批量更新的时候使用到了useGenerateKeys导致项目保错,促使我要研究一下使用useGenerateKeys的内部原理和使用奥秘。现原创 2020-07-28 09:53:10 · 5319 阅读 · 0 评论 -
总结使用Mybatis-generator遇到的坑
在项目开发的时候,习惯于先定义数据库表,给表字段写好注释,方便自己也方便他人。因为使用Mybatis的话,dao、domain、xml等文件基本上没有逻辑,都是基本的数据库操作语句,也就不想自己手写了(太费劲,也容易出错,想想一个包括20多个字段的表。。。),因此想到使用自动化插件来帮助放飞自我使用Mybatis-generator插件的方法网上都有,随便一搜就可以看到。它包括如下几个模块:1、在欲使用Mybatis-generator插件的功能模块的pom.xml中加入以下配置:&l原创 2020-07-14 18:59:20 · 9696 阅读 · 0 评论 -
Mysql索引规范学习
使用索引优点有效缩短数据的检索时间;加快表与表之间的连接;建立索引的列可以保证行的唯一性;使用索引缺点创建和维护索引需要时间成本,随着表数据量的增大而增大;创建和维护索引需要空间成本,随着表数据量的增大而增大;会降低表的增删改的效率,因为每次数据的增删改都会进行索引的动态维护,导致时间变长;表加索引的原则数据库表数据量很大,查询时需要索引加快搜索速度;多表联合查询的约束字段需要加索引;需要排序(如创建/变更时间倒叙)和分组的字段需加索引;表字段索引的原则越小的字段类型原创 2020-07-02 14:24:52 · 885 阅读 · 0 评论 -
线程池ThreadPool和ForkJoinPool学习
一、线程池技术一个线程池包括以下四个基本组成部分:ThreadPool(线程池管理器):用于创建并管理线程池;PoolWorker(工作线程):线程池中的线程,没有任务时处于等待状态;可以循环执行任务;Task(任务接口):每个任务必须实现的接口,以便工作线程调度任务的执行;taskQueue(任务队列):用于存放处于等待的工作线程任务;二、ForkJoinPoolForkJoinPool是JDK7引入的线程池。它的核心思想是将大任务分解成多个小任务(fork),由线程池分别执行每个小任务原创 2020-06-23 20:24:33 · 1173 阅读 · 0 评论 -
dubbo接口中时间类参数格式
在项目中第二次遇到根据时间段来做一个业务逻辑处理,这种情况下dubbo接口入参一般会有一个Date时间类。由于要测试接口的健壮性,往往需要本地调试接口,小菜我上次就是一时没弄明白本地调用接口的时间入参格式,最后使用的时间戳类型参数,被同事嘲笑了一把。 借此机会学习一下dubbo的时间类参数格式该如何设置: 首先,看一下如果使用不合法的时间格式会报错,错误的大体如下:cause: java.lang.IllegalStateException: Failed to parse d原创 2020-06-19 10:15:40 · 3766 阅读 · 0 评论 -
如何跨项目使用SPI扩展点
SPI-服务扩展点可以使得项目结构更加解耦,比如我司在支付方式模块中,全平台都可以使用在线支付,单由于业务场景要求,不同的业务实例会有定制化的支付方式,如非国有性质的采购人可以申请使用账期支付等。原先的技术实现是有订单模块代码中根据业务实例写死一堆的if-else业务实现,随着接入业务的增加,代码变得越来越臃肿和不可维护。为了该模块更具扩展性和易维护性,我们希望通过由订单中心提供支付方式SPI扩展接口,不同的业务线可以更灵活的配置各自的支付方式。 在一个项目中定义一个扩展接口,然后写不同的实原创 2020-06-19 10:13:22 · 1419 阅读 · 0 评论 -
数据库分页查询优化
我们在项目中经常会使用到分页查询,之前最常用from-size模式,即“select * from tableName where is_del = 0 limit #{from},#{size} ”,刚开始数据量比较小的情况下还没看出有什么缺点,但是当数据量为百万、千万级别以上数据时,会发现分页查询越来越慢,会严重影响前端页面的反映速度。 ...原创 2020-04-17 16:12:08 · 1063 阅读 · 0 评论 -
Java项目生成唯一有序的编号-使用redis
项目中有种场景需要生成唯一、有序、自增编号,因为项目是分布式部署,这使得编号的生成有点麻烦。最后在同事的建议下使用Redis的Hincrby方法来简洁有效的解决这种问题。public String generateProtocolNo(String districtCode) { try { String year = String.value...原创 2020-04-16 16:08:15 · 3289 阅读 · 0 评论 -
Java项目数据迁移怎么做的
Java项目数据迁移怎么做的?1、订单表到履约表找字段映射,即两个不同库表先做好数据字段的对应和补齐;2、代码程序(java)做功能,从一个数据库表中读出数据,然后写到另一个数据库表中;技术历练点多线程;使用线程池:确定核心线程池的数量;使用多线程后,怎么精确确定迁移任务结束时间;使用原子类:AtomicInteger; java Future<?>...原创 2020-04-16 11:41:56 · 6176 阅读 · 0 评论