java乐园
文章平均质量分 71
分享我在项目中遇到的问题和前沿技术
BUG弄潮儿
专业IT金融10年以上
展开
-
Windows中安装 MySQL8.0.30 数据库
mysql 安装原创 2023-01-15 12:57:12 · 1056 阅读 · 0 评论 -
GitLab 服务搭建
1. GitLab 概述GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。GitLab 产品将分为三个发行版本 CE(社区版):发行版将继续在全球范围内提供 EE(企业版):发行版仅在中国境外出售 JH(JiHu版):发行版仅在中国销售 GitLab 的架构图(来源官网:https://docs.gitlab.com/ee/development/architecture.html)2. 安装 Gi原创 2022-04-06 09:32:33 · 608 阅读 · 0 评论 -
非常不错的springboot启动shell脚本
#!/bin/bashJAVA_OPTIONS_INITIAL=-Xms256MJAVA_OPTIONS_MAX=-Xmx256M_JAR_KEYWORDS=/wls/appsystem/ruoyi/apps/ruoyi-admin.jarAPP_NAME=ruoyi-adminAPPLICATION_FILE=/wls/appsystem/ruoyi/config/application.propertiesAPPLICATION_YAML_FILE=/wls/appsystem/ruoyi.原创 2021-12-03 21:19:58 · 594 阅读 · 0 评论 -
common-dbutils 简单封装工具类
package com.swt.jdbc.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.List;import java.util.Map;import org.apache.commons.dbutils.DbUtils;import org.apache.commons.dbutils.QueryRunner;im原创 2021-07-25 22:10:33 · 401 阅读 · 0 评论 -
基于 Nacos 配置中心的动态日志配置方案
log4j2 日志的级别不能落SpringBoot 动态设置 logback 日志的级别上面这两篇文章只是从技术角度说了,可以实现动态日志配置。但是并没有形成适用生产环境使用的方案。今天介绍一种基于 Nacos 配置中心的动态配置日志级别的方案。0x01:安装 Nacos 配置中心配置中心 Nacos 的官网官网:https://nacos.io/zh-cn/docs/quick-start.html下载安装包需要注意一下 Nacos 需要 64 位操作系统和 64 位的JDK,如果不是 .原创 2021-05-15 10:58:49 · 3323 阅读 · 0 评论 -
动态设置 log4j2 日志的级别不能落
上篇[ SpringBoot 动态设置 logback 日志的级别 ] 说了 logback 动态设置日志级别。这篇来说下 log4j2 日志框架结合 SpringBoot 动态设置日志级别。因为 log4j2 日志框架也有非常多的公司采用,毕竟 logback 和 log4j2 是现在用的最多的两个日志框架。都不能落对吧。0x01:pom.xml 引入依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww原创 2021-05-13 21:33:18 · 1359 阅读 · 1 评论 -
SpringBoot 动态设置 logback 日志的级别
SpringBoot 默认采用 Logback 日志作为记录日志的框架。在项目中,一般分为 dev 环境(开发环境)、test环境(测试环境)和 prd 环境(生产环境)。而一般开发环境和测试环境可以把日志级别设置成 info 级别,方便在联调与测试中解决遇到的bug,但是生产环境因为存在大量的业务,如果采用 info 级别的日志, 那么每一笔交易或者业务都打印大量的日志。这样的花需要大量的磁盘空间来保存日志。如果日志需要保存一年半载,或者有些业务场景,例如财务数据的日志需要保存更久。将给公司造成很大的财务原创 2021-05-12 22:50:39 · 4309 阅读 · 1 评论 -
优雅的进行全局参数验证拦截
参数验证如果没有做全局验证,就会导致代码非常臃肿。存在大量的 if 判断非空语句。今天介绍一种优雅的方案。先介绍一个待会用到的注解@InitBinder,它的作用:从字面上可以看出 @InitBinder 的作用是给 Binder 做初始化的,被此注解的方法可以对 WebDataBinder 初始化。WebDataBinder 是用于表单到方法的数据绑定的。@InitBinder 只在 @Controller 中注解方法来为这个控制器注册一个绑定器初始化方法,方法只对本控制器有效。@InitBinde原创 2021-05-10 22:23:53 · 472 阅读 · 2 评论 -
API 版本控制小技巧
在 Spring 项目的控制器中,有 2 个 Rest API 方法。例如获取用户接口:/user/getUserInfo获取权限接口:/role/getRoleList一个客户端正在通过 /api/v1进行访问现在想更新其中一种方法。即/user/getRoleList;因此新方法的版本将为 / api/v2 。但是 v1 的方法没有变化,即 /api/v1 。如何在同一项目中使用两个版本处理其余方法呢?意思是 /user/getUserInfo 接口应该同时支持 /api/v1原创 2021-04-29 20:51:39 · 735 阅读 · 0 评论 -
CI/CD + docker 综合实战
一、部署流程1、研发push到github代码库2、Jenkins 构建,pull git代码 使用maven进行编译打包3、打包生成的代码,生成一个新版本的镜像,push到本地docker仓库harbor4、发布,测试机器 pull 新版本的镜像,并删除原来的容器,重新运行新版本镜像。二、环境说明服务及服务器说明-Aliyun环境1、代码仓库 github 或者 git-server 或者 gitlab 本次实验使用github仓库 https://github.com/2原创 2021-04-28 20:41:55 · 983 阅读 · 0 评论 -
Harbor 镜像仓库部署
一、部署流程1、研发push到github代码库2、Jenkins 构建,pull git代码 使用maven进行编译打包3、打包生成的代码,生成一个新版本的镜像,push到本地docker仓库harbor4、发布,测试机器 pull 新版本的镜像,并删除原来的容器,重新运行新版本镜像。二、环境说明服务及服务器说明-Aliyun环境1、代码仓库 github 或者 git-server 或者 gitlab 本次实验使用github仓库 https://github.com/[外链图原创 2021-04-24 16:31:58 · 330 阅读 · 0 评论 -
CICD:CentOS 下 Jenkins 安装
Jenkins 是什么?Jenkins 是一个可扩展的持续集成引擎主要用于:持续、自动地构建/测试软件项目。监控一些定时执行的任务Jenkins 拥有的特性包括:易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持易于配置-所有配置都是通过其提供的web界面实现集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知生成JUnit/TestNG测试报告分布式构建支持Jenkins能够让多台计算机一起构建/原创 2021-04-04 20:10:34 · 370 阅读 · 1 评论 -
Redis 集群操作实战
0x01:Redis 集群简介Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在 3.0 版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是互联网企业动辄大几百G的数据,可这些模式没法满足业务的需求,所以 Redis 在 3.0 版本以后就推出了集群模式。Redis 集群采用了 P2P 的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个哈希槽(slot),每个 Redis 实例负责其原创 2021-03-20 18:38:07 · 300 阅读 · 0 评论 -
生产环境 OOM 与 GC 问题的处理思路
有一定 Java 工作经验的朋友们,免不了要遇到过,或者处理过 OOM 和 GC 问题。OOM 和 GC 问题也是面试时,经常被面试官问题的问题。分享一下多年积累的一些小经验,共同进步。0x01:未雨绸缪 部署到生产环境的应用,无论是 C/S 结构,还是 B/S 结构的应用服务。肯定有基于 Shell 脚本编写的启动脚本。C/S 结构的应用服务的 Shell 脚本一般是公司内部开发人员编写的;以下一个 C/S 结构应用服务的简单启动脚本。java -Xms1024m -Xmx1024m -XX原创 2021-03-15 20:58:44 · 808 阅读 · 2 评论 -
如何优雅的进行接口管理
在这前后端分离大行其道的今天,如何优雅的管理接口,对应提高工作效率非常重要。而接口又是由后端提供的,这个任务自然而然的又落在后台开发人员的身上。在这里提供三种常见的接口管理方案,这三种方案没有属谁最优,属谁最差。根据项目的情况而定。0x01:基于文档式的接口管理基于文档式的接口管理时最传统,也是最常见的接口管理方式。因为一直做些不大不小的项目型项目,所以几乎使用的都是该接口管理方案。文档格式多种多样,常见的文档格式有:电子表格Execl电子文档WordPDF文件这三种文档格式,用原创 2021-03-14 09:49:42 · 751 阅读 · 0 评论 -
代码质量管理的一些思路
现在程序员的能力参差不齐,有科班出身的;也有半路出家的。如何提高代码的质量,对系统的鲁棒性(稳定性)非常重要。0x01:编写规范的代码在编写代码时,给包名、类名、类属性等做一定的规范。可以达到见名知意的效果。具体可以参考《阿里巴巴Java开发手册》链接: https://pan.baidu.com/s/1ANvBu1hidnvRCZILDGXuQA 密码: ugq8一些常见的模式项目jar命名:系统 - 模块。例如,cms-userpackage命名:按照模块、controller、ser原创 2021-03-13 09:44:45 · 580 阅读 · 0 评论 -
微信系多商户商城完整部署步骤
项目 https://gitee.com/wei-it 的完整部署过程前端部署1、部署weiit-saas-fitment (装修)npm install#开发运行npm run dev#打包编译npm run build2、部署weiit-saas-mp (公众号)npm install#开发运行npm run dev#打包编译npm run build3、部署weiit-saas-miniapp (小程序)使用微信小程序开发工具打开该项目后端部署1、 部署wei原创 2021-03-12 21:59:33 · 500 阅读 · 0 评论 -
日期计算一年中周的代码
package com.paic.hm.base.web.util;import com.alibaba.fastjson.JSON;import org.apache.commons.lang.StringUtils;import org.joda.time.DateTime;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.text.DateFormat;import java.text.P.原创 2021-02-24 17:09:41 · 609 阅读 · 0 评论 -
深入了解数据导入的一些解决方案
项目中除了有数据导出之外,也存在批量数据导入的场景。比如通过Execl电子表格进行批量开卡,批量导入用户或者部门信息等。今天探讨一下常见的数据导入方案。0x01:同步导入如果批量导入的数据就是几十条到一两百条的数据量的话;而且每条数据导入时,所做的业务不是特别耗时的话,可以采用同步导入方案。该方案只需一个接口,该接口的主要功能是上传Execl电子表格数据,然后解析Execl电子表格里的数据,进行业务操作,导入到数据库里即可。如果有需要的话,可以在解析Execl电子表格的数据时,把对数据的验证记录按照原创 2021-02-21 15:22:58 · 539 阅读 · 0 评论 -
浅谈导出Execl的报表数据解决方案
项目中免不了要做一些数据导出功能,比如导出前一天的订单记录。涉及导出功能可大可小,根据系统具体的用户量、一天的订单量等情况。今天就讨论一下怎么设计一个合理的导出功能。0x01:同步导出这个方案最简单,就只需一个导出接口。这个接口只需实现根据用户条件到数据库查询相关数据,然后在应用程序中生成Execl电子表格,最后通过Response把生成的Execl电子表格回写到客户端即可该方案简单,因为是同步导出,所以不适用大量数据导出。如果使用该方案进行大量数据导出的话,存在客户端(浏览器)超时的情况,导致导出原创 2021-02-20 12:25:12 · 422 阅读 · 0 评论 -
浅谈数据埋点可行性方案 [ 新年快乐,心想事成]
用最朴素的语言,描述最复杂的方案!!有没有遇到这样的一个用户场景,哪天在淘宝APP搜索了:50度飞天茅台,然后第二天在头条APP看新闻时,就时不时出现茅台。这就是今天需要讲解的这个场景。可以说每款APP,或者每个 TO C 系统都存在或少或多的收集数据用户信息和用户行为的操作。收集用户信息和用户用为的操作,一般需要使用到埋点服务。而这个埋点服务,很多第三方服务商都提供了相应的服务,只要根据对应的步骤接口,就可以收集相应的数据。比如,友盟的埋点服务:https://www.umeng.com/page/原创 2021-02-10 21:31:30 · 309 阅读 · 0 评论 -
浅谈第三方登录用户表结构设计方案
国民两大流量入口,大家不说也想到了,分别是微信和QQ。所以为了方便获取用户来源都对接了微信登录或者QQ登录,这一类型的第三方登录入口。今天就以对接微信登录、QQ登录与苹果登录。来说说对第三方用户体系与我方系统用户体系的对接的一些可行性方案。0x01:我方用户表与第三方用户表同为一张表一般系统都会有自己的一套用户系统,主管用户的注册、登录、登出、权限等。比如我方用户系统的用户表 t_user 大致包含如下一些字段:id:主键idusername:用户名age:用户年龄mobile:手机号号码原创 2021-02-06 12:27:30 · 1207 阅读 · 0 评论 -
刷leetcode时,重新认识LinkedList实现栈、队列或者双端队列
如果想进大厂免不了要leetcode,而leetcode时免不了很多题跟栈,队列有关,重新认识一下LinkedList也许能在不时之需时,助你进入大厂。LinkedList实现了Deque和Queue接口,可以按照队列、栈和双端队列的方式进行操作。0x01:Queue接口Queue里面的方法,Queue扩展了Collection,它的主要操作有三个功能操作。每个操作有2个方法,针对队列长度是否受限制,对应是否抛异常。有些队列的是有长度限制的,本例的LinkedList实现queue没长度限制。} 在尾原创 2021-01-27 21:44:54 · 277 阅读 · 0 评论 -
深入理解浅拷贝和深拷贝
0x01:概述Java中的对象拷贝 ( Object Copy ) 是指将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。例如,对象 A 和对象 B 都属于类 S,具有属性 a 和 b。那么对对象 A 进行拷贝操作赋值给对象 B 就是:B.a = A.a;B.b = A.b;拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部数据。Java中的对象拷贝主要分为浅拷贝( Shallow Copy )深拷贝( Deep Copy )Java中的数原创 2021-01-25 20:45:41 · 315 阅读 · 0 评论 -
身份证、手机号加密存储的一些思路
这两年国家越来越重要个人敏感信息的存储、传输与交换。在获取敏感个人信息时,例如,手机号、身份证,都需要主体的主动授权。0x01:敏感信息泄露有哪些途径明文存储,比如直接把手机号、身份证存储到数据库。如果数据的用户和密码被一些不应该的人员看到,获取;就很容易造成泄漏明文传输,比如没有对敏感信息进行RSA或者AES加密,就在网络中进行传输集团子公司或者与第三方系统进行系统对接时,交换敏感数据。就是把我方系统的一些敏感信息,没经授权就发生给了第三方公司0x02:解决敏感信息泄漏的最佳途径原创 2021-01-14 17:26:54 · 2734 阅读 · 1 评论 -
好似你,饼印咁:原型模式、浅拷贝与深拷贝
0x01:原型模式简介用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。大概意思就是:允许一个对象再创建另外一个可定制的对象,根本无需知道对象创建的细节。其工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。其UML类图如下:主要角色如下:Prototype:为原型类,声明一个克隆自身的接口;ConcretePrototype:为具体实现类,实现一个克隆自身的操作;Client(客户端)只需让一个原型克隆自身原创 2021-01-09 14:06:29 · 313 阅读 · 0 评论 -
堆积木,建造者模式
0x01:建造者模式简介将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。假如一个对象的构建很复杂,需要很多步骤。则可以使用建造者模式,将其构建对象和组装成一个对象这两步给分开来。构建部分为(Builder)和组织部分(Director),实现了构建和装配的解耦。主要角色如下:Builder:为创建一个产品对象的各个部件指定抽象接口,一般由子类实现;ConcreteBuilder:具体建造者,实现抽象类定义的所有方法,并且返回一个组建好的产品对象;Director:为指原创 2021-01-08 09:14:37 · 326 阅读 · 0 评论 -
人要衣装,佛要金装之装饰模式
0x01:装饰模式简介装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。先看最近一个热点头条:环卫工大姐化妆后变美女化妆前与化妆后判若两个人,所以各位小伙伴在追求另一半时,不要看走眼了。虽然老祖宗说:人美在心里,鸟美在羽毛,但是外表的美丽是我们的第一感观。闲话少说,言归正传,装饰模式的UML类图如下:主要角色如下:抽象构件(Component):定义一个对象接口或抽象类,可以给这些对象动态地添加职责;具体构件(原创 2021-01-06 20:51:18 · 359 阅读 · 0 评论 -
Java进行内存泄露 GC 分析都有哪些常用好用的工具
使用Java语言开发应用程序,虽然JVM帮我们进行了GC收集、清除工作;但是使用不当的话,还是会导致某些对象常驻堆空间无法给垃圾收集器清除,导致内存泄露、内存溢出等情况,今天盘点一下在项目中进行内存泄露分析和GC分析的一些常用、好用的工具。0x01:JDK自带工具在处理内存泄露方面JDK本身就自带了大量监控、分析工具,主要有如下一些:jps:可查看当前系统运行的所有java进程jstat:查看具体某个Java进程的GC情况jmap: 查看某个Java进程的堆内存使用情况jvisualvm:可视原创 2020-12-23 20:21:19 · 667 阅读 · 0 评论 -
设计模式之模板模式
0x01:模板模式模板模式(Template),又叫模板方法模式(Template Method),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需重写方法实现,但调用将以抽象类中定义的方式进行。模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。UML类图如下:主要包含如下角色:AbstractClass(抽象模板类):在抽象类中定义了一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基原创 2020-12-07 21:33:02 · 295 阅读 · 0 评论 -
SpringBoot加载jar包里的自定义配置文件
实现代码如下import java.util.Properties;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.support.EncodedResource;import org.springframework.core.io.support.PropertiesLoaderUtils;public class PropertiesLoader { publ原创 2020-12-07 11:40:24 · 1255 阅读 · 0 评论 -
操作 PDF 文件的常用JAR包
操作PDF在很多业务场景都要用到,例如电子发票,电子处方笺。为什么需要使用PDF呢?主要是因为可以使用RSA加密算法对PDF进行电子加签,只要经过电子加签的PDF文件,就会在PDF文件产生电子签章;经过加签的PDF是不允许修改的,如果加签后,再次对内容就行修改的话,就会显示PDF文件失效。这样的话就能验证该PDF是不是合法的。以下盘点一下常用的PDF工具JAR包。0x01:iText 5iText 5是最早一个提供对PDF进行操作的JAR包,不过目前该JAR已经不再进行后续开发。可以从官网看到如下一段话原创 2020-12-01 10:11:32 · 2600 阅读 · 0 评论 -
操作MS Execl电子表格的常用JAR包
在做报表开发时,免不了要导出数据。除了简单的循环列表数据导出外,还有基于模板的数据导出。比如生成运营周报或者月报之类的,甚是符合使用模板导出方式。今天总结一些常用的Execl导出JAR包。0x01:jxl支持Excel 95-2000的所有版本;生成Excel 2000标准格式;支持字体、数字、日期操作;能够修饰单元格属性;支持图像和图表。jxl是纯Java的,不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,jxl对图形和图表的支持很有限,而且仅原创 2020-11-29 20:13:49 · 719 阅读 · 0 评论 -
SpringBoot集成RocketMQ日志文件配置
SpringBoot项目集成rocketmq-client<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.7.0</version></dependency>项目启动时会在user.home/logs目录下创建一个rock原创 2020-11-06 21:09:15 · 2682 阅读 · 3 评论 -
Java图形验证码支持gif、中文、算术等
图形验证码是最经典,也是最常用的验证方式。今天介绍一个非常不错的类库:Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。官网:https://gitee.com/whvse/EasyCaptcha效果图:0x01:项目引入easy-captcha<dependencies> <dependency> <groupId>com.github.whvcse</groupId>原创 2020-09-28 21:57:18 · 429 阅读 · 0 评论 -
从行动上支持鸿蒙,HarmonyOS开发环境搭建快人一步
0x01:鸿蒙应用开发工具DevEco Studio简介HUAWEI DevEco Studio(简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用开发服务。通过使用DevEco Studio,开发者可以更高效的开发具备HarmonyOS分布式能力的应用,进而提升创新效率。作为一款开发工具,除了具有基本的代码开发、编译构建原创 2020-09-12 10:52:54 · 3633 阅读 · 0 评论 -
Sentinel整合Apollo进行规则持久化(二)
【Sentinel整合Apollo进行规则持久化】对Sentinel的代码进行了改造,【Apollo配置中心管理后台的详解】对Apollo管理后台进行了讲解。今天就最终实现:Sentinel整合Apollo进行规则持久化0x01:先把Apollo配置中心启动主要启动如下三个服务:apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务...原创 2020-08-08 13:36:03 · 518 阅读 · 0 评论 -
Sentinel如何进行流量监控
0x01:启动sentinel-dashboard要启动sentinel-dashboard首先要找到启动类,sentinel-dashboard是一个标准的SpringBoot工程,启动可以在sentinel-dashboard这个项目中找到。直接启动DashboardApplication.java类,访问如下地址http://127.0.0.1:8080/可以使用默认账号:sentinel / sentinel访问sentinel-dashboard,进入系统里..原创 2020-06-30 22:03:37 · 1004 阅读 · 0 评论 -
Nacos源码编译
Nacos主要功能服务发现与服务管理Nacos同时支持基于DNS和基于RPC(如Dubbo/gRPC)的服务发现,并提供服务的实时健康检查,基于Nacos更方便的实现服务断路器。Nacos提供的服务的元数据管理,路由及流量管理策略能够帮助更好的构建更强壮的微服务平台动态配置管理动态配置服务允许在所有环境中以集中和动态的方式管理所有应用程序或服务的配置。动态配置消除了配置更新时重新部署应用程序和服务的需要。可以更方便的实现无状态服务,更轻松地实现按需弹性扩展服务实例动态DNS服务支持权重路由原创 2020-06-29 22:46:23 · 4895 阅读 · 0 评论 -
HTML转PDF字体的坑,搞了半天
itext提供可HTML转PDF的工具包,但是在中文字体时也许会遇到意想不到的问题。特别宋体对应的粗体。0x01:引入itext包<dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.11</version><...原创 2020-06-12 22:04:10 · 7397 阅读 · 1 评论