自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 利用Mybatis获取数据库表结构信息并转换【兼容多种数据库】

运行以上代码后,你将获得数据库中所有表的结构信息,包括表名、表类型、列名和列类型。你可以根据需要进一步处理这些信息,比如将其转换为对应的Java类或XML配置文件。在运行代码之前,你需要先创建一个mybatis-config.xml配置文件,其中包含数据库连接信息和其他Mybatis相关配置。你可以使用Mybatis提供的DatabaseMetaData类来获取数据库表结构信息。以上代码中的数据库连接信息请根据你的实际情况进行修改。

2024-01-29 10:08:30 1018

原创 调整COSWriter解决X-easypdf / PDFBOX生成大量数据时OOM问题

调整COSWriter解决PDFBOX生成大量数据时OOM问题

2023-11-18 13:01:01 608

原创 IDEA-插件开发踩坑记录-第四坑-Action介绍与工具栏、弹出菜单中运用

IDEA插件开发,如何使用Action,如何做一个Maven一般的工具栏,如何在弹出框中复用Action,本文将告诉你一个答案。

2022-08-05 18:59:22 2893 1

原创 IDEA-插件开发踩坑记录-第三坑-自定义事件

IDEA插件开发的消息传递机制介绍与运用。

2022-08-03 17:34:31 694

原创 IDEA-插件开发踩坑记录-第二坑-Action的Icon死活加不上去

intellij idea plugin Action的Icon 无法添加

2022-07-19 19:05:48 1101

原创 IDEA-插件开发踩坑记录-第一坑-创建gradle工程编译失败

IDEA插件开发,第一步编译就失败,可能原因与如何解决?

2022-02-10 11:21:43 25393 8

原创 ElasticSearch健康检查localhost:9200 not reachable

项目场景:项目使用了ElasticSearch【后续简称Es】,配置了Es的相关配置,通过spring的健康检查端点判断服务运行情况。项目未通过reactor的方式使用Es。问题描述:系统配置文件配置如下:​​spring: elasticsearch: rest: uris: http://xxxx:9200,http://xxxx:9200,http://xxxx:9200 username: elastic password: ${pw

2021-06-23 11:59:51 12088

原创 lombok未正常生效问题排查-maven编译问题排查

问题报错-maven编译报错[INFO] Scanning for projects...[INFO][INFO] ------------------------------------------------------------------------[INFO] Building Tailgate 1.0-SNAPSHOT[INFO] ------------------------------------------------------------------------[INF

2021-02-21 19:06:12 3934 2

原创 使用java构建一个挡板程序-6-使用beetl模板扩展include方法实现默认模板

扩展beetl方法步骤扩展includeTag:实现方式:继承IncludeTag,当目标模板不存在时调用父类加载模板。参数说明: 1:目标模板名称 2: 额外参数3: 默认模板java扩展函数实现package cn.twh.wall.beetl.tag;import org.beetl.core.exception.BeetlException;import org.beetl.ext.tag.IncludeTag;/** * include 某个文件,如果模板存在则引入,不存在

2021-02-07 21:24:40 584 1

原创 使用java构建一个挡板程序-5-使用webFilter实现挡板服务URL配置化

实现方式#mermaid-svg-iQqdtqZH5halLtbC .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-iQqdtqZH5halLtbC .label text{fill:#333}#mermaid-svg-iQqdtqZH5halLtbC .node rect,#mermaid-svg-iQqdt

2021-01-31 19:42:26 2191 5

原创 如何让apollo支持数据库密码加密

运行背景apollo版本:1.2.0实现方式如下:1、拉取github中1.2.0版本的代码2、增加jasypt-spring-boot依赖【版本APOLLO已经控制,无需指定版本】<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot</artifactId></dependency>

2021-01-24 20:38:54 1753

原创 Go-Gateway-3:参数配置化

连续上班14天,先欠着

2021-01-17 22:05:50 174 1

原创 Go-Gateway-2:使用Go接入tcp和udp

TCP、UDP测试程序package mainimport ( "bufio" "fmt" "net")/**使用Go本身支持的http包构建http服务器。*/func main() { testClient("tcp","requestMessage","8021") testClient("udp","requestMessage","8031")}func testClient(connectType string,req string,port string) {

2021-01-10 22:43:51 573

原创 Go-Gateway-1:使用Go接入http和https

自研自学Go网关的第一步:写个测试程序第一步:HTTP服务器如何用go接入http请求并获取相关参数呢?代码如下:package mainimport ( "gateway/src/main/handle" "net/http")/**使用Go本身支持的http包构建http服务器。 */func main() { //注册一个处理器函数handler和对应的模式pattern http.HandleFunc("/", defalutHandler.Index) http.

2021-01-03 19:58:18 1019

原创 alertmanager的配置说明

一、如何使用自定义配置文件启动时指定alertmanager的配置文件./alertmanager --config.file=alertmanager.yml 配置项说明<duration>:与正则表达式匹配的持续时间 [0-9]+(ms|[smhdwy])<labelname>:与正则表达式匹配的字符串 [a-zA-Z_][a-zA-Z0-9_]*<labelvalue>:一串unicode字符<filepath>:当前工作目录中

2020-12-24 11:21:43 1838

原创 Go-Gateway-0:序章,从零开始做Go网关

为什么使用Go做网关Go特点类似于C+Python:高效+简单的代码实现复杂逻辑包含垃圾回收机制【自动回收内存,不需要程序员关心。】天然支持并发【Go设计时就特别关注了如何利用多核CPU,这也是最重要的一个特点】部署方便,可以打包成二进制文件。学习一下新语言。需要实现的功能点分布式部署多协议接入:HTTP、HTTPS、TCP、UDP灵活便捷的过滤器:全局过滤器、配置化的过滤器熔断限流鉴权灵活的路由功能多协议接出:HTTP、HTTPS、TCP、UDP网关管理、服务分离.

2020-12-20 21:02:02 1253

原创 mongodb合并集合超好用的聚合函数merge

merge的介绍 merge是mongodb 4.2版中的新功能。merge可以将聚合的结果输出到一个新的集合或者与已存在的集合做合并。 mongodb4.4的版本允许输出到原有的集合。 版本查看可以通过 db.version();merge的语法{ $merge: { into: <collection> -or- { db: <db>, coll: <collection> }, // 目标集合,不存在时会新增...

2020-12-13 21:13:19 6991 1

原创 Go-3:Go语言的并发

go线程-GO ROUTINEGo 程(goroutine)是由 Go 运行时管理的轻量级线程,使用方式:package mainimport ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) }}func main() { go say("go routine say world")

2020-12-06 23:33:41 120

原创 Go-2.1:Go语言的基础学习

数组切片package mainimport "fmt"func main() { intArray := []int{0,1,2,3,4,5} fmt.Println(intArray) //切片 fmt.Println(intArray[:]) //取前2位 fmt.Println(intArray[:2]) //取2位后数据 0 1 2 fmt.Println(intArray[2:]) //取2-3位数据,包前不包后 fmt.Println(intArray[2:3

2020-11-29 22:24:22 153

原创 spring-boot-logback-SizeAndTimeBasedRollingPolicy-totalSizeCap失效问题排查

前提说明现状使用spring-boot自带的logback作为日志工具: <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} [%X{request

2020-11-24 17:46:37 2112 1

原创 Go:IdeaGo启动报错Failed to create JVM

问题情况出现之前做了什么 出错之前通过这个功能增加了个错误的vm参数:-agent:xxx.jar怎么办?百度了一圈,都是让删掉:C盘\用户\用户名\.IntelliJIdea2019.3\config\idea64.exe.vmoptions然而,我这并没有这个文件。百思不得其解,重装等各种方式都试过还是不能用。思考之:1、这明显是一个用户下的配置文件,因此肯定是配置文件使用到了用户级别的,改idea下的配置文件肯定是没用的。2、明显是因为...

2020-11-22 22:47:33 527

原创 Go-0:Go语言的简要介绍

Go的学习方向区块链方向【去中心化,人人都可以操作数据库。】 Go服务端/游戏软件工程师【C、C++可以做的,Go都可以做,而且效果更好】,语言优势点: 数据处理性能高 高并发 具备强大的生态 稳定可靠 Go分布式/云计算Go的关键版本2007年Go原型版本 2015年 Go1.5移除了最后残余的c代码 2020年Go1.15版本【本博客发布前Go的最新版本。】Go语言的特点Go特点类似于C+Python:高效+简单的代码实现复杂逻辑 包含垃圾回收机制【自动回收内

2020-11-15 22:45:51 1291

原创 Go-2:Go语言的基础学习

Go 语言的基础组成有以下几个部分:包声明 引入包 函数 变量 语句 & 表达式 注释样例程序:// 包名package main// 引用import "fmt"// 函数func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!")}...

2020-11-08 23:04:53 137

原创 Mogodb-GridFs问题排查

问题情况说明 测试功能时发现:Mogodb某天在操作文件时异常缓慢。程序和代码都没有任何修改。问题排查及分析分析变动的点: 最近一直有在做功能验证,mongodb的数据量一直在上涨 第一次发现这个问题的时候做的操作:删除fs.files、fs.trunks【以前也这么干过】 进入mongodb - linux服务器,执行top后发现mongodb的CPU消耗极高【4核CPU占了370%】 在mongo主节点执行如下命令: mongo use admin db.a...

2020-11-06 16:40:21 456

原创 JVM垃圾回收器推荐

JVM垃圾回收器前言JAVA分代回收,垃圾回收器使用情况图:(A)、图中展示了7种不同分代的收集器: Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1;(B)、而它们所处区域,则表明其是属于新生代收集器还是老年代收集器: 新生代收集器:Serial、ParNew、Parallel Scavenge; 老年代收集器:Serial Old、Parallel Old、CMS;...

2020-11-06 11:31:47 71

原创 Sring-Kafka-批量消费

批量监听器工厂:batchFactory从1.1版本开始,你可以使用@KafkaListener 的方式批量拉取消息。自定义方式配置Kafka监听器工厂后,我们就可以通过工厂创建对应的批量监听器了。下面是一个配置样例:方式一:@Beanpublic KafkaListenerContainerFactory<?, ?> batchFactory() { ConcurrentKafkaListenerContainerFactory<Integer, String&gt

2020-10-29 11:44:33 569

原创 服务正常启动,但是应用一直无法正常注册到Eureka问题排查。

问题现象:Eureka注册的服务短时间内Down但是服务正常可用。我的排查步骤:检查网络是否正常:正常 检查服务是否正常:交易正常发通。但是服务处于down状态 检查服务本地运行是否正常,服务是否注册到Eureka:正常 检查异常服务器日志:发现警告:Free disk space below threshold,Abailable: 0 bytes(threshold: xxxx bytes) 检查磁盘空间占用 : df -h 发现当前盘空间不足。解决办法:清理磁盘,确保空..

2020-10-26 17:52:48 1516

原创 Go-1: Go语言的hello,world!

Go语言的特色安装Go开发环境【windows】下载安装包: 安装包下载地址为:https://golang.org/dl/。 如果打不开可以使用这个地址:https://golang.google.cn/dl/。 如果不能翻墙,那就用软件站的吧:https://www.cr173.com/soft/420679.html 傻瓜式一键安装【注意下安装路径】 配置环境变量:我的电脑-》右键 此电脑-》属性-》高级系统设置-》环境变量-》PATH-》增加 ;c:\Go\bin【有.

2020-10-25 19:52:15 326

原创 不同环境字体原因导致的奇怪BUG

前提说明需要用到字体文件的接口图形验证码接口 生成excel文件现象某天打版后发现验证码和excel生成文件接口均发现异常。 日志中出现 : ArrayIndexOutOfBoundsException:0 且数组越界是由于CompositeFont.getSlotFont导致的寻找BUG做的工作寻找近期改造点 修改的应用代码:回滚代码,发现bug依然重现。本地正常,服务端异常。 前端有做调整:未调整异常接口相关代码。 进一步分析得出结论:问题在于运行环境。 寻找近期.

2020-10-18 19:48:33 283

原创 MongoDb-GridFs-文件清理方案

fs.files集合中的内容{ "_id" : 文件ObjectId, 【默认索引字段】 "length" : 文件描述文档大小, "chunkSize" : 文件大小, "uploadDate" : 上传时间, 【默认索引字段】 "md5" : 废弃的字段,无视即可, "filename" : 文件名【清理策略中用做文件类型】 "contentType" : 废弃的字段,无视即可, "aliases" : 废弃的字段,无视即可, "metadata" : 文件描述...

2020-10-11 20:09:44 662

原创 MongoDb-GridFs-分片

前置要求MongoDb需要使用Shard方式部署 需要安装好 mongod、mongos、replica set使用GridFs存储文件GridFs存储文件的方式GridFs使用两个集合存储文件:files、chunks。如果不做指定,默认会使用前缀【fs.】files其中files是文件元数据,存储的是文件的一些信息。不建议分片,存储的数据就是一个简单的doc,数据量较小,如果需要使用分片,建议用_id分片。{ "_id" : 文件ObjectId, 【默认索引字段】

2020-09-27 21:04:55 396

原创 使用java构建一个挡板程序-4-include方法扩展,实现默认加载。

在使用include方法的时候,如果使用不当,进场会出现对应模板无法找到的问题。有些情况,我们也想在没有指定模板的情况下能有个默认返回。这个使用扩展include方法是一个很不错的选择。实现beetl扩展需要做以下步骤:编写对象,实现IncludeTag类 在beetl.properties上增加配置/** * include 某个文件,如果模板存在则引入,不存在则使用默认的。【默认的不存在则抛出异常】 * 父类参数 : 1:模板名称 2: 额外参数 * 本类增加参数 : 3: 默认模.

2020-09-19 18:24:28 722

原创 使用java构建一个挡板程序-3-mongoDb与beetl联动

在构建beetl模板引擎时,使用自定义的加载器:自定义加载器使用方法@AutowiredMongoResourceLoader mongo;String PREFIX_MONGO = "mongo:";......// 使用组合加载器CompositeResourceLoader resourceLoader = new CompositeResourceLoader();resourceLoader.addResourceLoader(new StartsWithMatcher(Bee

2020-09-12 18:51:05 290

原创 使用java构建一个挡板程序-2-简单权重算法

计算响应下标方法总体思路:传入 N个int值,计算其和。获取一个int随机数,并判断当前随机值是否在该下标中。例如传入: 1,5,9则 sum=15。随机【0-15】假设得到8则: if(8<大于1) 返回 下标0 ,if(8<1+5) 返回1,if(8<1+5+9)则返回2,明显最终返回下标是2。 同理:0-1:返回 0;2-6 返回1;7-15 返回2;方法如下:/** * @param weight 权重 , 总和不能超过int.max且大于0 ..

2020-09-05 18:57:07 1019

原创 使用java构建一个挡板程序-1-总章

为什么我们需要挡板程序?在应用开发过程中难免会有发送短信验证码、调用人脸识别、压力测试等需要调用外部接口的情况。大多数外部接口都会有调用限制或者需要收费等。如果我们需要进行压力测试、目的接口实际未完成开发或者对方不支持在当前开发环境测试就会有诸多不便。因此一个挡板应该满足如下要求:接入简单、灵活 挡板高性能、高可用,能横向扩展 部署简单,支持热部署 能够实现简单的业务逻辑 响应可控、可灵活切换。或特定情况响应特定内容。实现方式依赖组件列表:spring-boot-starter

2020-08-29 23:05:15 4386

原创 Mysql高可用-主从复制

常见高可用方案MySQL的各种高可用方案,大多是基于以下几种基础来部署的:基于主从复制; 基于Galera协议; 基于NDB引擎; 基于中间件/proxy; 基于共享存储; 基于主机高可用;在这些可选项中,最常见的就是基于主从复制的方案,其次是基于Galera的方案。其余几种方案在生产上用的并不多。前期准备准备机器资源 确认服务器版本 确认需要的mysql版本 下载mysql:https://dev.mysql.com/downloads/mysql/ 主备机器放入t

2020-08-23 21:36:41 205

原创 小程序学习日记-微信7-摇手机抖一抖功能模拟

微信提供的陀螺仪相关方法提供的方法:陀螺仪方法:wx.startGyroscope(Object object):开启陀螺仪监控 wx.stopGyroscope(Object object):关闭陀螺仪监控 wx.onGyroscopeChange(function callback):监听角度变化 wx.offGyroscopeChange(function callback):关闭角度变化从字面上理解:提供的是监控陀螺仪变化的能力。手机震动相关方法:wx.vibrateSh

2020-08-16 23:09:37 1318

原创 小程序学习日记-微信6-用数据存储做一个简单的后端数据缓存

微信的数据存储功能分析存储每个微信小程序都可以有自己的本地缓存,可以通过wx.setStorage/wx.setStorageSync、wx.getStorage/wx.getStorageSync、wx.clearStorage/wx.clearStorageSync,wx.removeStorage/wx.removeStorageSync对本地缓存进行读写和清理。微信数据存储提供的能力:异步获取本地缓存数据、同步获取本地缓存数据合理使用微信缓存,能大大减少对服务端的压力。隔.

2020-08-09 21:52:07 371

原创 小程序学习日记-微信5-蓝牙方式发现共享单车蓝牙设备

实现思路:开启蓝牙适配器 启用蓝牙发现服务 增加监听器,监听蓝牙设备。 发现一个共享单车后,获取蓝牙数据并展示到控制台。 关闭蓝牙发现服务 关闭蓝牙适配器为了实现这个功能准备实现方法:文件 blueTooth.js - openBluetoothopenBluetooth: function () { console.log("开始启动蓝牙"); wx.openBluetoothAdapter({ complete(){ console.l

2020-08-02 22:25:42 812

原创 小程序学习日记-微信4-蓝牙功能简介

微信小程序蓝牙功能运作流程:通过这个图,我们可以知道,我们如果需要使用蓝牙功能,就应该调执行以下方法:openBluetoothAdapter - 启用蓝牙适配器:注意,非开启手机蓝牙功能,只是开启微信小程序使用蓝牙能力。 startBluetoothDevicesDiscovery - 启用蓝牙链接发现功能 -特别注意:及时关闭发现,否则非常耗电。通过以下几种方式获取当前蓝牙相关信息。getConnectedBluetoothDevices-获取已连接数据 getBluetoothD

2020-07-26 23:57:27 1045

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除