JAVA
文章平均质量分 59
118路司机
尽我所能!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
对比两个Java对象属性值的差异代码示例
相同类型的对象A和对象B,要知道他们两个之间属性值的差异,另外一种场景是将一个对象更新时,想知道这个对象的哪些属性发生了变更。原创 2023-03-12 21:41:03 · 1817 阅读 · 0 评论 -
Jackson JSON反序列化List
将JSON字符串反序列化成List对象。原创 2023-01-30 17:04:39 · 1126 阅读 · 0 评论 -
JAVA动态维度笛卡尔积输出
有若干个数据序列,把这些数据序列的组合全部遍历输出原创 2022-12-09 16:58:37 · 476 阅读 · 0 评论 -
Spring Boot 内置工具类介绍
org.springframework.util.Assert 断言方法说明void notNull(Object object, String message)要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行void isNull(Object object, String message)要求参数必须空(Null),否则抛出异常,不予放行。void isTrue(boolean expression, String message)要转载 2022-05-07 16:39:58 · 303 阅读 · 0 评论 -
CentOS开机自动启动脚本
前言Linux作为服务器实在是太香了,唯一麻烦的就是服务器重启的时候,一些程序又得手动启动。其实可以通过添加开机自动启动脚本的方法来进行自动启动。自启动方法在/etc/rc.d/rc.local中添加启动脚本echo "/opt/script/start-my-app.sh" >> /etc/rc.d/rc.local如果需要以特定用户执行:echo "su user1 -c /opt/script/start-my-app.sh" >> /etc/rc.d/rc.lo原创 2022-01-26 15:44:21 · 1516 阅读 · 0 评论 -
MyBatis(Plus) 枚举数组的映射
背景我们都知道用MyBatis的EnumTypeHandler可以将数据库里的字段直接映射成Java里的枚举, 以下是MybatisPlus的示例代码:public enum Sex { MAN, WOMAN}@Data@TableName("student")public class Student { private String stuId; private Sex sex;}另外,像PostgrelSql这种数据库,是支持数组类型的,这时候可以用ArrayTyp原创 2021-12-24 09:40:35 · 1508 阅读 · 0 评论 -
优化MyBatisPlus的autoResultMap生成策略
前言使用MyBatis-Plus的字段类型处理器,只需一个注解,就可以很方便的将数组、对象等数据直接映射到实体类中。@Data@Accessors(chain = true)@TableName(autoResultMap = true)public class User { private Long id; ... /** * 注意!! 必须开启映射注解 * * @TableName(autoResultMap = true)原创 2021-07-04 09:29:24 · 15740 阅读 · 3 评论 -
Java Map的那些骚操作(put, putIfAbsent, getOrDefault, compute, computeIfAbsent, computeIfPresent 对比)
总结方法描述key未存在时返回值key已存在返回值key已存在时是否覆盖原有valueput(k, v)常规添加(k,v),key已存在则覆盖null已存在key的value是putIfAbsent(k, v)key不存在, 添加指定的valuenull已存在key的value否getOrDefault(k, v)key不存在,返回指定的的value参数指定的value已存在key的value否compute(k, (k, v) ->原创 2021-06-27 00:12:03 · 1184 阅读 · 0 评论 -
MyBatis-Plus 编程方式配置默认枚举TypeHandler
前言前面的文章MyBatis-Plus 编程方式配置扫描通用枚举,提到了通过设置MyBatis-Plus的配置方式来实现自定义枚举类和字段的映射,在后续中提到了想做一个包扫描的注解,后来在实现的过程中,发现如果要做到枚举的高度自由,类似于Mybatis-Plus的@EnumValue注解或者IEnum接口是少不了的,自己何必要在造轮子。解决思路其实如果是一个项目,如果有很好的编码规约和开发手册的话,枚举类也不会那么自由,比如统一规定和数据库字段对应的那个属性就要value,其他字段任意,如果是这样的话原创 2021-05-25 10:36:55 · 2680 阅读 · 1 评论 -
MyBatis-Plus 编程方式配置扫描通用枚举
前言使用Mybatis-Plus的通用枚举功能(https://mp.baomidou.com/guide/enum.html)确实可以很优雅的方式将数据库字段直接映射到我们自定义的枚举类,美中不足的是,官方对于自定义枚举类必须要通过属性配置的方式来扫描枚举类的包路径,在一些非直接发布成Spring Application的场景下,就不够用了。解决思路通过查找源代码,mybatis-plus.typeEnumsPackage的这个配置是直接反应到com.baomidou.mybatisplus.aut原创 2021-05-21 23:20:48 · 2552 阅读 · 1 评论 -
springboot 将@Service映射成为Restful服务
需求我们都知道springboot中使用@RestController标签可以方便的开发一个restful的微服务,在当今格技术栈混搭的情况下,有这么个需求:@Service所代表的核心逻辑服务可以打成jar包供本地调用,也可以发布成一个微服务以web的形式提供restful接口,后者的话,用@RestController包一层即可,但是懒惰的程序员可不想做这种无聊的事情,只是为了发布web服务,而写一堆繁琐的service包装代码,有没有一种方法,让@Servcie自动包装成web服务呢?思路先看原创 2021-04-02 11:35:53 · 902 阅读 · 1 评论 -
如何在SpringBoot中做参数校验
前言参数校验是开发中非常重要,也是非常繁琐的一件事情,不得不做,但是确无聊至极,而且和业务代码混杂在一起,维护起来十分麻烦。好在hibernate validator提供了一套比较完善、便捷的验证实现方式,而使用spring-boot-starter-web的话,已经包含了hibernate-validator包的依赖,给开发人员提供了极大的便利。pom.xml<dependencies> <dependency> <groupId>org原创 2021-03-02 16:51:53 · 1304 阅读 · 1 评论 -
SpringMVC 关于日期(Date)的接收与返回
局部配置JSON方式 (Jackson)import com.fasterxml.jackson.annotation.JsonFormat;@Datapublic class MyVO { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private Date date;}JSON方式 (FastJson)import com.alibaba.fastjson.annotation.JSONF原创 2021-02-25 09:01:46 · 2852 阅读 · 4 评论 -
Springboot 使用MongoTemplate 操作 Mongodb 增删改查分页
添加包依赖pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>Mongodb连接配置application.ymlspring: data: mongodb: uri:原创 2021-02-01 17:17:15 · 507 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier使用场景示例
场景分别计算12个月的销售额(每个月计算需要1秒),然后再计算每个月销售额占比(每个月计算需要1秒),下面分别用单线程,多线程 + CountDownLatch,多线程 + CyclicBarrier 来实现这个场景。单线程单线程运行,先分别计算每个月销售额以及累加年销售额,然后再分别计算每个月销售额占比,用时24秒public static void main(String[] args) { long startTime = System.currentTimeMillis();原创 2021-01-27 18:03:01 · 418 阅读 · 2 评论 -
Java生产环境 性能监控与调优
1. JVM参数分析1.1 JVM参数类型1.1.1 标准参数1.1.2 X参数相对比较稳定的参数,可以使用 java -X命令查看所有支持的参数。1.1.3 XX参数Boolean类型格式:-XX:[+|-]<name> 表示启用或者禁用name属性比如:-XX:+UseConcMarkSweepGCKeyValue类型格式:-XX:<name>=<value> 表示name属性的值是value比如:-XX:MaxGCPauseMillis=原创 2021-01-06 00:49:45 · 278 阅读 · 0 评论 -
JUC ThreadPoolExecutor 构造参数说明
前言ThreadPoolExecutor是JUC中非常重要的线程池基础类,它以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务。Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制,阿里巴巴java开发手册也建议线程池的创建不要使用Executors提供的默认几种方法来创建,而是使用ThreadPoolExecutor的构造方法,因为构造方法中的几个参数对线程池的创建至关重要。核心构造方法参数名作用corePoolSize核心线程池大小原创 2020-12-17 23:19:05 · 189 阅读 · 0 评论 -
FeignClient 脱离eureka自定义URL
需求Spring Cloud环境中的FeignClient有时候需要调用特定主机的接口,但是默认是从eureka上的注册列表自动获取到的负载均衡过后的URL,这时怎么办呢?方法一: 修改FeignClient注解如果本地可以编译参照的FeignClient源码,可以直接修改,如果参照的是jar包,则可以另外自己做一个FeignClient,主要是要指定url属性:@FeignClient(name = "test-service", path = "/test", url="http://local原创 2020-11-07 23:56:08 · 2167 阅读 · 0 评论 -
Java对象转JSON动态设置字段
需求User类:@Datapublic class User { private String name; private Integer age;}序列化成JSON时,处理动态增加一个sex字段{ "name": "张三", "age": 20, "sex": "男"}方法一利用@JsonAnyGetter注解进行扩展User的自定义属性改造User类:@Datapublic class User { private String name; private In原创 2020-11-03 15:38:11 · 2191 阅读 · 0 评论 -
SpringBoot集成OrikaMapper
OrikaMapper是一个简单、快速的JavaBean拷贝框架,底层采用了javassist类库生成Bean映射的字节码,之后直接加载执行生成的字节码文件,因此在速度上比使用反射进行赋值会快很多。与SpringBoot集成可以快速的进行各种DTO类之间的属性拷贝。...原创 2020-09-27 09:08:19 · 2250 阅读 · 1 评论 -
JAVA线程状态
状态定义JAVA线程的状态定义在java.lang.Thread.State枚举类中,有6个:New 尚未启动Runnable 可运行状态,等待CPU调度Blocked 阻塞状态,处于synchronized同步代码块或方法被阻塞Waiting 等待状态,下列不带超时的方式:Object.wati、Thread.join、LockSupport.parkTimedWaiting 具有指定等待时间的等待状态,下列带超时的方式:Thread.sleep、Object.wait、Thread.jo原创 2020-09-06 18:56:51 · 123 阅读 · 0 评论 -
JUC(java.util.concurrent)简介
JUC简介JUC是 在Java 5.0添加的java.util.concurrent包的简称,包含在rt.jar中。它的目的就是为了更好的支持高并发任务,让开发者利用这个包进行的多线程编程时可以有效的减少竞争条件和死锁线程。JUC组成JUC由以下5部分组成:1. tools 工具类CountDownLatch 闭锁, 是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待CyclicBarrier 栅栏, 一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏转载 2020-09-06 18:00:53 · 523 阅读 · 0 评论 -
关于接口是否可以当成常量类的讨论
前言首先看下两种常量类的写法:1. 用接口定义public interface MyConstants { interface MyType { String A = "A"; String B = "B"; } enum MyLevel { HIGH, LOW }2. 用类定义public final class MyConstants { public static final class MyType {原创 2020-08-27 10:36:38 · 1090 阅读 · 0 评论 -
复选框内容的二进制保存
前言其实,这个标题也不知道怎么写,对于常见复选框如何在数据库保存的问题,一种常见的做法是用1,2,4,8 … 等值来对应每一项,然后保存的时候把勾选的每一项相加即可得到一个整数,并且用这个整数可以还原勾选的各项内容。比如,勾选了2,4,8则保存成14,回显到页面的时候,14又可分解为2,4,8原理对于计算机专业的同学来说,很容易理解。上面的,1,2,4,8…转换成二进制就是:1:00012:00104:01008:1000…相当于给了4个占位符,0000,分别表示4个选项,如果第一项勾选原创 2020-07-29 15:45:24 · 614 阅读 · 0 评论 -
JAVA 6 ~ 13 新特性总结
java 6(JDK6 2006-12-11)命名方式变更、脚本语言、 编译API和微型HTTP服务器API 、 锁与同步 、垃圾收集 、 类加载 、JDBC 4.0(jdbc高级)、Java Compiler (Java™ 编程语言编译器的接口)、可插拔注解 、Native PKI(公钥基础设) 、Java GSS (通用安全服务)、 Kerberos ( 一种安全认证的系统)、 LDAP (LDAP )、 Web Services (web服务)java 7 (JDK7 2011-7-28)swi原创 2020-06-23 10:27:23 · 181 阅读 · 0 评论 -
什么是BlockingQueue
前言java.util.concurrent.BlockingQueue 接口很好的解决了多线程中如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。简介阻塞队列,顾名思义,首先它是一个队列,在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒。BlockingQueue的两个常见阻塞场景:当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。当队列中填原创 2020-06-16 09:27:56 · 491 阅读 · 0 评论 -
解决 JAVA 疑难杂症的“偏方”
我们经常在解决Java的各种奇怪Bug中,遇到一些明明觉得很对,但是又找不出原因的问题。各种Debug,各种排除后,发现问题居然出在了一些平时很难注意到的地方,今天就来总结一下。1. 变量/字段名有微妙的不同这个绝对是经常遇见的罪魁祸首,虽然不致命,但是难以排查。主要出现在利用BeanUtil进行对象属性拷贝的时候,明明觉得字段一毛一样,但是拷贝完之后,后面的字段总是null。肉眼是最信不过的,利用查找工具,依次查找(区别大小写):类型是否一致大小写是否一致,尤其是驼峰式的首字母是否下划.原创 2020-05-30 23:48:51 · 288 阅读 · 0 评论 -
Java 左侧自动补0
需求1 -> 01实现String.format("%02d", 1);说明%表示占位符0表示用0补齐2表示补齐字符d表示传入值是数字原创 2020-04-09 16:34:58 · 442 阅读 · 0 评论 -
JPS命令的安装和使用
一、简介jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。二、安装安装完java (yum install java)后,还需要安装openjdk-devel包才能使用jps命令。yum instal...原创 2020-03-09 22:00:40 · 22727 阅读 · 1 评论 -
Mybatis 配置
mybatis.configuration.cache-enabled=true使全局的映射器启用或禁用缓存。mybatis.configuration.lazy-loading-enabled=true全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。mybatis.configuration.aggressive-lazy-loading=true当启用时,有延...转载 2019-12-17 16:17:16 · 292 阅读 · 0 评论 -
利用Fastjson进行泛型的序列化和反序列化
public class SerialClass<T> public T deserialize(byte[] data) { if (data == null) { return null; } Class<T> entityClass = (Class<T>) ((Parame...原创 2019-12-16 13:55:01 · 599 阅读 · 0 评论 -
JNA的正确打开方式
JAVA通过JNA调用C/C++生成的DLL库网上介绍的方法已经很多了。但是轮到自己调用的时候,就各种问题困扰了整整一天。我把遇到的问题分享一下,万一朋友们遇到和我一样的问题,可以参考解决。基本使用方式使用CDecl方式导出的DLLpackage com.sun.jna.examples;import com.sun.jna.Library;import com.sun.jna...原创 2019-10-09 19:00:05 · 1825 阅读 · 0 评论
分享