自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (3)
  • 收藏
  • 关注

原创 springboot在代码中动态修改application.properties配置的参数

目标:在spring启动加载完配置后,我们自定义一个Environment后置处理器,来修改配置。背景知识:1、spring中配置可以从Environment中获取。2、ApplicaitonContext接口包含getEnvironment功能。3、EnvironmentPostProcessor接口是Environment的后置处理器4、springboot的spring.factorys文件可以自定义EnvironmentPostProcessor实现。方法:1、在项目resourc

2020-07-25 12:18:23 16862 9

原创 如何使用arthas查看成员变量(基于Spring)——java查看运行中成员变量值

如何使用arthas查看成员变量(基于Spring)查看运行的代码 jad com.example.ClassName查看对象及属性。备注:我搜了一下没找到合适方法直接查看对象的成员变量,自己发现了这样一个办法,一般我们用Spring时,可以写一个Holder类,实现ApplicationContextWare接口,这样我们在Spring加载后可以获取其context变量,context....

2020-04-27 11:00:41 20837 2

原创 基于SQL语句的数据脱敏实现方法

本文讲解如何实现一个基于sql的数据脱敏算法。

2024-03-15 13:20:07 1173

原创 【梳理】k8s使用Operator搭建Flink集群(高可用可选)

本文内容来源于Flink官网,进行翻译、简化、整理,供大家参考~

2024-03-08 15:04:29 2174

原创 java连接调用goinception

goinception是一个sql审核工具,官方提供了python和go语言的调用demo,今天尝试用java调用却提示“Statement.executeQuery() cannot issue statements that do not produce result”,反复确认sql没写错。后来想可能是版本问题,测试一番果然如此。我一开始使用的mysql-connector-java版本是8.0.31,驱动类为。,测试发现8.0.31可能是不支持,调用总是报错。后来改为8.0.11,驱动类为。

2023-02-10 10:51:26 761

原创 服务网格kiali开发环境搭建问题解析

在windows上配置为istio使用的kiali开发环境;setup kiali for istio on windows

2022-11-30 16:29:50 1062

原创 微服务日志追踪,Skywalking接入TraceId功能

微服务日志追踪

2022-10-11 13:11:17 6543

原创 【Jenkins插件开发7】自定义任务功能——终止僵尸任务

文章目录添加功能菜单到每个任务前后台通信啥是僵尸任务Tips: 先说个感想,要开发Jenkins插件,真的要多看其他插件的源码。添加功能菜单到每个任务先看效果,如下图。一个普通的任务,我们想在侧边栏加上自己的功能。官方给的Demo里,讲的是如何在build,也就是每次构建的侧边栏加功能菜单。其实差不多,先需要一个Action。build里加action是在perform方法中addAction,而我们需要继承一个扩展点类,在其createFor方法中返回action,具体如下:添加扩展点,注意

2021-11-16 10:56:39 1120

原创 【Jenkins插件开发6】调试技巧

文章目录远程Debug在window上执行shell远程Debugjava提供了远程调试的方法,网上大把教程,很简单看看就行,就两步。首先,在jenkins启动的地方,加上参数,如:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war其次,从idea上配置remote运行,打上断

2021-11-12 16:26:43 1822

原创 【Jenkins插件开发5】在Slave上执行任务(获取从节点文件内容)

背景:要知道Jenkins是主从的,集群部署的时候,任务都是在从节点执行的。需求:前边我们的插件都是在Master上执行的,怎么获取从节点Worksapce中的文件呢?或者如何在从节点执行任务呢?文章目录获取从节点的VirtualChannelBuilder实现Serializable接口实例:获取从节点Workspace下文件的内容获取从节点的VirtualChannelVirtualChannel是Jenkins的类,其中有V call(Callable<V,T> callable)

2021-11-12 08:30:00 979

原创 【Jenkins插件开发4】自定义后台接口

知道怎么改网页了,那ajax想调用后端接口,接口怎么写?步骤如下:继承Plugin类package io.jenkins.plugins.rest;import hudson.Plugin;import hudson.model.Api;public class HelloPlugin extends Plugin { public Api getApi() { return new HelloApi(this); }}实现Api类public cl

2021-11-11 14:40:50 637

原创 【Jenkins插件开发3】配置全局参数

文章目录1. 扩展点类2. 前端页面3. 配置入口4. 配置页的部分5. 使用方法背景:插件功能写好了,我们肯定回想把url name password之类的东西,独立于代码之外,可配置。就像Spring的application.yml一样,这么做:1. 扩展点类写一个类继承GlobalConfiguration,使用扩展点注解@Extension@Extensionpublic class HelloConfig extends GlobalConfiguration { public

2021-10-29 08:00:00 409

原创 【Jenkins插件开发2】前后台数据传输基础

文章目录如何保存配置如何显示后台数据如何在页面执行js如何提示错误,并中断build如何保存配置上一篇HelloWorld生成的项目中默认包含了一个Build的扩展,Jenkins任务的配置页可以看到如下图。我们复制一下url,修改configure为``````config.xml。我们按提示输入名字"Victor刘",然后保存,再打开刚才复制修改的xml地址。如下图:这些都是基本的,过往的文章都说了,我就不多说了,我说说原理:这样的扩展包括一个jelly页面和后台类,后台类的变量对应一个

2021-10-27 03:00:00 344

原创 【Jenkins插件开发1】HelloWorld

文章目录第一部分:照葫芦画瓢1. 首先使用命令在本地创建项目骨架2. 用idea打开并启动项目第二部分:遇到的问题1. mvn命令创建archetype失败2. maven依赖下不下来3. 启动报错4. 怎么修改Jenkins版本第一部分:照葫芦画瓢1. 首先使用命令在本地创建项目骨架交互方式mvn archetype:generate -Dfilter=io.jenkins.archetypes:或非交互方式(可以修改-DartifactId后的项目名)# mvn archetype:g

2021-10-25 16:55:53 473

原创 cnpm和sonar让我的Jenkins内存泄漏(OOM)了

错误信息:FATAL: Remote call on slave-10-133-13-51 failedjava.lang.OutOfMemoryError: GC overhead limit exceeded问题如下图:描述:今天换了台机器跑jenkins,nodejs项目,用yarn安装依赖包,结果死活下不下来,于是我换成了cnpm,可以。但是再用sonar扫描后,最后提示成功了,sonar上也看到质检结果了,但是却提示OOM了。解决过程:去虚拟机jps jstat命令查看jenk

2021-09-23 17:28:48 523

原创 [Jenkins备份]-集团使用Jenkins后,如何备份?

背景:在集团统一使用一个Jenkins后,数据变得重要,不得不需要备份。问题:Jenkins的数据都在Jenkins_home下,但是此文件下还会存放构建记录,和maven构建的jar包,如果直接备份Jenkins_home,体积太大。解决方案:rsyn同步文件 + crontab定时器首先利用rsyn同步功能替代cp,来复制一份jenkins_home,rsyn可以通过eclude参数来排除不想要的文件夹。选一个夜深人静的时间,半夜2点,crontab是linux上的定时装置,来执行我的备份

2021-09-16 15:39:57 417

原创 记一次CICD中的编译错误 duplicate class: XXXX 以及 cannot find symbol: method getXXXX

P话故事:一天,我正美滋滋的享受着从开发转到运维的工作,突然有人找到我,告诉我流水线编译失败了。我看了一眼日志,duplicate class: xxxxxxxxxxxx cannot find symbol: method getBindingPerson()。这是有两个错误啊。本能反映,噢肯定是jar包冲突,版本冲突了,问:“你本地编译能过吗,是不是版本冲突啊。。。。。。。”结果不是。------正经的分割线-------现象:java maven项目,本地windows编译正常,J

2021-09-10 15:41:51 724

原创 [Jenkins租户隔离]-多团队如何使用一个jenkins(2/2)——凭证

问题:多团队使用一个Jenkins时,必然有团队隐私的凭证,怎么做呢?答案是:使用文件夹创建团队自己的上下文。解析:了解一个Jenkins的概念,即上下文。下面引用凭证插件的说明文档:Jenkins 中的上下文Jenkins 实现了一个分层的上下文模型。Jenkins 中的每个上下文都有一个父上下文链,最终通向根上下文。根上下文是 Jenkins 本身。插件可以定义额外的子上下文,例如Folders plugin添加文件夹上下文,但默认情况下 Jenkins 从根上下文提供以下子上下文:

2021-08-11 09:39:58 268

原创 [Jenkins租户隔离]-多团队如何使用一个jenkins(1/2)——权限策略

一、背景需求是Job/Item隔离。即各个团队可以创建自己的job/item,别人无法看到。ps:我全文用了Job一词,在Jenkins中其实是Itemps:自己研究了几天,从一开始以为Jenkins权限支持的不好,到 Role-based Authorization Strategy插件,再到LDAP、组权限等,其实发现最简单的就在眼皮下。二、步骤安装插件 Matrix Authorization Strategy Plugin进入 Configure Global Security

2021-08-05 11:16:27 790

原创 [质量检查jekins+sonar+jacoco]一次搞定所有Java项目的覆盖率扫描

须知:编写java代码后,通过单元测试可以了解代码覆盖率等指标maven可以配置jacoco对项目进行扫描,生成报告文件jacoco.xmlsonar可以识别jacoco.xml文件,对报告进行更好的UI展示,跟踪质量晋升曲线等。起因:使用jacoco插件来生成mvn test报告,需要在每个项目代码中增加配置。其中的配置是有共性的,不需要每个项目的开发者都掌握配置方法,这个重复工作可以交给项目管理来做,Jenkins单任务,流水线之类都可以。计划:我们主要通过jenkins的Sh

2021-07-19 17:05:08 1462 1

原创 Git识别项目的语言类型,及文件占比。

最近在做代码分析,想知道一个git仓库的语言类型,相信大家都见过这个:图中列出了不同的文件类型在代码仓中的占比,那如何实现这个功能呢?结果研究,我写了一个脚本如下:# git查询文件后缀的数量,用以区分项目使用的语言。# 列出git的pack文件索引# git rev-list --objects --all \# 只输出第二列文件名# |awk '{print $2}' \# 排序去重# |sort|uniq \# 按照‘/’分割并取出最后一个,即文件名# |awk -F/ '{

2021-07-05 15:50:39 1476 2

原创 Jenkins执行Shell时隐藏密码docker登录密码

在CI、CD过程中,有时需要将Jenkins的构建日志展现给用户,此时涉及到docker login等命令时,会用到密码。如果想要隐藏个人用户的密码,那改怎么办呢?介绍一个Jenkins插件:MaskPasswords使用方法如果时全局账号,密码,设置比较方便,看文档即可。还有一个更通用、强大的功能,那就是正则表达式:以docker login为例docker login -u username --password 123如上命令,123密码会在日志中暴露,经过处理,我们理想的结.

2021-05-31 18:18:07 1692

原创 [如何验证Git密码]你的Git密码输错了吗

在做DevOps项目时,有从其他git地址导入项目的需求。如果是非public的项目需要用户名和密码,然而gitlab并未提供相关验证方法。其实Git本身就提供了验证的方法,这隐含在了Git的http协议中。git clone时,client端需要先获取服务器的一个静态文件,然后再进行具体操作。也就是说,我们通过一个GET请求,根据返回状态码即可区分是否有权限且用户名密码正确。HTTP GET请求如下:// name为用户名,pwd为密码// @后面是git地址// 静态文件的地址实际为 /

2021-05-08 09:43:43 1606 1

原创 jmockdata——java单元测试利器

单元测试时,总需要生成一些测试数据,String、Int、float等,甚至是复杂对象。<dependency> <groupId>com.github.jsonzou</groupId> <artifactId>jmockdata</artifactId> <version>4.2.0</version></dependency>jmockdata是一个第三方的jar包,我最近使

2021-04-19 17:49:01 1373

原创 [Demo示例]Docker构建本地Mysql主从库——手动创建。

缘起:想在本地使用Docker创建Mysql主从库,后续要实现全自动化,本次先手动实现功能。步骤:下载镜像docker pull mysql启动两个mysql容器。此处MYSQL_ROOT_PASSWORD是重点,设置密码为root否则无法启动第一个:m1docker run -p 3306:3306 --name m1 -e MYSQL_ROOT_PASSWORD=root -d mysql第二个:slave1docker run -p 3307:3306 --name slave1

2021-02-04 15:31:21 72

原创 [项目间复用——发布到Maven] MyBatis全局枚举Starter

缘起1、某次面试被问到:“你工作这么久,不同项目间,代码不能复用吗?”2、面试经常被问到:“你自己写过Starter吗?”结果说的,有道理,回头看了一下自己,确实没有注意总结成果。于是兴起,决定把之前的一个小功能封装成Starter,并上传到Maven的中心库。说明代码,很简单,稍作修改,使其符合SpringBoot的Starter。目前1.0.1正在发布中,1.0有问题,发版的时候忘改包名了,跑不起来。大家可以自己尝试一下。还是很加zhuang分bi的。技术介绍地址:[如何提高代码优雅性

2021-01-27 15:03:42 78

原创 [如何解决线上问题——查看变量]如何用MAT工具查看成员变量

很久之前写过一个,如何用arthas查看成员变量这次介绍一下更通用,但稍微麻烦的点的办法,使用MAT查看堆对象。1、使用命令导出堆日志:jmap -dump:live,format=b,file=t.hprof [pid]2、用MAT打开t.prof文件,点击"Histogram"打开类的面板,在第一行输入要查看的类名进行筛选。右键List objects,会列出所有对象,选outgoing,然后看下图操作吧:...

2021-01-22 10:51:30 2740 1

原创 [提高开发速度] mybatis generator 这样用很强大

最近研究mybatis generator源码,发现了通过Plugin接口可以修改生成的文件,进一步研究发现也可以自定义mapper、xml、model以外的任意java类,比如service、controller等。现在介绍生成service接口的办法:1、首先需要再mbg的xml配置文件中增加Plugin实现,如:ServicePlugin<generatorConfiguration> <context> <plugin type="cn.test.confi

2021-01-18 09:15:55 252 1

原创 [如何提高开发速度——基础代码生成器]mbg自定义lombok注解@Data

目标让mbg生成的Model类自带@Data注解,当然也可以是其他注解。背景知识1、mbg即MyBatis Generator,是mybatis的逆向工程工具,可以根据数据生成Model类、Mapper.java及xml等2、lombok,通过@Data注解配合插件,可以省略掉setter\getter方法。原理mbg的Plugin接口定义了代码生成过程中的生命周期,我们实现Plugin接口或者继承PluginAdapter类可以在各个节点修改配置,使符合我们希望的结果。步骤一:xml配置文件

2021-01-13 17:00:06 412

原创 没有修改表,却Waiting for table metadata lock

网上关于Waiting for table metadata lock锁表的解答很多,大多关注的是事务执行中,使用了改表语句导致的,可能会容易忽略另一种情况,就是我遇到的:数据库备份,导出数据时,也会引发此问题。...

2021-01-05 10:35:31 68

原创 HikariCP流程,一图概括了解(源码入门)

【思考】1、连接池作用:估计都知道,保存数据库连接,避免下次请求时再新建耗时。2、连接池存什么? 平常可能不太注意,仔细翻翻源码稍微思考一下就知道了。Mysql连接是mysql-connector-java.jar提供的,他给我返回Connection实例。所以连接池存的就是Connection实例,高效的提供给多线程使用。3、那到底跟我们自己List存一下有什么区别呢?也就是连接池解决什么问题、如何高效:多线程时,每个线程使用一个Connection,可能有100个线程同时getConnectio

2020-12-09 17:01:04 431

原创 Jcmd查看类对象大小

命令是:jps|grep CommandTest|awk {'print $1'}|xargs -I '{}' jcmd {} GC.class_histogram|grep CommandTest作用是:启动CommandTest类,并查看它占用的内存大小。解析:1、CommandTest类:public class ConcurrentMapTest { int a; int aa; int aaa; public static void main(St

2020-11-18 10:51:11 260

原创 [如何提高代码优雅性——枚举] Mybatis枚举全自动配置

配置好的项目是怎么样的:1、新建表、MGB生成Mapper.xml2、新增枚举类 class XXXEnum implements DbEnum{…}3、修改POJO实体属性类型为XXXEnum4、完成。注:这样配置后,新增枚举是很简单的,且无需修改Mapper.xml,resultMap|resultType都有效,插入、查询都自动转换枚举类型。实现方式:1、myBatis的处理器typeHandler、自定义的枚举类接口DbEnum2、springBoot配置handler(ap

2020-11-13 13:26:31 395

原创 寻找冲突的hashCode,以验证HashMap原理。

缘起在看HashMap的时候想debug跟踪一下逻辑执行,那就需要冲突的hashCode,那怎么找呢?HashMap原理先了解了一下HashMap何时冲突HashMap中用一个Node[] table数组来储存数据,Node实现了Map.Entry接口。Map.Entry是KV键值对,Node则扩充了K的hash值,和next下一个节点。当i = hash & table.length-1相等时,即为哈希冲突。冲突时,node会以链表的形式,也就是next指向下一个Node来储存。当

2020-10-28 13:47:43 115

原创 [Java学习思路与工具]springboot官方demo@Scheduled计划任务

查看官方的计划任务demo1、实现定时任务只需要两步:”@EnableScheduling标注启动类“和"@Scheduled标注方法"@SpringBootApplication@EnableSchedulingpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}

2020-07-29 10:10:09 137

原创 [Demo示例]Docker搭建zookeeper集群

需要linux主机,安装docker,下载zookeeper镜像zookeeper集群需知zookeeper集群至少需要3个节点,每个节点保存全量数据,即内容完全相同。其中一个崩溃后,只要节点数大于3个则可以继续使用。zookeeper集群只需要修改两个地方,然后各自启动即可:1、每个节点的配置文件zoo.cfg,列出每个节点地址server.X=...,其中288*端口号随意什么都行...

2018-12-19 15:56:32 157

原创 [Demo示例]Docker搭建redis cluster集群,外网可访问

目标在linux主机是,使用Docker搭建redis cluster集群(含主从),使用本地java访问redis集群本文不同1、使用redis5.0的redis-cli --cluster命令替换老版本redis集群创建命令redis-trib.rb,因此过程中不需要ruby支持。2、百度教程中docker搭建的集群大都可以在宿主机器中访问,但本地java调用时,往往因为ip问题无法访...

2018-12-18 14:28:09 3148 1

原创 [Demo示例]docker模拟基于SpringBoot的简单分布式web应用系统

准备一台linux系统,安装docker,nginx目标使用SpringBoot创建一个web应用,使用docker一次发布多个应用实例,使用nginx负载均衡,对外提供服务入口步骤一:构建web应用使用springBoot构建一个最简单的应用,@RestController对外暴露一个请求地址http://localhost:8080,使用request.getLocalAddr()返...

2018-12-14 09:32:36 227

原创 [Demo示例]使用curator监听zookeeper

引入依赖 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.apache.curator&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;curator-recipes&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp;gt;2.7

2018-12-07 13:17:17 540

原创 [Demo示例]编写一个简单的Zookeeper监听器-Watcher监听器

背景传统的SSH架构可以分层拆分为微服务,以RPC的访问方式,替换原来的进程内调用。大量微服务需要自动注册到zookeeper、或者退出。此时服务的变化需要一些后续处理,例如根据微服务来调整API网关等。知识点:zookeeper的Watcher机制是每次通知后便失效,需要重新注册。注:zookeeper原生API不好用,有个curator框架做了封装,了解一下。实现需要用到org.ap...

2018-12-06 16:19:24 1296

阿里云ecs搭建linux+java+tomcat+mysql运行环境

描述了新购一空白linux主机后,搭建java运行环境的步骤。适合有一定经验的开发者,备忘等。细节部分仍需自行学习了解。

2017-02-09

Java最著名的开源项目

Java最著名的开源项目,开源项目介绍,简单的介绍,开拓视野。

2013-04-05

空空如也

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

TA关注的人

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