主要作用就是一个方法可以返回两个不同类型的参数,源码如下: package com.lifengdi.common; import java.io.Serializable; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; import…

2020年06月03日 0条评论 777点热度 0人点赞 阅读全文

背景 前段时间打包了一些基础的工具类和插件,然后发布到了公司的私有maven仓库里,一开始用起来还没有啥问题,可是随着jar包中的功能越来越丰富,时间越来越久,好些方法的具体功能都已经记不清了。 代码里的注释是肯定有的,只不过其他项目依赖jar包的时候由于下载不到源码,所以注释也显示不了,只能看下反编译的代码,或者两个项目切换着看注释,很是麻烦。 因此就研究了下怎么把源码也一起发布到maven仓库里。 实现 经过一番探索,偶然发现了maven-source-plugin找个插件,官网地址: http://maven…

2020年05月25日 0条评论 939点热度 0人点赞 阅读全文

ArrayList从原理上就是数据结构中的数组,也就是内存中一片连续的空间,这意味着,当我get(index)的时候,我可以根据数组的(首地址+偏移量),直接计算出我想访问的第index个元素在内存中的位置。写过C的话,可以很容易的理解。 LinkedList可以简单理解为数据结构中的链表(说简单理解,因为其实是双向循环链表),在内存中开辟的不是一段连续的空间,而是每个元素有一个[元素|下一元素地址]这样的内存结构。当get(index)时,只能从首元素开始,依次获得下一个元素的地址。 用时间复杂度表示的话,Arr…

2020年05月16日 0条评论 1582点热度 0人点赞 阅读全文

背景 以前使用K8S + docker部署Java项目的时候,大多都是jar包,不过这次公司使用了cas系统,只能使用war包的方式来部署,所以就研究了一下怎么部署的。 基础镜像的选择 使用K8S + docker部署war包大概流程和jar包差不多,唯一的区别就是基础镜像包不同。 区别在于部署jar包的时候基础镜像只需要选择Jdk就可以了,而war包则需要选择tomcat+jdk。 tomcat+jdk的基础镜像包可以自己制作,也可以使用tomcat官方制作的镜像。不过建议不要自己制作,还是使用官方的靠谱些。 可…

2020年05月11日 0条评论 990点热度 0人点赞 阅读全文

硬件准备 服务器 hostname 192.168.30.170 master-test-k8s 192.168.30.171 node1-test-k8s 192.168.30.172 node2-test-k8s 192.168.30.173 node3-test-k8s 192.168.30.174 node4-test-k8s 192.168.30.175 infra1-test-k8s 192.168.30.176 infra2-test-k8s 初始化配置 以下如无特殊说明则只安装master节点 Ho…

2020年04月16日 2条评论 743点热度 0人点赞 阅读全文

背景 系统版本:CentOS7 Jenkins版本:2.222.1 maven版本:apache-maven-3.6.3 Java版本:jdk1.8.0_231 Git版本:1.8.3.1 docker版本:1.13.1 k8s版本:1.9.8 使用yum install jenkins方式安装jenkins。 俺的Jenkins只部署了一台机器。 错误1 使用git branch: "$brans", credentialsId: 'platform-jenkins', u…

2020年04月08日 0条评论 823点热度 0人点赞 阅读全文

初始化本地git仓库 git init 将项目添加到本地仓库 git add . 提交到本地仓库 git commit -m '初始提交' 添加远程仓库地址(需要先在GitHub上建好,复制地址到这里),命名为origin: git remote add origin https://xxx.com/xxx/xxx.git 推传到远程仓库 git push -u origin master 如果项目已存在于远程仓库(仓库不为空,或其他人上传、更新了仓库),要先pull更新,尤其是有在其他点推传更新的时候: git …

2020年03月23日 0条评论 1400点热度 0人点赞 阅读全文

作为网关,日志记录是必不可少的功能,可以在网关出增加requestId来查询整个请求链的调用执行情况等等。 打印请求日志 打印请求日志最重要的就是打印请求参数这些东西,不过RequestBody通常情况下在被读取一次之后就会失效,这样的话,下游的服务就不能正常获取到请求参数了。所以我们需要重写下请求体。 具体方法呢有很多,这里说一下我用的两种: 第一种 代码如下: package com.lifengdi.gateway.filter; import com.lifengdi.gateway.constant.He…

2020年03月19日 4条评论 2198点热度 1人点赞 阅读全文

新建Spring Boot项目 怎么新建Spring Boot项目这里不再具体赘述,不会的可以翻看下之前的博客或者直接百度。这里直接贴出对应的pom文件。 pom依赖如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="…

2020年03月18日 0条评论 922点热度 0人点赞 阅读全文

缓存雪崩 缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间 (例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 解决办法: 大多数系统设计者考虑用加锁( 最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。还有一个简单方案就时讲缓存失效时间分散开。 缓存穿…

2020年02月26日 0条评论 406点热度 0人点赞 阅读全文
123459