- 博客(127)
- 资源 (11)
- 收藏
- 关注
原创 Kettle的MySQL数据源版本问题
Kettle的MySQL数据源版本问题背景:使用Kettle创建MySQL链接时,JDBC包版本兼容问题,只能用5.1的mysql.jar包。高版本用不了。然而,现在普遍都是8.0的MySQL版本。原因1.官方支持问题,如图可以看到官方支持的是MySQL-JDBC-5.1.jar。经过测试,5.1的jar包,确实可以直接用,但是链接高版本的MySQL时会出问题。2.MySQL曾经换过包名版本driver-class5.1.47以前org.git.mm.mysql.Dr
2022-02-18 09:41:11
971
原创 SpringBoot获取命令行参数
SpringBoot获取命令行参数在SpringBoot中获取命令行参数,如 -D参数。1.启动命令java -Dspring.profiles.active=dev -Duser.name=ltz2.获取方式@Value("${user.name}")private String userName;3.注意命令行参数优先级大于Application.yml优先级。...
2021-10-22 18:26:22
2066
原创 使用ThreadLocal在线程间传递参数
使用ThreadLocal在线程间传递参数使用场景用户参数透传,如租户ID,tid,userID,Token等。这些参数与具体业务无关,但是又是必须的(如:租户ID,在数据落库时需要传入,但是在其他业务代码中基本用不到)如果作为方法的参数一层一层向下传递,必然造成代码的冗余和扩展性查等影响。整片文章就以租户ID为例子说明吧。1.使用ThreadLocal结合AOP大致思路:在请求接口时,租户ID往往可以从Token或用户信息中取出,这时,在请求拦截器中,将用户TenantID取出,放入线程中。
2021-09-29 10:15:17
2037
1
原创 helm安装Sentry
文中的--kubeconfig ~/.kube/sentry,是指k8s的配置,添加配置后,可以访问指定k8s,如不需要,自行去除。1.安装helm2.设置镜像helm repo add stable http://mirror.azure.cn/kubernetes/chartshelm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubatorhelm repo update3.检测镜像helm sear.
2021-05-18 10:22:37
1853
8
原创 React项目偶现白屏
背景:1.使用Nginx做代理,把浏览器请求转发到COS上。2.React使用browserHistory路由(cdn.com/user/list)方式。3.刷新页面,偶现白屏1.React Router在React项目中,一般有两种路由方式。browserHistoryhashHistoryps: hashHistory 使用如 https://cdn.com/#/users/123 这样的 URL,取井号后面的字符作为路径。browserHistory 则直接使用 https:.
2021-05-13 18:43:12
851
原创 前端开发代理配置
代理配置Whistle作为一个开发调试工具,可以帮助开发人员解决很多问题,诸如:跨域、环境配置不同等等。代理的原理Whistle详细配置,可以参考安装Whistle基于Node.js。需要先安装Node.js(版本需要大于10.0)npm install -g whistle启动命令启动 whistle start重启 w2 restart(可以直接用这个启动)访问http://127.0.0.1:8899/Rule配置Rule,这是比较重要的一步,目的就是为了把,
2021-03-30 17:56:20
1132
原创 Spring Security 自定义接口登出
Spring Security 自定义接口登出使用Security提供的工具,在接口内登出用户。工具类代码 // 注入 tokenStore @Autowired private final TokenStore tokenStore; //在具体的业务代码中使用 /** * 删除 请求令牌 和 刷新令牌 * @param token 请求令牌 * @return */ public Boolean removeToken(String token) { OAu
2021-03-18 12:48:35
1113
1
原创 基于已有项目,快速创建项目模板
基于已有项目,快速创建项目模板mvn Archetype的妙用背景在开发过程中,尤其是使用Maven作为包管理工具时,在创建新模块时,总会有些头疼。常见场景从网上下载下来的开源项目(或者公司的大型项目),需要新建一个模块或系统,而这个开源项目,可能层次非常多。这时手动创建就很有可能产生错误。而Maven依赖等错误,有时候会非常隐蔽,不容易发现。一.选定原始模型这里以一个demo为例。此demo层层嵌套(阿里Cola4.0的demo)。如果创建一个新的领域模块,要创建6个模块,这是非常危险的
2021-02-26 18:11:01
775
1
原创 C4 model技术架构图--context图
C4 model技术架构图–context图在设计系统架构图时,包括常见的技术架构图和业务架构图。技术架构图架构图不止在前期设计系统时重要,在后期开发或者维护的时作为指导也同样重要。一.关于C4 model官方网址属于技术架构图的一种格式,C4 分别表示上下文(Context)、容器(Container)、组件(Component)和代码(Code)。四个层次,分别对应不同的角度。C4 model 架构图的系统拆分,其实与微服务拆分和DDD领域拆分的思想非常像。拆分的合理,才能保证系统的开发
2021-02-09 15:00:44
3385
1
原创 HBase入门
HBase安装单机环境Centos7Hbase安装JDKyum install java-1.8.0-openjdk* -y下载HBASEhttp://mirror.bit.edu.cn/apache/hbase/2.2.6/解压到Linuxtar -xf hbase-1.2.8-bin.tar.gzcd hbase-2.2.6修改JAVA_HOME配置文件vim conf/hbase-env.sh// 注意这个是在CentOS上的java位置export JAVA_H
2020-12-29 15:34:42
454
1
原创 blob临时路径 转File对象
blob临时路径 转File对象最近在使用Taro-UI时,发现一个问题。问题表象在上传图片时,Taro-UI只提供了一个图片选择器,可以返回这个图片的临时路径,类似如下:{ "url":"blob:http://10.1.10.122:10086/4ebc5d64-bd9a-4994-8212-addf476ba2c2", "file": { "path":"blob:http://10.1.10.122:10086/4ebc5d64-bd9a-4994-8212-a
2020-12-23 10:48:23
6773
3
原创 Go 并发执行
Go 并发执行需要并发执行的场景有很多:爬虫、拉取数据、更新数据…Go作为天生高并发的语言,在使用并发时是比较方便的。Demo案例package mainimport ( "fmt")func main() { ConcurrentWork(5, func() { // ...业务逻辑 fmt.Println("123123123123") })}/** * @Description: 开启多线程执行 * @param total 启动线程数 * @param
2020-12-22 17:01:34
810
6
原创 Go 错误码初始化
Go 错误码初始化错误码是程序中,经常需要用到的,一般在Map中定义…key为code,value为msg1.Map初始化由于这个Map只需要初始化一次,所以,可以使用Go基础包中的sync.Once。来保证,Init只运行一次,极大的减少了程序的运行开销。2.代码此处以单元测试的形式体现。Go语言的单元测试,可以看我的另一篇博文。import ( "fmt" "sync" "testing")var once sync.Oncevar mapErrMsg map[int
2020-12-11 11:28:50
870
原创 Go 单元测试
Go 单元测试单元测试是开发中非常重要的环节之一。在开发完成后、迭代改动后、代码改动后、添加功能后…快速的帮助开发人员完成代码的测试。一.目标不区分语言,一个函数、一个方法、一句SQL、一段业务代码,都可以成为单元测试的目标。单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。我们知道,在开发时越早发现BUG,就能节省更多的时间,降低更多的风险。二.目的单元测试一般由输入数据和预期输出组成。输入数据:Request,输入的请求参数。预期输出:Resp
2020-11-27 18:04:08
720
1
原创 Go-micro异常捕获
Go-micro异常捕获在go-micro服务层,添加异常捕获机制,并发送报警。本文提供的只是一种捕获异常的思路:通过添加Handler实现。1.注入拦截器初始化时,添加异常捕获Handler。部分代码...//初始化服务config.Service = grpc.NewService( micro.Name("MyService"), micro.Address(...), // 添加异常拦截 micro.WrapHandler(utils.WxErrorHandler()),
2020-11-25 13:52:51
636
原创 Gorm 只更新某一字段
Gorm 只更新某一字段背景在开发中,可能会遇到,需要更新这一条数据的某一字段,但是并不想修改其的UpdatedAt字段。如:数据浏览量。正常更新...err = d.db.Model(&repository.UserInfo{}).Where("id = ?", id).Update(repository.UserInfo{ ViewsCount: viewsCount+1, }).Error...只更新某一字段(UpdatedAt字段不会更新)...err =
2020-11-16 17:08:13
7821
2
原创 gRPC+ProtoBuf
gRPC+ProtoBuf-微服务传输协议微服务中,常见的传输协议有HTTP+Json、gRPC+ProtoBuf。同HTTP+Json一样,gRPC+ProtoBuf同样适用于跨语言传输。前提是,使用相同的协议原文件(.proto)生成各自的协议文件(.pb.go\.pb.cc\.java)协议格式user.proto// proto 协议版本syntax = "proto3";package user;// 包路径option go_package = "common/proto
2020-10-31 15:04:06
894
1
原创 Gin增删改查demo
Gin增删改查demo一个Gin框架的联手demo、包括增删改查等等。1.使用技术GinGormMysql…2.项目结构目录│ postman_collection.json // postman配置文件│ db.sql // 数据库表结构│ config.yaml // 配置文件│ go.mod // 包依赖配置│ main.go // 程序入口├─api│ └─v1 // api 方法│ sys_user.
2020-10-25 16:16:27
2090
5
原创 assignment mismatch: 2 variables but uuid.NewV4 returns 1 values
assignment mismatch: 2 variables but uuid.NewV4 returns 1 values在使用github.com/satori/go.uuid包生成uuid时,突然发现一个很奇怪的问题。如下图示。编译器和启动时,报错冲突。启动时,报错。报错提示uuid.NewV4()函数,只有一个返回值。点进函数内部去发现确实是两个参数。只接受一个参数发现只接受一个参数,可以启动,但是编译器又报错。最终解决。在该项目的github->issues
2020-10-22 10:37:55
3650
原创 SpringBoot undertow accesslog格式
关于SpringBoot undertow中accesslog的格式1.背景1.收集accesslog日志。2.项目使用SpringBoot的undertow。3.日志格式有特殊要求。2.问题原因关于寻找日志格式的路上,花费了不少时间,其中,在各种博客上、SpringBoot官网上和Apache Access Logging标准。都没有找到undertow配置的相关答案。大部分博客都是把官网的说明直接翻译了一下。而容器undertow和tomcat的配置是有一定的差别的。照搬Tomcat的日
2020-09-10 09:43:33
1509
原创 Go Http 使用案例
net/http包使用案例。GET、POST请求示例。get请求import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http")func get(id string) { client := &http.Client{} // 创建请求 req, _ := http.NewRequest( "GET", "https://csdn.com?id="+id, nil) // 添加请求头 req..
2020-08-29 23:08:30
499
1
原创 Redis 实现单位时间内限制频率功能
Redis 实现单位时间内限制频率功能1.使用场景1.重要日志每小时触发次数。2.限制登录次数。3.分布式部署情况下的上述情况…2.代码示例中为限制1小时内15次。/** * 每个人每小时限制触发次数 */private final int LOCK_TIMES = 15;// 自定义KeyString key = "Ltz:" + sid;// 获取已触发次数String sendUser = redisTemplate.opsForValue().get(key);
2020-08-16 22:51:58
1061
原创 SpringBoot MDC
SpringBoot MDC在程序中,日志一直是一个至关重要的部分,排查问题、统计数据…解决问题SpringBoot添加全局自定义日志链路信息。1.过滤器,拦截指定请求,可取出参数、请求头等信息,可根据业务自定义添加进日志进程(MDC)。2.时间拦截器,根据注解进行拦截,向进程日志(MDC)中,注入方法执行时间。3.具体业务,可自行向进程日志(MDC)中注入所需信息。1.MDCFilter请求过滤器,用于向MDC中添加请求头等信息。/** * 拦截请求信息,添加到日志 * *
2020-07-27 13:42:32
1312
原创 Feign透传请求头等
Feign透传请求头等在用Feign进行接口转发时,可能需要直接透传请求头。添加Feign配置@Configurationpublic class FeignServerAuthConfig { @Bean public RequestInterceptor requestInterceptor(){ return new FeignMyRequestInterceptor(); } @Autowired private ObjectFac
2020-07-20 17:36:34
1430
4
原创 前后端WebSocket使用注意事项
前后端WebSocket使用注意事项1.域名配置微信小程序硬性要求2.Https证书微信小程序硬性要求3.Nginx配置Nginx配置,跟普通接口不太一样。WebSocket需要一些特殊配置。如果是集群,记得配置会话保持或haspip4.后端后端我使用的是Netty-Socket-IO框架配合SpringBoot。后端代码可以看我的这批文章5.小程序端官网文档测试代码wx.connectSocket({// 小程序端,必须使用wss协议,也就是说服务器必须要配置https
2020-06-07 15:43:07
1392
原创 Java代码,给图片添加水印
依赖Hutool工具库,POM引入即可。官网<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.4</version></dependency>加水印代码ImgUtil.pressText(// FileUtil.fi
2020-06-01 18:09:02
1577
原创 ClickHouse修改表字段
ClickHouse修改表字段。Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 34: '$user_id' String AFTER chart_position. Expected one of: IF NOT EXISTS, compound identifier, identifier, column declaration, list of elements (version 20.4.2.9
2020-05-26 10:32:00
22276
原创 跨域测试代码
跨域测试跨域是前后端经常会碰到的问题,那么如何快速的定位这个问题呢?可以使用如下代码,进行测试,分别对目标地址,进行普通访问和跨域访问(前端处理跨域)。还可以显示出,响应时间。测试页面代码<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name=
2020-05-18 17:30:21
1367
原创 Git 开发规范
Git开发规范日常开发中,我们经常会跟Git打交道,可能服务器不一样,但是命令和规范基本都是一样的。一.常驻分支常驻分支为一个正常开发上线流程应该会有的分支。1.master/prod/production主分支,又称为生产环境分支,有时可能会使用(prod/production)来代替,生产环境的部署分支,生产环境相关操作,如:打包等应从改分支进行。2.dev全称(Develop),开发分支,我们正常的需求开发等,应该使用该分支。开发环境的部署和打包,使用该分支。3.pre全称(Pr
2020-05-18 12:44:46
1723
1
原创 使用Lambda统计List嵌套数据
使用Lambda统计List嵌套数据场景之前碰到过这样一种场景,有如下数据(JSON或List对象){ "dataList": [{ "userInfoList": [{ "id": 1, "idNumber": "1" }, { "id": 2, "idNumber": "2" }] }, { "userInfoList": [{ "i...
2020-05-06 13:54:41
2863
原创 SpringBoot限流拦截器(结合业务)
SpringBoot限流拦截器(结合业务)背景从网络安全和系统稳定性来看,限流是非常有必要的。一些网关,可以帮我们完成限流熔断。但是,在某些场景,当与实际业务相结合时,网关的限流也就不那么方便了。1.目的1.解决业务和限流合并的情况。如,同一个接口,每个用户,在一段时间(10秒)内只能请求几次(4次)。2.并且可以快速的调整这个限制的频率(动态修改)SpringBootRe...
2020-04-05 20:22:23
812
原创 Could not initialize class sun.awt.Win32FontManager
一.问题表现RuoYi框架,验证码加载不出来二.问题分析1.控制台报错2.查看问题由Could not initialize class sun.awt.Win32FontManager,可以看出,应该是JDK缺少字体导致。三.解决问题打开JDK,font目录C:\work\java\jdk1.8.0_131\jre\lib\fonts,添加字体。 重启项目,解决问题。四.字...
2020-03-15 14:51:32
1929
原创 BigDecimal类型转化为万或亿为结尾
BigDecimal类型 自动转化单位(万\亿)工具类import java.math.BigDecimal;/** * @author litong */public class NumberUtil { private static final String UNIT_STRING_WAN = "万"; private static final String UNIT...
2020-02-06 23:53:21
4279
2
原创 Java8 Lambda 使用总结
一、演示示例1.遍历List<Integer> integerList = new ArrayList<>();integerList.add(1);integerList.add(2);integerList.add(3);integerList.stream().forEach(integer -> { System.out.println(inte...
2020-01-21 13:18:14
845
原创 Ant Design Table Pagination案例
Ant Design Table完整案例包括表格,分页,请求数据,页面变动请求数据等…组件包括 table,pagination1. 代码import React from 'react';import {Table} from 'antd';import {getRecordList} from '../../api/recordApi';export default cla...
2020-01-09 15:13:32
6744
原创 Swagger-UI 自定义显示返回状态码
Swagger-UI 自定义显示返回状态码注: Swagger-bootstrap-ui 方法同样Swagger,作为一个在线文档,是非常好用的,正确的使用这个,可以使我们少些很多接口文档。1.问题背景:做为接口文档,那必然是要有,全局错误状态码说明的功能。而Swagger在参数,相应,都用相应的注解,同样,在状态码也是有相应的注解的。默认的状态码,只有200,如下:2.单接口...
2020-01-03 16:45:43
11682
7
原创 自己实现注解式权限校验(SpringBoot)
权限校验(SpringBoot注解式)权限校验是很多情况都会用到的,结合Java注解和拦截器,直接在Controller层的方法上添加一个注解,可以无侵入式的进行权限校验。一.Java注解1.RequestMapping我们打开一个最常用的Spring注解可以看到,RequestMapping注解上,还有几个注解,分别代表①Target:注解目标(如:可以在方法、类、参数中使用)...
2019-12-20 10:47:29
4854
2
原创 Netty-SocketIO 集群解决方案
Netty-SocketIO 集群解决方案Netty-SocketIO作为一个Socket框架,使用非常方便,并且使用Netty开发性能也有保证。但是,我在使用Netty-SocketIO框架时,却发现,国内的资料比较少,虽然有些Demo级别的技术分享,但是关于集群解决方案,并没有什么较好的解决方法。所以,博主结合GitHub上的Issues,实现了一种集群的解决方案。一. 解决方案原......
2019-12-12 13:41:00
12286
12
SpringMVC简易项目
2019-11-22
Vue TodoList完整案例
2018-09-05
Vue TodoList案例
2018-09-02
Node多人博客系统
2018-08-22
Node学生管理系统(Express+MySQL)
2018-08-12
Node学生管理系统(Express+MongoDB)
2018-08-12
NodeChat-express
2018-08-06
Nodejs简易聊天室
2018-08-02
SSM简易项目(增删改查)
2018-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人