
A1-java代码块积累
文章平均质量分 57
java代码块积累
乐之者v
快乐编程,一生编程。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
雪花算法生成唯一id的工具类
【代码】雪花算法生成唯一id的工具类。原创 2024-10-29 15:58:15 · 360 阅读 · 0 评论 -
base64和字符串的转换
【代码】base64转换为字符串。原创 2024-09-04 22:57:16 · 1030 阅读 · 0 评论 -
后端兼容app新旧版本的功能
在开发中,有时需要对 app的新版本和旧版本,做不同的处理。可以根据版本号判断。新版本app交互有变化时,同一个接口在 不同版本可能要返回不同的数据。如果不区分新旧版本,有可能会导致旧版本app 不可用。比如 旧版本1.2.1有一个功能是跳转 微信,到了新版本修改了 app的交互,变成跳转 微信小程序,如果不区分处理,旧版本就没法使用了。原创 2024-08-20 23:05:01 · 365 阅读 · 0 评论 -
Feign常用的代码、注解、Http请求调用
在做服务调用时,一般不会用到 url属性。my.url 是配置的值,后面的: 是默认值。在做服务调用时,一般不会用到 url属性。my.url 是配置的值,后面的: 是默认值。如果不需要 head参数,就不用加 @RequestHeader。原创 2023-11-08 00:06:36 · 421 阅读 · 0 评论 -
MongoDb常用代码及配置
MongoDB不需要建表,直接插入数据就会建表。日期用 ISODate() 转换。@Document 指定表名。原创 2024-08-19 22:56:45 · 406 阅读 · 0 评论 -
AES加密解密常用的代码示例
加密模式,有 ECB模式 和 CBC 模式等等,ECB 不需要 iv偏移量,而CBC需要。Hutool 的 AES, 默认加密方式为ECB ,默认的填充方式为 PKCS5。填充方式,有 PKCS5 、PKCS7、NoPadding。输出格式,可以有 16进制的 Hex ,或者是 Base64。如果不确定,可以使用 在线加密解密的网站,判断是哪一种模式。非对称加密是指加密和解密使用不同的密钥的加密算法。对称加密是指加密和解密使用相同的密钥的加密算法。AES是 对称加密。原创 2024-08-19 23:15:04 · 759 阅读 · 0 评论 -
使用Lombok和建造者模式简化代码
在项目开发中,我们经常需要构建对象。常见的做法有getter/setter,或者构造器构建对象。也可能写了一个参数非常冗长,传参特别容易出错的构造方法。原创 2024-07-27 11:44:41 · 332 阅读 · 0 评论 -
业务开发常用的开关
或者是逻辑复杂,开发环境造数据麻烦时,也可以配置开关,把前置条件关掉,方便验证数据,也方便测试。某些关键的容易变更的逻辑,加上一个开关。如果要关上开关,就修改为 false。不需要的逻辑,可以及时用开关关掉。需要的时候,打开开关。原创 2024-07-27 11:44:11 · 380 阅读 · 0 评论 -
BigDecimal代码示例
在平常开发中,如果涉及到计算,要求准确的精度,比如单价*数量=总价之类的计算,那么得用到BigDecimal。###初始化比如那么有可能这个BigDecimal会从0.06变成0.059999999,传入double类型来初始化本身就是不精确的。原创 2024-07-27 11:42:43 · 263 阅读 · 0 评论 -
mysql分库分表 sharding-jdbc 5.0的代码实现 (二)
分库策略的类,该类必须实现 StandardShardingAlgorithm 接口,且类对应的Component注解名称为 preciseShardingTableAlgorithm./*** 分库策略* StandardShardingAlgorithm<Integer> 后面的泛型,需要跟分库字段保持一样的类型**/@Slf4j/*** 主库别名*//*** 分库策略,按用户编号最后一位数字对数据库数量取模。原创 2024-07-27 11:27:48 · 493 阅读 · 0 评论 -
java8多线程的lambda
()里面是函数的参数,中间是箭头, {}是函数的代码块,{}包含了函数的执行以及返回结果。lambda表达式,实际上就是匿名函数。原创 2024-07-27 10:17:23 · 367 阅读 · 0 评论 -
PropertyDescriptor动态反射setter和getter设置对象属性
BeanWrapper和BeanWrapperImpl是 Spring的接口和类,可以通过BeanWrapper和BeanWrapperImpl获取 PropertyDescriptor。使用传统的反射 Method、Field等类去处理,需要对方法名进行大量拼接,比较麻烦。我们在开发的过程中,有时会需要动态地设置属性,也就是动态getter、 setter。可以使用 PropertyDescriptor.原创 2024-06-26 14:43:39 · 451 阅读 · 0 评论 -
java开发常用代码
详情见: https://blog.youkuaiyun.com/sinat_32502451/article/details/139417740。详情见: https://blog.youkuaiyun.com/sinat_32502451/article/details/133039513。详情见: https://blog.youkuaiyun.com/sinat_32502451/article/details/138199660。原创 2024-06-05 22:54:29 · 364 阅读 · 0 评论 -
java类型转换
类型转换虽然很简单,但是还是有些小细节要多注意。原创 2024-06-03 16:07:25 · 437 阅读 · 0 评论 -
java8 日期Date、LocalDate、LocalDateTime、字符串String的转换
【代码】java8 日期Date、LocalDate、LocalDateTime、字符串String的转换。原创 2024-04-25 21:06:31 · 632 阅读 · 0 评论 -
java8 LocalDateTime
LocalDateTime: 可以设置含年月日时分秒的格式 , 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的。LocalDate: 只能设置仅含年月日的格式,表示没有时区的日期, LocalDate是不可变并且线程安全的。LocalTime: 只能设置仅含时分秒的格式,表示没有时区的时间, LocalTime是不可变并且线程安全的。Duration: 用秒和纳秒表示时间的数量(长短),用于计算两个日期的“时间”间隔。after 只在大于(>)情况下才为true (相等时不会)原创 2024-04-25 21:04:33 · 812 阅读 · 1 评论 -
SonarBug修复
解决方法:不要直接抛Error,RuntimeException/Throwable/Exception这样的通用的异常,使用更具体的异常代替。解决方法:使用BigDecimal.valueOf()代替。解决方法: 重写equals()必须重写hashCode()。IDEA可以通过Alt+Insert自动生成。解决方法:使用(long)类型转换,或者在数字后面加上L转换类型。解决方法: logger.error(“错误提示字符串:”,e);解决方法: 浮点数不应该用==去比较,可能会精度丢失导致不准确。原创 2024-03-26 14:28:22 · 2930 阅读 · 0 评论 -
策略模式代码示例(二)
策略模式,针对每一个不同的类型,调用具有共同接口的不同实现类,从而使得它们可以相互替换。策略模式 ,针对实现同一接口的不同的类,采用不同的策略。比如,面对高级会员、初级会员会采用不同的折扣。策略模式,可以避免大量的if和else。原创 2024-03-01 15:45:21 · 676 阅读 · 0 评论 -
统一异常处理@ControllerAdvice及参数校验@Validated
直接throws Exception,抛的异常太过宽泛,最好能抛出准确的异常,比如throws IOException之类。Controller层的参数通常都需要检验,经常会看到大量的判空,然后返回错误提示,比如"名字不能为空"之类的提示。但是,如果在Controller层进行大量的捕获异常,可能会出现大量的非常多的try catch代码块。阿里巴巴的java规范中有一条,“最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。而且,异常一直向上抛,上层的类还是得处理这些异常。原创 2024-02-28 14:23:02 · 545 阅读 · 0 评论 -
Spring/SpringBoot 拦截器
还可以通过 addPathPatterns 匹配请求的url,excludePathPatterns 排除特定的 url。配置拦截器,需要实现 WebMvcConfigurer 接口,通过 addInterceptor 添加拦截器。Spring的拦截器,需要实现 HandlerInterceptor 接口。可以多次调用 addInterceptor,支持添加多个拦截器。拦截器,可以进行请求过滤、权限管理、打印日志、数据校验等。拦截器,可以在请求前、请求后进行处理。原创 2024-02-18 21:21:54 · 770 阅读 · 0 评论 -
java读取写入excel数据
在java开发中,有时需要使用excel读取和写入数据。可以使用 poi来处理。原创 2024-01-02 23:51:54 · 3755 阅读 · 0 评论 -
AOP打印日志参数和耗时
可以通过 AOP , 以 控制层 controller 所在的包为切点, 在 controller 的方法前后打印日志,这样就能统计出接口的耗时,还能打印入参,出参,减少重复地打印日志。如果想根据代码搜索日志,那么可以选中方法后,根据idea的快捷键 ctrl+alt+shift+c,复制方法,然后搜索日志。如果想根据日志搜索代码,那么复制日志打印出来的类和方法,然后可以用idea的快捷键 双shift ,快速搜索方法.如果想统计 dao 层的入参和耗时,也可以用类似的方法。原创 2023-11-16 22:18:26 · 501 阅读 · 0 评论 -
SpringBoot集成Redis
【代码】SpringBoot集成Redis。原创 2023-11-12 21:30:01 · 108 阅读 · 0 评论 -
RateLimiter限流
限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。降级:降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开。RateLimiter限流属于单体版的限流,如果是高并发的分布式系统,需要用分布式限流。缓存:缓存的目的是提升系统访问速度和增大系统处理容量。限流是高并发的处理方法之一。原创 2023-10-29 20:23:24 · 461 阅读 · 0 评论 -
kafka代码示例
Windows安装kafka, 详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/133067851。Linux 安装kafka,详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/133080353。原创 2023-10-29 11:34:17 · 166 阅读 · 0 评论 -
kafka代码实践示例
Windows安装kafka, 详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/133067851。Linux 安装kafka,详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/133080353。在实际开发中,会有多种不同的消息,服务器也不一定一样。需要根据不同的需求,进行不同的配置。kafka 配置类。原创 2023-10-29 14:52:31 · 231 阅读 · 0 评论 -
hutool 工具类提高编码效率
此类重写了父类的 toString()方法,返回值为"yyyy-MM-dd HH:mm:ss"格式。body传参形式为json时,需要将json转成字符串,不支持JSONObejct。可以使用 JSON.toJSONString(json) 将json转化为字符串。hutool的 DateTime继承了 Date,所以可以用 Date 声明。DateUtil 日期工具类,返回的大部分日期都是 DateTime的。如果是指定日期的上个月,可以使用日期偏移相关的方法。引入 hutool 依赖包。原创 2023-10-21 18:47:09 · 979 阅读 · 0 评论 -
PageHelper基础知识
(1) 执行 PageHelper.startPage(),会初始化一个 ThreadLocal 属性变量 LOCAL_PAGE ,这个 ThreadLocal 属性变量会在后续设置线程副本变量 Page.这个拦截器会在我们的sql查询语句之前,执行 SELECT count(0) 语句进行计数,还会在startPage()之后的第一个select查询语句中加入 limit 进行分页。(3)获取 ThreadLocal 中设置的 Page 信息,获得分页的总数和结果。(1)设置页数和每页数量,开始分页。原创 2023-10-21 13:13:22 · 149 阅读 · 0 评论 -
java8 Optional理解及示例
orElseGet(lambda表达式)会在有值的时候返回值,如果没有值,它会执行作为参数传入的函数式接口(返回类型必须和Optional封装的对象是同一种类型),并将返回其执行结果。而常见的判断Optional结果的方法有,orElse()、ifPresent()、get()、empty()、map()、flatMap()。Optional的orElse()若方法不是纯计算型的,有与数据库交互或者远程调用的,都应该使用orElseGet()。值不为空时,两者都会执行参数中的函数式接口。原创 2023-10-21 13:11:25 · 296 阅读 · 0 评论 -
java常用的工具类/第三方类库
详情见: https://www.cnblogs.com/expiator/p/17347890.html。详情见: https://www.cnblogs.com/expiator/p/17276594.html。多掌握一些java常用的工具类、java常用的第三方类库,可以让我们提高效率,代码变得简洁优雅。包含集合、并发、I/O、散列、缓存、字符串等。在开发的过程中,有些代码直接用原生的语法写起来比较麻烦。jdk自带的类,用于处理对象,判空,转换字符串等。处理字符串,常用的方法有。原创 2023-10-21 12:54:02 · 755 阅读 · 0 评论 -
Google Guava常用的代码示例
Table是Guava中的一种数据结构,两个key对应一个value,相当于表格,某行某列对应一个值。谷歌出品的,非常实用。包含集合、并发、I/O、散列、缓存、字符串等。Splitter可以用来分隔字符串。Joiner可以连接字符串。原创 2023-10-21 12:46:47 · 268 阅读 · 0 评论 -
mybatis-plus-generator自动生成代码
修改包名、作者、路径、jdbc配置后,运行main()方法,输入表名即可,多个表用逗号隔开。原创 2023-10-21 12:37:59 · 226 阅读 · 0 评论 -
Spring/SpringBoot自定义线程池
在 Spring/SpringBoot 中,可以使用 @Configuration 和 @Bean 去设置线程池,用 @Value 去做线程池的参数配置。详情见:https://www.cnblogs.com/expiator/p/17140760.html。原创 2023-10-21 12:29:22 · 459 阅读 · 0 评论 -
java业务开发常用的配置表及代码
比如 订单30分钟后失效,需求变更,要改为15分钟,那么直接改配置表就行了,不用发版。某些关键的容易出错的逻辑,加上一个开关,也就是 config_value 为 0或1,为1表示打开,为0表示关掉。或者是逻辑复杂,开发环境造数据麻烦时,也可以用配置表配置开关,把前置条件关掉,方便验证数据。config_key 唯一索引,保证配置的 key 唯一。config_value,如果有多个,可以用逗号隔开。插入/更新数据后,记得删掉缓存,保持一致性。不需要的逻辑,可以及时用开关关掉。通过配置表,灵活的配置。原创 2023-10-21 12:19:44 · 722 阅读 · 0 评论 -
CompletableFuture多任务异步,获取返回值,汇总结果
supplyAsync(): 异步处理任务,有返回值whenComplete():任务完成后触发,该方法有返回值。还有两个参数,第一个参数是任务的返回值,第二个参数是异常。allOf():就是所有任务都完成时触发。allOf()可以配合get()一起使用。/*** 异步,多任务。汇总返回值*///该线程池仅用于示例,实际建议使用自定义的线程池//线程安全的list,适合写多读少的场景//任务完成时执行。用list存放任务的返回值if (result!= null) {原创 2023-10-20 22:55:33 · 4832 阅读 · 0 评论 -
SpringBoot集成Redisson的分布式锁
可以在 application.properties 中添加。原创 2023-10-12 20:55:37 · 395 阅读 · 0 评论 -
Redisson使用延时队列
接着调用 addDelayQueue()方法,往队列中添加数据,观察日志,可以发现 5秒后,取到队列中的数据。调用 takeDelayQueue()方法,不断在延时队列中拉取数据,由于队列中没有数据,所以会先阻塞。如果使用 jdk自带的延时队列,那么服务器挂了或者重启时,延时队列里的数据就会失效,可用性比较差。取出延时队列中的任务,如果延时队列中没有任务,会阻塞,直到队列中添加了任务。比如,订单15分钟内未支付自动取消。可以使用Redisson的延时队列。在开发中,有时需要使用延时队列。原创 2023-10-12 22:28:14 · 1124 阅读 · 1 评论 -
SpringBoot中使用@Retryable注解进行重试
可以看到,@Retryable 修饰的方法执行了3次。仍旧失败后,会执行 @Recover 修饰的方法。在Application 启动类上,添加 @EnableRetry 注解。有功能需要重试时,可以使用Spring的 @Retryable 注解.原创 2023-10-11 17:07:30 · 790 阅读 · 0 评论 -
idea自定义 postfix completion提高编码效率
初始化list:list字符串判空:ifisBlank$END$$END$字符串比较ifequals在ENDENDEND这个地方输入了 变量后,直接 shift+Enter 跳转到下一行。集合判空:ifisEmpty$END$$END$原创 2023-10-11 14:57:56 · 722 阅读 · 0 评论 -
java8 lambda和stream的理解
(1)中间操作:filter(Predicate), map(Function(T, R), limit, sorted(Comparator), distinct,flatMap;//以下的toMap(Worker::getId, Worker::getName)表示将流转化为Map,键为Worker对象的id属性,值为Worker对象的name属性。包括filter()、map()、sorted()、forEach()等操作。(x, y) -> x + y ,表示接收参数x和y,返回x+y的和。原创 2023-09-11 23:10:41 · 175 阅读 · 0 评论