- 博客(49)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 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
17009
9
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 如何使用arthas查看成员变量(基于Spring)——java查看运行中成员变量值
如何使用arthas查看成员变量(基于Spring)查看运行的代码 jad com.example.ClassName查看对象及属性。备注:我搜了一下没找到合适方法直接查看对象的成员变量,自己发现了这样一个办法,一般我们用Spring时,可以写一个Holder类,实现ApplicationContextWare接口,这样我们在Spring加载后可以获取其context变量,context....
2020-04-27 11:00:41
20907
2
原创 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
810
原创 服务网格kiali开发环境搭建问题解析
在windows上配置为istio使用的kiali开发环境;setup kiali for istio on windows
2022-11-30 16:29:50
1092
原创 【Jenkins插件开发7】自定义任务功能——终止僵尸任务
文章目录添加功能菜单到每个任务前后台通信啥是僵尸任务Tips: 先说个感想,要开发Jenkins插件,真的要多看其他插件的源码。添加功能菜单到每个任务先看效果,如下图。一个普通的任务,我们想在侧边栏加上自己的功能。官方给的Demo里,讲的是如何在build,也就是每次构建的侧边栏加功能菜单。其实差不多,先需要一个Action。build里加action是在perform方法中addAction,而我们需要继承一个扩展点类,在其createFor方法中返回action,具体如下:添加扩展点,注意
2021-11-16 10:56:39
1132
原创 【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
1843
原创 【Jenkins插件开发5】在Slave上执行任务(获取从节点文件内容)
背景:要知道Jenkins是主从的,集群部署的时候,任务都是在从节点执行的。需求:前边我们的插件都是在Master上执行的,怎么获取从节点Worksapce中的文件呢?或者如何在从节点执行任务呢?文章目录获取从节点的VirtualChannelBuilder实现Serializable接口实例:获取从节点Workspace下文件的内容获取从节点的VirtualChannelVirtualChannel是Jenkins的类,其中有V call(Callable<V,T> callable)
2021-11-12 08:30:00
993
原创 【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
650
原创 【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
423
原创 【Jenkins插件开发2】前后台数据传输基础
文章目录如何保存配置如何显示后台数据如何在页面执行js如何提示错误,并中断build如何保存配置上一篇HelloWorld生成的项目中默认包含了一个Build的扩展,Jenkins任务的配置页可以看到如下图。我们复制一下url,修改configure为``````config.xml。我们按提示输入名字"Victor刘",然后保存,再打开刚才复制修改的xml地址。如下图:这些都是基本的,过往的文章都说了,我就不多说了,我说说原理:这样的扩展包括一个jelly页面和后台类,后台类的变量对应一个
2021-10-27 03:00:00
365
原创 【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
490
原创 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
535
原创 [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
427
原创 记一次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
745
原创 [Jenkins租户隔离]-多团队如何使用一个jenkins(2/2)——凭证
问题:多团队使用一个Jenkins时,必然有团队隐私的凭证,怎么做呢?答案是:使用文件夹创建团队自己的上下文。解析:了解一个Jenkins的概念,即上下文。下面引用凭证插件的说明文档:Jenkins 中的上下文Jenkins 实现了一个分层的上下文模型。Jenkins 中的每个上下文都有一个父上下文链,最终通向根上下文。根上下文是 Jenkins 本身。插件可以定义额外的子上下文,例如Folders plugin添加文件夹上下文,但默认情况下 Jenkins 从根上下文提供以下子上下文:
2021-08-11 09:39:58
291
原创 [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
817
原创 [质量检查jekins+sonar+jacoco]一次搞定所有Java项目的覆盖率扫描
须知:编写java代码后,通过单元测试可以了解代码覆盖率等指标maven可以配置jacoco对项目进行扫描,生成报告文件jacoco.xmlsonar可以识别jacoco.xml文件,对报告进行更好的UI展示,跟踪质量晋升曲线等。起因:使用jacoco插件来生成mvn test报告,需要在每个项目代码中增加配置。其中的配置是有共性的,不需要每个项目的开发者都掌握配置方法,这个重复工作可以交给项目管理来做,Jenkins单任务,流水线之类都可以。计划:我们主要通过jenkins的Sh
2021-07-19 17:05:08
1510
1
原创 Git识别项目的语言类型,及文件占比。
最近在做代码分析,想知道一个git仓库的语言类型,相信大家都见过这个:图中列出了不同的文件类型在代码仓中的占比,那如何实现这个功能呢?结果研究,我写了一个脚本如下:# git查询文件后缀的数量,用以区分项目使用的语言。# 列出git的pack文件索引# git rev-list --objects --all \# 只输出第二列文件名# |awk '{print $2}' \# 排序去重# |sort|uniq \# 按照‘/’分割并取出最后一个,即文件名# |awk -F/ '{
2021-07-05 15:50:39
1540
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
1737
原创 [如何验证Git密码]你的Git密码输错了吗
在做DevOps项目时,有从其他git地址导入项目的需求。如果是非public的项目需要用户名和密码,然而gitlab并未提供相关验证方法。其实Git本身就提供了验证的方法,这隐含在了Git的http协议中。git clone时,client端需要先获取服务器的一个静态文件,然后再进行具体操作。也就是说,我们通过一个GET请求,根据返回状态码即可区分是否有权限且用户名密码正确。HTTP GET请求如下:// name为用户名,pwd为密码// @后面是git地址// 静态文件的地址实际为 /
2021-05-08 09:43:43
1619
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
1414
原创 [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
79
原创 [项目间复用——发布到Maven] MyBatis全局枚举Starter
缘起1、某次面试被问到:“你工作这么久,不同项目间,代码不能复用吗?”2、面试经常被问到:“你自己写过Starter吗?”结果说的,有道理,回头看了一下自己,确实没有注意总结成果。于是兴起,决定把之前的一个小功能封装成Starter,并上传到Maven的中心库。说明代码,很简单,稍作修改,使其符合SpringBoot的Starter。目前1.0.1正在发布中,1.0有问题,发版的时候忘改包名了,跑不起来。大家可以自己尝试一下。还是很加zhuang分bi的。技术介绍地址:[如何提高代码优雅性
2021-01-27 15:03:42
81
原创 [如何解决线上问题——查看变量]如何用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
2803
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
261
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
417
原创 没有修改表,却Waiting for table metadata lock
网上关于Waiting for table metadata lock锁表的解答很多,大多关注的是事务执行中,使用了改表语句导致的,可能会容易忽略另一种情况,就是我遇到的:数据库备份,导出数据时,也会引发此问题。...
2021-01-05 10:35:31
73
原创 HikariCP流程,一图概括了解(源码入门)
【思考】1、连接池作用:估计都知道,保存数据库连接,避免下次请求时再新建耗时。2、连接池存什么? 平常可能不太注意,仔细翻翻源码稍微思考一下就知道了。Mysql连接是mysql-connector-java.jar提供的,他给我返回Connection实例。所以连接池存的就是Connection实例,高效的提供给多线程使用。3、那到底跟我们自己List存一下有什么区别呢?也就是连接池解决什么问题、如何高效:多线程时,每个线程使用一个Connection,可能有100个线程同时getConnectio
2020-12-09 17:01:04
445
原创 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
272
原创 [如何提高代码优雅性——枚举] 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
403
原创 寻找冲突的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
122
原创 [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
139
原创 [Demo示例]Docker搭建zookeeper集群
需要linux主机,安装docker,下载zookeeper镜像zookeeper集群需知zookeeper集群至少需要3个节点,每个节点保存全量数据,即内容完全相同。其中一个崩溃后,只要节点数大于3个则可以继续使用。zookeeper集群只需要修改两个地方,然后各自启动即可:1、每个节点的配置文件zoo.cfg,列出每个节点地址server.X=...,其中288*端口号随意什么都行...
2018-12-19 15:56:32
162
原创 [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
3155
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
233
原创 [Demo示例]使用curator监听zookeeper
引入依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.curator&lt;/groupId&gt; &lt;artifactId&gt;curator-recipes&lt;/artifactId&gt; &lt;version&gt;2.7
2018-12-07 13:17:17
547
JAVA核心知识点整理
2020-11-13
阿里云ecs搭建linux+java+tomcat+mysql运行环境
2017-02-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人