自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 文件上传

背景在实际开发中,我们经常会使用到文件上传功能,特在此总结常用的文件上传,我们常用的长传是阿里云OSS、七牛云、自建(MinIO,FastDFS等)方式阿里云OSS七牛云MinIO/FastDFS/本地文件夹代码外部包<properties> <spring.plugin.version>2.0.0.RELEASE</spring.plugin.version> <spring.boot.version>2.

2021-04-26 17:44:13 232 1

原创 支付宝对接 -- JAVA版

应用配置登录支付宝平台,签约需要的服务切换到开放平台,创建应用并审核上线支付配置获取方式已在字段注释中package org.weapon.core.pay.alipay.config;import lombok.Data;import java.io.Serializable;/** * 支付配置信息 * * @author lieber */@Datapublic class AliPayConfig implements Serializable {

2021-03-23 11:53:18 1186

原创 SpringBoot IDEA+Maven引入本地Jar包

问题在开发时我们通常会有自己的jar包,这些包没有上传到maven中心仓库,这时候我们需要怎么快速的引用和打包呢?解决方案1.项目工程目录下新建目录lib,并将需要引入jar包放入lib目录下,如图是我自己编写的微信支付对接SDK2.修改pom文件,使用本地引用方式 <dependency> <groupId>sharp-weapon</groupId> <artifactId>wx-pay-sdk&

2021-03-17 15:37:15 587

原创 idea maven工程中的Language Level总是自动变到5

问题如下图所示在project中设置JDK为1.8,Language Level为8,但是新建的module总是为5,且修改pom后Language Level也会自动变为5.解决方案如下在pom中指定版本 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId>

2021-01-28 09:51:32 2466 1

原创 Nginx同一个域名部署多个前端项目

背景最近致力于微信网页开发,发现有很多设置项,设置则设置罢了,还有限制。如下图,业务域名限制3个,JS接口安全域名限制5个。如果一个项目一个域名再加上正式测试这些环境,那完全的不够用啊。所以需要使用一个域名来搞定多个前端项目。接入方案如下。解决方案 server { listen 80; server_name www.xxx.com; ## 第一个项目 location / { root /ap

2021-01-26 16:48:09 2192 1

原创 @MapperScan和@ComponentScan

这两天新开一个springboot + mybatis项目,启动时报错提示***************************APPLICATION FAILED TO START***************************Description:Parameter 0 of constructor in com.xxx.xxx.wechat.service.impl.WeChatServiceImpl required a bean of type 'com.xxx.xxx.w

2020-12-31 09:26:24 380

原创 使用Freemarker模板自动生成代码

业务代码存在大量的增删改查功能,只是针对不同的表数据而已。这时候就如果能生成固定的模板代码,那么将大大的解放生产力。本文我们将使用Freemarker模板来生成业务模板代码。FreeMarkerFreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。其用法原理类似String的replace方法,或MessageFormat的format方法,都是在一定的代码中改变(替换)某些内容。不过FreeMarker更加强大

2020-12-30 14:52:52 878

原创 Springboot集成oshi远程监控主机

我们有时候需要去监控服务器的信息,在服务器达到某个阈值的时候需要报警,今天我们使用Springboot结合oshi来获取系统信息1.排除springboot(这里使用springboot 2.1.14.RELEASE)自带的jna和jna-platform compile('org.springframework.boot:spring-boot-starter-web') { exclude group: 'net.java.dev.jna', module: 'jna'

2020-12-17 17:21:30 1604 3

原创 CentOS7安装SVN私服

前言在GIT大行其道的今天,有的公司还在使用SVN。今天我们来分享一下怎么在CentOS7上搭建SVN私服。SVN是Subversion的简称,是一个自由开源的版本控制系统, 支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion 管理着随时间改变的数据。这些数据集中放置在一个中央资料档案库中。这个档案库很像一个普通的文件服务器,它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。安装和配置1.从yum安装yum install subvers

2020-12-15 10:11:01 192

原创 基于Docker搭建Sentry

Sentry 是一个日志平台,分为客户端和服务端,客户端(目前客户端有Python, PHP,C#, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web节目方便查看。Sentry由python编写,源码开放,性能卓越,易于扩展,目前著名的用户有Disqus, Path, mozilla, Pinterest等准备保证服务器至少有2G内存,否则安装会报错安装/升级Docker到19.03.8以上安装/升级Docker-C

2020-09-17 08:51:30 434

原创 Docker和Docker-Compose升级

###在使用Docker/Docker-Compose安装某些软件时(安装Docker和Docker-Compose),有时对Docker的版本有要求,今天来看下怎么升级Docker到指定版本1.Docker升级1.停止服务systemctl stop docker2.卸载旧版本yum remove docker \ docker-client \ docker-client-latest \

2020-09-16 14:48:46 4042

原创 基于Jackson的JSON处理

#背景Jackson:SpringBoot的默认JSON数据格式处理的类库,在各方面都比较优秀。FastJson:Fastjson是阿里巴巴开源的JSON数据处理类库,其主要特点是序列化速度快。但是经常暴露安全问题,并且代码质量不是很高。Gson:Gson是Google为满足内部需求开发的JSON数据处理类库。性能对比如下:序列化:fastjson >= jackson > Gson。反序列化:三者几乎不相上下。代码实现package com.yugioh.api.common.

2020-09-15 15:58:50 459

原创 Java分布式锁--Redis实现

分布式并发环境下,为了保证事务操作的原子性,需要引入分布式锁来保证一连串行为是原子性操作,在此简单的实现锁如下。1.定义一个接口package com.yugioh.api.core.util.lock;/** * 锁的接口 * * @author lieber */public interface ILock { /** * 默认加锁重试次数 */ int DEFAULT_LOCK_RETRY_TIMES = 3; /** * 默

2020-09-14 15:36:31 83

原创 Java敏感词检测

1.背景敏感词过滤是一个网站必不可少的功能,特别是用户能自由发言的需求。最近刚好有这样的需求,所以参考大家的方法有下面的实现,希望对大家有帮助2.实现2.1定义敏感词接口import java.util.Collection;import java.util.Optional;import java.util.Set;/** * 敏感词接口 * * @author lieber */public interface ISensitiveWords { /** *

2020-08-14 09:24:43 3046

原创 Java敏感数据脱敏

1.背景在编码中,我们经常会对手机号,身份证号等数据进行脱敏处理,保护用户隐私,提高系统安全性。这边文章提供了xx*****xx格式的脱敏处理代码,希望对各位有所帮助。2. 实现1.定义接口,方便使用其它方式扩展/** * 脱敏接口定义 * * @author lieber */public interface IDesensitization { String REPLACE_CHAR = "*"; /** * 脱敏 * * @param

2020-08-12 11:49:01 1958

原创 Centos 7搭建本地Gitlab服务器

添加gitlab镜像本文演示吧gitlab版本为10.0.0wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm安装gitlabrpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm指定服务器ipvim  /etc/gitlab/gitlab.rb配置external_url为本机ip修改存储位置vim&

2020-08-10 13:59:46 153

原创 基于Shell的自动部署脚本

在最近的工作中,我们已经使用阿里云NAS将需要发布的jar包统一上传到NAS中,但是部署的时候还是需要每个服务器去单独启动,比较麻烦。所以准备写一个批量自动部署的脚本。背景1.我们使用的Spring Cloud微服务2.现在服务的部署方式是单独n台服务器部署eureka+nginx+nacos(每台机器配置和服务相同)。单独的m台部署gateway、user等业务服务(每台机器配置和服务相同)。3.没一个业务服务单独在基础文件夹下新建文件夹,且包含三个文件,一个jar包,对应的Dockerfile,

2020-08-07 09:04:45 655

原创 Docker搭建Nacos

项目中需要使用配置中心,选来选去,最后还是决定试水Nacos。单机部署参考nacos官方文档集群部署1.创建数据库建表语句(来自nacos官网)如下:/******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_info *//******************************************/CREATE TABLE `config_info`

2020-08-05 10:17:58 265

原创 Docker搭建Tomcat Jenkins

使用Docker搭建Jenkins非常简单,只需要pull启动即可,但是Jenkins升级比较费劲,我上次升级直接所有数据挂掉了,所以准备将Jenkins放在Tomcat中实现步骤1.拉取tomcat镜像docker pull tomcat:9.0-jdk82.下载jenkins.war并上传到/home/data/tomcat/webapps目录3.启动tomcatdocker run -d -p 8080:8080 --name tomcat --restart always -v /ho

2020-08-04 16:42:34 176

原创 Docker搭建nexus3.x私服

Nexus3是一个仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。平常我们在获取maven仓库资源的时候,都是从maven的官方(或者国内的镜像)获取,速度缓慢且团队重复获取,这时候我们需要搭建自己的nexus私服。前提已经安装docker及docker-compose,安装教程见上一篇文章《安装Docker和Docker-Compose》1.编写docker-compose-nexus3.yml内容如下version: '3'services: nexus: cont

2020-07-30 16:17:01 337

原创 安装Docker和Docker-Compose

1 Linux下安装Docker参考官方文档https://docs.docker.com/install/linux/docker-ce/centos/1.1 删除旧版本和相关依赖yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \

2020-07-29 15:18:15 228

原创 Spring Boot 2.x 接口多版本(二)-- 整合Swagger

在上篇文章Spring Boot 2.x 接口多版本中遗留了一个问题----和Swagger整合。和网上大多解决方案一致,我们也使用预先定义版本的方式。与网上不同的是,我们可以通过自定义的版本枚举自动注册Docket,而不用每一个都单独写。我们直接来看实现。1.定义版本枚举package com.yugioh.api.common.core.version;/** * @author lieber */public enum Versions { /** * 默认版本号

2020-07-21 10:18:16 440

原创 Spring Boot 2.x 接口多版本

准备将现有的接口加上版本管理,兼容以前的版本。网上一调研,发现有很多示例,但是还是存在以下两个问题。1.大部分使用Integer作为版本号,但是通常的版本号形式为v1.0.0,2.版本号携带在header中,对接调用不清晰。针对以上两个问题,做如下改造。1.自定义接口版本注解ApiVersion后面条件映射使用equals匹配,此处是否将String变为String[]应对多个版本使用同一代码的问题。package com.yugioh.api.common.core.version;imp

2020-07-09 15:18:21 501

原创 Spring Boot 2.x动态数据源切换

背景有一个使用C#的老项目,原来设计的时候是根据一个区域一个数据库的设计,现在需要将这个项目重构成Java的项目。并且新增动态添加区域,不用重启数据库的需求。PS:原来添加区域步骤1.手动新建数据库2.手动录入该区域的静态数据3.手动将数据库链接复制到主库4.重新运行程序需求1.可以动态的通过接口添加数据库2.可以根据规则动态的切换数据源解决方案Spring boot提供了AbstractRoutingDataSource 根据用户定义的规则选择当前的数据源,这样我们可以在执行查询之前

2020-07-08 17:18:46 299

原创 接口多语言方案

需求最近接到一个官网需求,官网需要动态展示一些企业信息,并且需要中英文切换。客户会在后台录入中文和英文的数据,由于项目是前后端分离,我这边只负责后端部分,根据需求转换为接口的需求就是:1.未登陆匿名用户,那么接口需要返回用户选择的语言,2.登陆用户(系统只有一个账号来维护信息),那么需要返回中英文两个信息。思路自定义对象的序列化规则。实现1. 创建存储值对象1.1 基础值对象package com.yugioh.api.business.common.model;import com.yu

2020-07-06 13:38:03 1033

原创 mybatis/mybatis-plus模糊查询语句特殊字符转义拦截器

在开发中,我们通常会遇到这样的情况。用户在录入信息是录入了‘%’,而在查询时无法精确匹配‘%’。究其原因,‘%’是MySQL的关键字,如果我们想要精确匹配‘%’,那么需要对其进行转义。1.使用mybatis提供的拦截器拦截所有的查询请求。具体实现在代码中均有注释import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.apache.ibatis.executor.Executor;

2020-07-03 14:39:50 7304 21

原创 超过js的number类型最大值的解决办法

在开发过程中,通常我们的主键会使用‘雪花算法’设置成长整型,但是当过长的长整型传到前端后会丢失精度。js的number类型有个最大值(安全值)。即2的53次方,为9007199254740992(16位)。如果超过这个值,那么js会出现不精确的问题。解决方法在传递给前端时,将Long转为String1.在Spring Boot单体应用中,直接在序列化时配置规则import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterx

2020-07-02 09:55:13 3071

原创 Spring Cloud Gateway网关XSS过滤

XSS是一种经常出现在web应用中的计算机安全漏洞,具体信息请自行Google。本文只分享在Spring Cloud Gateway中执行通用的XSS防范。首次作文,全是代码,若有遗漏不明之处,请各位看官原谅指点。使用版本Spring Cloud版本为 Greenwich.SR4Spring Boot版本为 2.1.11.RELEASE1.创建一个Filter。特别注意的是在处理完成之后需要重新构造请求,否则后续业务无法获得参数。import io.netty.buffer.ByteBufAllo

2020-07-01 17:17:16 6437 12

空空如也

空空如也

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

TA关注的人

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