SpringBoot 项目开发
使用SpringBoot快速开发Web项目,它简单、快速、方便地搭建项目;本专栏会集成Redis、Mongodb、Rabbitmq等开源项目;方便快速开发与部署
闪耀的瞬间
漫漫程序路:路漫漫其修远兮 吾将上下而求索
展开
-
Java OkHttp发送网络请求与上传文件公用方法
okhttp原创 2022-08-12 10:35:06 · 794 阅读 · 0 评论 -
SnowflakeId雪花ID生成器
Java雪花ID生成器原创 2022-04-06 23:20:02 · 1600 阅读 · 0 评论 -
SpringBoot集成Kafka
1.部署Kafka本文参考了两位网友的文章,以下是链接:Zookeeper集群搭建:https://www.cnblogs.com/zhaoshizi/p/12105143.htmlKafka搭建:https://www.cnblogs.com/zhaoshizi/p/12154518.htmlSpringBoot集成Kafka:https://blog.csdn.net/yuanlong122716/article/details/105160545/ (推荐)2.SpringBoot项目集成K原创 2022-01-05 21:14:22 · 150 阅读 · 0 评论 -
SpringBoot项目共用shell脚本中的配置信息
业务场景:多个SpringBoot项目在同一个目录下启动时,共用一个shell脚本中的配置信息1.SpringBoot项目中都会使用的配置如下:zy: nodecode: ${NODE_NODE}spring: application: name: admin-server datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://${PG_DB_HOST}:${PG_D原创 2021-11-18 21:26:57 · 634 阅读 · 0 评论 -
screw-数据库表结构文档生成器
推荐一款数据库表结构文档生成器已支持的数据库MySQLMariaDBTIDBOracleSqlServerPostgreSQL支持生成文档的格式htmlwordmarkdown下图是生成的 Html文档格式使用方式有两种使用方式:1.代码实现2.Maven插件实现1.代码实现# 引入maven 依赖<dependency> <groupId>cn.smallbun.screw</groupId> <原创 2021-10-16 22:13:20 · 146 阅读 · 0 评论 -
Java使用dom4j修改xml内容
使用dom4j修改xml内容是很方便的,有很多API方法,可以参考官网:https://dom4j.github.io/#top1,引入Maven依赖<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j --><dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <原创 2021-06-11 21:01:37 · 2111 阅读 · 1 评论 -
MinIO分布式对象存储
MinIO 分布式部署需要4块磁盘,可以是4台服务器分别挂载一块磁盘,也可以是2台服务器分别挂载两块磁盘,可参考:https://docs.min.io/cn/deploy-minio-on-docker-swarm.htmlMinIO 分布式部署支持Docker Compose、Docker Swarm、Kubernetes等几种方式,Docker-Compose是单机多实例,伪分布式,可测试使用,因没有kubernetes环境,这里使用Docker Swarm有3台服务器,一台docker swar原创 2020-11-02 16:38:17 · 2319 阅读 · 3 评论 -
MinIO对象存储服务与SpringBoot集成
MinIO MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等 相当于利用MinIO自建一个OSS对象存储服务 MinIO是一个支持分布式部署的对象存储原创 2020-11-02 15:41:18 · 2466 阅读 · 0 评论 -
用Java注解对结果集中包含身份证号码的数据进行脱敏处理
1.目标,期望对响应到客户端结果集中的用户身份证号码、手机号码等敏感信息进行脱敏处理,如身份证号码中间8位用 * 星号代替,手机号码中间4位用 * 星号代替2.SpringBoot项目,常用的web依赖3.处理思路:1.定义枚举类,处理不同类型的数据(身份证号、手机号、邮件等)2.定义注解,用在要处理的字段上,关键是该注解上使用 @JacksonAnnotationsInside 主键,因为springboot项目默认使用 jackson 序列化数据(题外话:如果使用FastJsonHttpMes原创 2020-09-27 09:15:04 · 3011 阅读 · 3 评论 -
Java 实体映射工具 MapStruct
项目复杂性提升后,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,这时候需要在提供对外接口的模块里放 DTO 用于对象传输,也即是 DO 对象对内,DTO对象对外,DTO 可以根据业务需要变更,并不需要映射 DO 的全部属性。这种 对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦。MapStruct 就是这样的一个属性映射工具,只需要定义一个 Mapper 接口,MapStruct 就会自动实现这个映射接口,避免了复杂繁琐原创 2020-09-11 16:21:38 · 898 阅读 · 0 评论 -
用Spring AOP、Java注解、反射对返回的结果集进行特殊处理
1.目标:业务数据中的某些字段列,需要根据用户选择的语言类型自动处理后返回对应语言的数据2.背景:系统需要适应多种语言:中文简体、中文繁体、英语等,一个业务数据中的某些列,会同时设置多种语言的数据,用户可根据自己喜欢的语言展示对应的数据3.用户选择语言后,前端把该参数通过header头传递到后端,后端查询业务数据后,根据header头中的多语言参数,查询业务数据中某些列对应语言的数据,再覆盖到当前的数据中,然后返回给客户端4.难点:1.结果集的数据有数组嵌套,2.尽量少改动业务代码,且提供好的性能,来原创 2020-09-05 12:13:12 · 1668 阅读 · 3 评论 -
掌握 Spring 中@transactional 的使用
事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional 注解的方式。注释配置是目前流行的使用方式,因此本文将着重介绍基于@Transaction转载 2020-09-04 11:18:41 · 214 阅读 · 0 评论 -
java项目打包成docker镜像与k8s运行的镜像
1.打包成docker镜像,Dockerfile如下预留一个 $JAVA_OPTS 参数,接收启动镜像时的java参数FROM openjdk:8-jdk-alpineADD apicenter-1.0.jar apicenter.jarENTRYPOINT ["/bin/sh", "-c", "java $JAVA_OPTS -jar /apicenter.jar"]打包:docker build -t apicenter:v1.0 ./启动:docker run -d --name api原创 2020-07-09 09:34:31 · 3051 阅读 · 0 评论 -
分布式任务调度平台xxl-job初使用
1.因为在服务中写定时任务,当服务发布多份实例时,会多次执行,可能造业务数据混乱,把定时任务执行次数分离出来,由分布式任务调度平台去控制2.本篇将介绍 xxl-job官网地址:https://www.xuxueli.com/xxl-jobGithub:https://github.com/xuxueli/xxl-job/3.概要说明,xxl-job的工作原理1.部署xxl-job服务端,由该服务端控制业务服务里面的定时任务执行次数和时间2.在业务服务中引入xxl-job客户端依赖,指定xx原创 2020-06-28 13:44:41 · 1022 阅读 · 0 评论 -
JetCache多级缓存
1.JetCache,阿里巴巴开源多级缓存框架JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。 当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实原创 2020-06-24 21:53:33 · 3170 阅读 · 2 评论 -
SpringBoot集成单元测试
Spring基本单元测试pom.xml 引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency>在测试目录添加测试类1.注入服务直接测试@原创 2020-06-22 15:32:59 · 2487 阅读 · 0 评论 -
SpringCloud Feign Get请求传对象参数
前置说明,有A、B两个服务,A服务调用B服务,B服务接口是Get类型,接受参数对象feign get请求传对象参数分两种情况1.版本在2.1之前,如我springboot是2.0.6.RELEASE,springcloud是Finchley.SR2版本,则A服务使用Map map替代对象传给B服务//A-service@ApiOperation(value = "查询xx", httpMethod = "GET")@GetMapping("/maps")public ReturnEntity原创 2020-06-22 15:15:43 · 4521 阅读 · 0 评论 -
调用链监控Skywalking与Zipkin
1.Skywalking与Zipkin的区别颗粒度:Skywalking方法级(展示的更详细),方法中所有的调用都展示出来了,如数据库调用、redis调用,第三方网络调用,而Zipkin只能展示接口级UI界面:Skywalking完胜,国产开源,更适合国人眼球代码侵入性:Skywalking无代码侵入,使用字节码增强技术,在启动服务时使用 javaagent 指向skywalking服务即可收集调用链span信息Zipkin:简单、轻量级2.安装部署对比Zipkin安装部署简单,参考:Spr原创 2020-06-16 11:39:23 · 11595 阅读 · 0 评论 -
SpringBoot日志框架使用指南
市面上常见的日志框架有很多,比如:JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback等等通常情况下,日志是由一个抽象层+实现层的组合使用的抽象层实现层JCL、SLF4J、jboss-loggingjul、log4j、log4j2、logbackSpring默认使用 JCL,所以以前的项目大多要依赖 commons-log...原创 2019-12-03 09:57:16 · 442 阅读 · 0 评论 -
云原生应用11:SpringBoot应用打包成docker镜像
本文将介绍SpringBoot开发的应用打包成docker镜像,然后运行镜像为容器依赖Docker:docker安装依赖MySql:下载mysql镜像,docker pull mysql:5.7.26运行为容器,设置数据存储到宿主机,root用户密码:docker run -d --name mysql -v /data/mysql:/var/lib/mysql --rm -p 3306...原创 2019-11-02 19:31:15 · 397 阅读 · 0 评论 -
SpringBoot项目开发(二十四):支持跨域请求JSONP
在SpringMVC4.1版本以后,Spring为我们提供了一个AbstractJsonpResponseBodyAdvice的类用来支持jsonp的数据,SpringBoot接收解析web请求是依赖于SpringMVC,所以也可以继承此类看代码@ControllerAdvice(basePackages = "com.lkh.tour.controller")public class Js...原创 2018-10-26 15:51:40 · 765 阅读 · 0 评论 -
SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象
往往有这么个需求,在新增用户时,页面以 ajax 方式把 user 对象数据提交到后台控制器上,控制器方法中的参数以对象形式进行接收,这时就需要把json字符串自动转换为对象了在SpringBoot或SpringMvc中,有@ResponseBody 、@RequestBody 两个注解@ResponseBody 注解是把数据已json字符串的方式传给客户端@RequestBody 注解...原创 2018-10-18 19:51:41 · 2428 阅读 · 0 评论 -
SpringBoot War包形式部署到外部Tomcat
1.SpringBoot 项目打包时能打成 .jar 与 .war包形式的文件,打成 .jar 的最多,使用 java -jar xx.jar 就可以启动,而 .war 可以部署到tomcat的 webapps 中,随tomcat的启动而启动。2.打包成什么文件进行部署,与项目有关,就像提供 rest 服务的项目需要打包成 jar文件,用命令搭建成集群很方便。。。而有大量css、js、html需...原创 2018-09-28 15:36:57 · 26401 阅读 · 0 评论 -
SpringBoot项目开发(二十一):Gzip压缩
为了减少数据在网络中的传输量,从而减少传输时长,增加用户体验,浏览器大都是支持Gzip压缩技术的,http的请求头 Accept-Encoding:gzip, deflate 就表示这次请求可以接受Gzip压缩后的数据,压缩会有一定的CPU性能损耗1.SpringBoot开启Gzip压缩在application.properties中加入如下配置:server.compressio...原创 2018-09-05 09:33:40 · 20295 阅读 · 0 评论 -
Dubbo-Spring-Boot
dubbo分2种方式与项目集成,1.通过Spring配置方式,2.SpringBoot版本 - 1.通过Spring配置方式:https://github.com/apache/incubator-dubbo - 2.SpringBoot版本:https://github.com/apache/incubator-dubbo-spring-boot-project它们有公用的官方文档:ht...原创 2018-08-28 11:10:18 · 891 阅读 · 0 评论 -
SpringBoot项目开发(二十):Caffeine本地缓存
为什么需要本地缓存? &amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;在系统中,有些数据,访问十分频繁(例如数据字典数据、国家标准行政区域数据),往往把这些数据放入分布式缓存中,为了减少网络传输,把这些数据缓存到本地JVM中,直接返回给用户,大原创 2018-08-22 16:19:07 · 26053 阅读 · 12 评论 -
SpringBoot项目开发(十九):全局异常处理
团队写的代码总会有漏洞的地方,报错后直接把一大堆英文的错误信息呈现给用户是很不友好的,为了更友好,通过捕获全局异常,统一跳转到一个友好的错误页面SpringMVC提供一个HandlerExceptionResolver接口,全局异常处理器实现此接口1.新建一个全局异常处理类,GlobalExceptionResolver.java,实现HandlerExceptionResolver接口...原创 2018-08-20 16:12:01 · 634 阅读 · 0 评论 -
SpringBoot项目开发(十八):定时任务
在项目开发中,经常需要用到定时任务去获取或设置某些状态,SpringBoot已经默认帮我们实现好了,只要添加注解就可以使用了1.在启动类上,启用任务@EnableScheduling@MapperScan(&quot;com.zypcy.expend.dao&quot;)@SpringBootApplicationpublic class ExpendApplication { publi...原创 2018-08-17 09:24:02 · 990 阅读 · 0 评论 -
SpringBoot项目开发(十七):mybatis + pagehelper翻页
上篇介绍 增删改查 后,本篇将集成翻页功能,翻页功能将使用第三方pagehelper插件实现,下面直接晒干货1.接着上一篇的代码,在项目中添加 pagehelper-spring-boot-starter 依赖 , 下载源码 expend&amp;amp;amp;amp;lt;dependency&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;groupId&amp;amp;a原创 2018-08-15 16:20:40 · 1730 阅读 · 4 评论 -
SpringBoot项目开发(十六):springboot+mybatis+thymeleaf增删改查
1原创 2018-08-14 10:43:35 · 10736 阅读 · 3 评论 -
SpringBoot项目开发(十五):redisson实现分布式锁
1.为什么要使用分布式锁? &amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;在分布式场景下为了保证数原创 2018-05-23 12:13:40 · 15468 阅读 · 9 评论 -
SpringBoot项目开发(十四):AOP,收集日志、统计方法执行时长
用过Spring 的开发者都知道它有两大核心功能,1.依赖注入(IOC、DI)、2.面向切面编程(AOP)。AOP:面向切面编程,往往用来实现关注点的分离的技术。系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。可以很好的集成日志收集、权限拦截、运行监控等功能。1.新建项目,添加引用,用到MVC、AOP、模版引擎&amp;amp;amp;amp;amp;amp;lt;dependency&amp;amp;amp;amp;amp;amp;gt;原创 2018-05-20 11:35:36 · 3016 阅读 · 4 评论 -
SpringBoot项目开发(十三):文件上传,监听、过滤非自身网站的请求,对资源进行防盗链等
引用上面一张图片,可能有A、B、C三个项目需要上传文件,如.zip、excel、images等文件,常用的方法是在各自项目中编写上传的后台代码,文件上传到项目的当前服务器路径下,其他项目需要时又复制一次,这种类似是单体式架构,不好扩展,那么开发一个统一的资源服务就很有必要,由这个资源服务统一管理,其他项目只要使用即可,资源服务器提供上传、下载、访问等功能。当然如果有很大量的文件资源,可以使用 ...原创 2018-05-14 11:44:28 · 2534 阅读 · 1 评论 -
SpringBoot项目开发(十二):发送邮件
Spring Boot 配置并发送邮件 1.引入依赖,在 pom.xml 文件中引入邮件配置:&amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;org.springframework.boot&amp;amp;lt;/groupId&amp;amp;gt; &amp;amp;lt;artif原创 2018-04-20 16:03:33 · 983 阅读 · 0 评论 -
SpringBoot项目开发(十一):RabbitMQ消息队列
1.为什么使用消息队列?系统解耦:在分布式环境中,可能有A、B、C、D….等多个系统,A直接调用B提供的服务接口,当A系统修改时,可能需要B也跟着修改,这样耦合性比较强。MQ可以解耦这样的场景流量销峰:在电商抢购活动中,商品可能几秒钟就被抢购完,但是系统或数据库无法在几秒内处理所有请求,大量请求或许会让数据库直接崩溃,把请求压到队列中,消费者有序的处理队列中的请求稳定性:队列有确认机制,...原创 2018-08-09 11:40:54 · 2550 阅读 · 0 评论 -
SpringBoot项目开发(十):引用本地jar包与打包本地jar
标题可能有点绕口,在实际开发中,有时所有引用的jar架包无法在 maven 中央仓库里找到,那么引用本地jar包就成为了必须,然而在项目开发完成后,需要打包部署时,引用的本地jar架包没有相应的打包进去,就会导致项目运行失败或运行错误本篇文章分享引用本地jar与打包本地jar,总结起来很简单,分3步: - 1.在项目资源目录下创建一个文件夹,用来存放 本地jar包 - 2.在pom.xml...原创 2018-08-08 17:24:10 · 19006 阅读 · 0 评论 -
SpringBoot项目开发(九):Mongodb的使用
1.Mongodb简介MongoDB是一个高性能,开源,无模式的文档型数据库Mongodb可以通过副本集、分片来扩展数据库性能传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但...原创 2018-08-08 14:56:43 · 5172 阅读 · 0 评论 -
SpringBoot项目开发(八):Redis集群使用
1.Spring Boot对常用的数据库支持外,对nosql 数据库也进行了自动化封装先了解一下几大NoSql数据库,详细了解请看《NoSql精粹》 - Redis:键值数据库,适合缓存用户Session会话与经常需要查的数据 - MongoDB:文档型数据库,京东用它保存商品数据 - HBase:基于列的而不是基于行的模式,对实时查询进行优化 - Neo4j:图数据库,善于处理用户关...原创 2018-08-08 10:55:43 · 4271 阅读 · 1 评论 -
SpringBoot项目开发(七):配置devtools实现热部署
1.为什么需要热部署?因为它可以加快开发速度,不用每次写完代码想看效果时,重启项目。2.devtools的原理原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一...原创 2018-07-26 14:33:19 · 963 阅读 · 0 评论 -
SpringBoot项目开发(六):Mybatis持久层框架
上一篇介绍了 集成数据库连接池与使用JPA 增删改查操作数据库,本篇将介绍怎么集成mybatis,内容较多篇幅较长,耐心看完会有收获1.什么是 MyBatis ?MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,...原创 2018-07-25 16:42:20 · 4684 阅读 · 0 评论