开发小技巧
码上得天下
这个作者很懒,什么都没留下…
展开
-
URL入参出参请求头可配置化
通过spring的Spell表达式解析变量的参数值,参数名定义为${XXX},在解析参数值后,将${XXX}替换成#XXX以匹配Spell表达式。原创 2024-05-14 15:57:20 · 325 阅读 · 0 评论 -
CompletableFuture 并行多个任务
用并行任务有什么好处,先来看一张图。转载 2023-03-22 11:31:22 · 712 阅读 · 0 评论 -
ManagementFactory打印应用线程,内存和GC等信息
ManagementFactory是一个为我们提供各种获取JVM信息的工厂类,使用ManagementFactory可以获取大量的运行时JVM信息,比如JVM堆的使用情况,以及GC情况,线程信息等,通过这些数据项我们可以了解正在运行的JVM的情况,以便我们可以做出相应的调整。本文将基于ManagementFactory,介绍如何通过ManagementFactory获取一些运行时的JVM信息,下面首先展示了ManagementFactory的类图,可以看出它提供了大量的工厂方法,使得我们可以通过调用这些方法转载 2022-01-11 13:06:25 · 782 阅读 · 0 评论 -
基于 screw maven 插件一键生成数据库文档
一、screw 是什么screw 是一个简洁好用的数据库表结构文档的生成工具,支持 MySQL、Oracle、PostgreSQL 等主流的关系数据库。仓库地址是:https://github.com/pingfangushi/screwscrew 生成的文档有 HTML、Word、Markdown 三种格式,如下:Word:Markdown:二、screw 快速入门本文的内容是基于 screw 的 maven 插件(screw-maven-plugin)来生成数据...转载 2022-01-11 12:50:44 · 1307 阅读 · 0 评论 -
接口管理平台
rap2 official - RAP接口管理平台原创 2021-11-18 11:44:39 · 87 阅读 · 0 评论 -
Failed to bind properties under ‘spring.datasource.type‘ to java.lang.Class<javax.sql.DataSource>
搞了一晚上这玩意,后来发现是配置错了spring.datasource.type = com.alibaba.druid.pool.Druid6DataSource应该是spring.datasource.type=com.alibaba.druid.pool.Druid6DataSource替换错误,根本原因还是整了一个application.properties 和application.yml,然后忘记在application.properties黏贴了一份druid的配置...原创 2021-10-27 10:05:44 · 1698 阅读 · 0 评论 -
JdbcTemplate 层级多数据源查询
业务场景,作为下游系统,对上游多个系统有读,没写操作。依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.8</version> </dependency>packag原创 2021-10-26 15:59:19 · 1139 阅读 · 2 评论 -
DTO日志打印统一脱敏
package org.demo.spring.mysql.dto;import org.springframework.beans.BeanUtils;import java.beans.PropertyDescriptor;import java.io.Serializable;import java.lang.reflect.Field;import java.lang.reflect.Method;public class BaseDTO implements Serializa.原创 2021-10-18 19:49:18 · 261 阅读 · 0 评论 -
利用反射覆盖DTO的set/get方法
import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Date;import..原创 2021-10-13 16:55:24 · 715 阅读 · 0 评论 -
sonar单测覆盖率统计排除DTO等类
在maven的pm.xml加上: <!-- 单测覆盖率统计排除的文件--> <sonar.coverage.exclusions> **/*Constants.java, **/*DTO.java, **/*Entity.java, **/*Config.java, **/*Resp.java, **/xxx/comm原创 2021-09-29 16:58:55 · 3208 阅读 · 0 评论 -
URL入参出参请求头可配置化
涉及知识点:ExpressionParserPropertyPlaceholderHelper核心类:package org.demo.property;import cn.hutool.core.map.MapUtil;import cn.hutool.http.HttpRequest;import cn.hutool.http.Method;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSON原创 2021-09-26 14:17:01 · 1025 阅读 · 0 评论 -
Google之Stopwatch 计时器
依赖<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.7</version>&转载 2021-09-14 09:46:59 · 1103 阅读 · 0 评论 -
HttpClient工具类PostMethod添加重试策略
public class HttpClientUtil { private static final Log logger = LogFactory.getLog(HttpClientUtil.class); public static String doPost(String url, Map<String, String> params) { l...原创 2021-05-17 10:55:55 · 715 阅读 · 0 评论 -
HttpServletRequest入参校验方法
/*** HttpRequest的转换类*/public class RequestUtil { private static Pattern filePattern1 = Pattern.compile("[/./.\\\\/:,<>+\"^]"); private static Pattern filePattern2 = Pattern.compile("[/./.\\\\...原创 2021-05-17 10:49:33 · 922 阅读 · 0 评论 -
SpringBoot中使用@VALUE取配置文件中的LIST和MAP配置
application.properties配置文件,然后需要配置一个map类型的配置,然后在程序的其他地方获取这个配置。配置内容data.map={"key1": "value1", "key2": "value2"}data.list=topic1,topic2,topic3在使用该配置的地方,使用@Value的使用获取:@Value("#{${data.map}}")private Map<String,String> map;@Value("#{'${data.原创 2021-05-17 10:40:06 · 2956 阅读 · 0 评论 -
解决:class path resource [] cannot be resolved to absolute file path
读取resources下的文件order_data.xlsx使用:File file = ResourceUtils.getFile("classpath:order_data.xlsx");报错:java.io.FileNotFoundException: class path resource [order_data.xlsx] cannot be resolved to absolute file path because it does not reside in the原创 2021-05-14 10:31:02 · 12922 阅读 · 2 评论 -
Easyexcel生成excel直接发送邮件
依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.2.10.RELEASE</version> </dependenc转载 2021-05-13 17:01:43 · 2309 阅读 · 2 评论 -
jackson中 @JsonProperty 的使用
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.原创 2021-05-05 16:25:44 · 423 阅读 · 0 评论 -
@JsonFormat与@DateTimeFormat注解的使用
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.3</version> <scope>compile</scope&g...原创 2021-05-05 10:14:45 · 81 阅读 · 0 评论 -
Java8使用并行流(ParallelStream)存在的坑
public class ParallelStreamTest { public static void test() { List<Integer> listOfIntegers = new ArrayList<>(); for (int i = 0; i < 10000; i++) { listOfIntegers.add(i); } // 并.原创 2021-04-30 17:22:40 · 4022 阅读 · 4 评论 -
EasyExcel-读写Excel的开源项目
EasyExcel使用说明原创 2021-04-30 15:43:55 · 167 阅读 · 1 评论 -
程序员必备画图技能之——流程图
作为一个程序员,经常需要画流程图来展示系统的运行流程或者是来表述某些业务的业务逻辑。可以说画流程图已经是程序员必须掌握的一个技能了。本文就从什么是流程图、流程图的适用场景以及怎么画好一个流程图这几个方面来介绍下流程图的基本知识。什么流程图流程图=流程+图。流程:Flow, 是指特定主体为了满足特定需求而进行的有特定逻辑关系的一系列操作过程,流程是自然而然就存在的。但是它可以不规范,可以不固定,可以充满问题。图:Chart 或者 Diagram, 是将基本固化有一定规律的流程进行显性化和书转载 2021-04-30 10:45:06 · 22410 阅读 · 0 评论 -
Spring 使用@Autowired注解注入集合类List,Map替代ApplicationContextAware获取Bean
@Componentpublic class ApplicationContextUtil implements ApplicationContextAware { /** * 上下文对象实例 */ private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicati.原创 2021-04-30 10:22:09 · 1284 阅读 · 0 评论 -
@Value注入map、List,yaml格式
使用@Value注入map、List实体类@Value("#{'${list}'.split(',')}")private List<String> list; @Value("#{${maps}}") private Map<String,String> maps; // punishMap: "{1:7,2:7,3:30,4:30,5:1825}"@Value("#{${punishMap:}}")private Map<Integer, Int转载 2021-04-30 09:51:57 · 3084 阅读 · 0 评论 -
Redis 客户端代码
依赖:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.10.RELEASE</version> <relativePath/></parent><dependenc原创 2021-04-27 17:57:08 · 176 阅读 · 0 评论 -
分布式ID生成方案
分布式ID生成方案(一):总体概述分布式ID生成方案(二):SnowFlake雪花算法分布式ID生成方案(三):MySQL下不同模式的实现分布式ID生成方案(四):基于Redis的实现分布式ID生成方案(五):SpringBoot2.X集成滴滴Tinyid分布式ID生成方案(六):SpringBoot2.X集成百度UidGenerator分布式ID生成方案(七):美团Leaf...转载 2021-04-27 11:03:23 · 116 阅读 · 0 评论 -
RestfulToolkit 一套 RESTful 服务开发辅助工具集
官网地址:RestfulToolkit一套 RESTful 服务开发辅助工具集。1.根据 URL 直接跳转到对应的方法定义 ( Ctrl \ or Ctrl Alt N ); 2.提供了一个 Services tree 的显示窗口; 3.一个简单的 http 请求工具; 4.在请求方法上添加了有用功能:复制生成 URL;,复制方法参数... 5.其他功能: java 类上添加Convert to JSON功能,格式化 json 数据(Windows: Ctrl + Enter; M...原创 2021-04-14 11:57:26 · 781 阅读 · 0 评论 -
内部类 参数校验
package com.ecarx.ads.processstore.domain.dto;import com.ecarx.ads.processstore.domain.annotation.OutFormatValidator;import lombok.Data;import javax.validation.Valid;import javax.validation.constraints.NotBlank;import javax.validation.constraints.N.转载 2021-04-08 10:28:23 · 1104 阅读 · 0 评论 -
MapStruct - No property named “XXX“
MapStruct 无法获取VO的属性,导致转换时属性都是null;其实就是lombok注解@Data无效,手动加上get/set方法就可以了,具体解决方案如下:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-p.转载 2021-03-29 09:53:05 · 2651 阅读 · 0 评论 -
mapstruct 实现DTO与VO的互相转化(后台管理开发)
依赖mapstruct: <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.4.2.Final</version> <scope>compile</scope&原创 2021-03-23 17:34:34 · 569 阅读 · 0 评论 -
非常实用的java工具包Hutool
Hutool原创 2021-03-23 17:05:35 · 439 阅读 · 0 评论 -
配置SpringBoot同时支持http和https访问
配置SpringBoot同时支持http和https访问java环境配置https访问(本地测试)转载 2021-03-10 09:40:23 · 266 阅读 · 0 评论 -
Java中List.remove报UnsupportedOperationException异常
原因:Java中List.remove报UnsupportedOperationException异常解决方法:数组转换成List集合解决方法:java8String[] ss = StringUtils.split(ids, ",");List<String> list = Arrays.stream(ss).collect(Collectors.toList());原创 2021-03-06 11:30:42 · 332 阅读 · 0 评论 -
JPA 注解@Id 会为表自动加上字段id
bug所在,如下 ,如果我的ap_log表里面不存在字段id,那么save时会自动生成字段id@ApiModel@Data@Entity@Table(name = "ap_log")public class ResultWithdraw implements Serializable { private static final long serialVersionUID = -5407378884927074772L; @Id private String id;原创 2021-02-26 18:56:05 · 692 阅读 · 0 评论 -
maven中scope属性的
注意:如果你将某依赖scope属性设置为test,比如你在A公共项目引入了一个这样的依赖,B项目又引用了A项目,此时B项目将无法获得该依赖;一般设置公共依赖时,不要将scope属性设置为test,当然最好还是在各项目中单独引用需要设置为test的依赖,不然最终会将这个依赖打入生产包,严格说是不合理的。maven中scope属性的Dependency Scope在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope&g.原创 2021-01-09 10:56:24 · 129 阅读 · 0 评论 -
Could not resolve view with name ‘xxx‘ in servlet with name ‘dispatcherServlet‘“
原因,全局异常没有写上@ResponseBody注解,接口报错代码走这里就报错了。原创 2021-01-04 18:14:29 · 1335 阅读 · 0 评论 -
@RefreshScope注解会导致CommandLineRunner接口执行两次
@Slf4j@RestController@EnableFeignClients@EnableDiscoveryClient@Configuration@SpringBootApplication@RefreshScopepublic class Application implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(Appli.原创 2020-12-26 15:20:52 · 1545 阅读 · 0 评论 -
自定义注解除了AOP之外的另外一种使用方式
主要代码:@Componentpublic class MqConsumerScanner implements ApplicationContextAware, BeanFactoryAware { private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); private ApplicationContext applicationContext; private BeanFactory beanFact原创 2020-10-28 21:06:08 · 514 阅读 · 0 评论 -
CompletionService 使用场景
// 根据业务入参获取业务执行的beanId List<String> beanIdList = getBeanIdList(infoTypeList); Map<String, Object> resultMap = new HashMap<>(); int size = beanIdList.size(); final CountDownLatch latch = new CountDownLatch(size); ..原创 2020-10-28 20:53:12 · 214 阅读 · 0 评论 -
ArrayList 和HashMap线程不安全的体现
1,ArrayList 线程安全问题(jdk1.8) public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }add方法分两步,第一步扩容;第二步添加元素;其中第二步elementData[size++] = e又分为两步:将元素e赋值给elem.转载 2020-08-14 20:56:14 · 231 阅读 · 0 评论