- 博客(89)
- 收藏
- 关注
原创 如何实现自定义的 Spring Boot Starter?
前言Spring Boot 可以省略众多的繁琐配置,它的众多 starter 可以说是功不可没。例如 Spring Boot 中集成redis,只需要 pom.xml 中引入 spring-boot-starter-data-redis,配置文件中加入s pring.redis.database 等几个关键配置项即可,常用的 starter 还有 spring-boot-starter-web、spring-boot-starter-test、spring-boot-starter-jdbc,相比于传统的
2021-03-23 19:26:29
337
原创 Spring Boot 参数校验
前言作为服务端开发,验证前端传入的参数的合法性是一个必不可少的步骤,但是验证参数基本上是一个体力活,而且冗余代码繁多,也影响代码的可阅读性,所以有没有一个比较优雅的方式来解决这个问题?JSR-303验证框架,JSR-303 是Java EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于对Java Bean 中的字段的值进行验证,确保输入进来的数据在语义上是正确的,使验证逻辑从
2020-12-08 20:29:17
985
4
原创 使用 apache commons-csv 进行 CSV 文件下载
准备工作加入依赖<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.8</version></dependency>代码package com.jake.common.util;import lombok.extern.slf4j
2020-09-27 17:02:11
984
原创 Spring Bean 的生命周期
前言本文主要介绍 Spring IoC 容器如何管理 Bean 的生命周期。在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对固定的销毁工作需要执行。为了便于这些工作的设计,Spring IoC 容器提供了相关的功能,可以让应用定制 Bean 的初始化和销毁过程。Bean 生命周期初始化阶段...
2020-03-03 14:32:41
407
2
原创 Java 单例模式的线程安全实现
单例模式概念引用维基百科:单例(Singleton)模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式...
2020-02-21 23:42:09
750
原创 Spring 框架总览
Spring 简介Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。它是轻量级、松散耦合的。它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序开发提供了一个有凝聚力的框架。它可以集成其他框架,如 Spring MVC、Hibernate、MyBatis 等,所以又称为框架的框架( 粘合剂、脚手架 )。Spring 模块Spring 核心容器对应图中...
2020-02-19 17:49:25
872
原创 Java 浅拷贝和深拷贝
浅拷贝对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成...
2020-02-17 16:24:42
396
原创 Java 线程池
线程池规范阿里巴巴 Java 开发手册对线程池的规范定义即不要按照以下方式创建线程:Thread thread = new Thread(new Runnable() { @Override public void run() { // do something by a thread }});如果在 IntelliJ IDEA 中安装了 Al...
2020-02-11 21:30:06
1804
原创 Spring 中的事务注解 @Transactional
@Transactional 特性@Transactional注解只能应用到 public 修饰符上,对其他修饰符不起作用,但不报错。@Transactional 一般加到实现类或实现类方法上,不要加到接口或接口方法上。@Transactional仅仅对 unchecked 异常进行事务异常回滚;如果是 checked 异常则不进行异常回滚。unchecked 异常一般为错误或运行时异...
2020-02-02 10:07:13
568
3
原创 Java 中的代理:静态代理、JDK 动态代理和 Cglib 动态代理
准备工作代理简介代理,简单来说,就是代替原有操作者,即委托者去处理一件事。在 Java 中代理一般分为两种,静态代理和动态代理,动态代理又分为 JDK 动态代理和 Cglib 动态代理。创建项目创建一个简单的纯后端的 Maven 项目,在其中引入单元测试和 Cglib 相关依赖。<dependencies> <dependency> <...
2020-02-01 14:13:31
771
原创 Spring MVC 底层源码解读
实例流程图组成DispatcherServlet:HTTP请求处理程序/控制器的中央分配器,Spring MVC 项目的入口。HandlerMapping:处理器映射根据 request 找到请求对应的 HandlerExecutionChain@NullableHandlerExecutionChain getHandler(HttpServletRequest reque...
2020-01-18 16:42:53
1417
1
原创 Spring Boot + Flyway 管理数据库版本
Flyway 介绍Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等,还提供一系列的插件支持(Maven、Gradle、SBT、ANT等)。Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版...
2019-12-10 16:29:25
731
原创 Spring Cloud 微服务
Spring Cloud 微服务Eureka 服务治理本项目的项目结构为 Maven 多模块,各模块层级结构及配置如下:spring-cloud-microservice (root)eureka-servereureka-server1 (8081)@EnableEurekaServer + @SpringBootApplicationspring: applica...
2019-11-21 17:25:24
788
原创 为你的 Java Web 项目加入 Swagger
Swagger for Spring BootSwagger 可用于生成、描述、调用和可视化 RESTful 风格接口的API,是一套规范和完整的开发框架,并且能对接口进行单独测试。Spring Boot 是目前对 Swagger 支持最好的框架,只需要引入 springfox-swagger 相关依赖:<dependency> <groupId>io.spr...
2019-11-07 11:54:26
2008
原创 Zipkin Server 无法启动的问题
Zipkin 简介Zipkin 是 Twitter的一个开源项目,它基于 Google Dapper 实现。我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的 API 接口之外,它也提供了方便的 UI 组件来帮助我们直观的搜索跟...
2019-11-04 19:14:18
4750
2
原创 Spring Boot 日志框架
(一)门面模式在平常的系统开发中,日志起到了重要的作用,日志写得好对于线上问题追踪有着很大的帮助。一个好的日志框架,既要方便易用,也要有较好的性能,减少日志输出对系统内存、CPU 的影响。在学习 Spring Boot 的日志框架之前,我们有必要先了解一下日志框架的设计模式——门面模式。在软件开发领域有这样一句话:计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。而门面模式就是对于...
2019-10-14 17:40:57
1229
原创 Spring Boot + JPA 最佳实践
(一)前言随着 Java 技术和微服务技术逐渐广泛应用,Spring Cloud、Spring Boot 逐渐成为 Java 开发的主流框架,ORM 框架也因此得到重视。纵观目前主流的 ORM 框架,MyBatis 以灵活著称,但是需要维护复杂的配置,并且不是 Spring 官方的天然全家桶,还得做额外的配置工作;Hibernate 以 HQL 和关系映射著称,但使用起来并不灵活。Sprin...
2019-10-08 10:58:26
1626
原创 基于 Spring Boot + MyBatis + PageHelper + Thymeleaf 的数据分页展示
(一)需求简单的前端分页展示功能:以表格的方式展现每页数据,在表格标题下填入对应的字段值,页脚处显示当前页、总记录页数和条数,一键跳转至首尾页和相邻页。在页眉处按照始末时间查询记录。(二)代码2.1 后端代码控制层在控制层需要返回给前端的 model 属性有分页对象 pageInfo,数据 records;另外,由于按照时间查询后,需要在前端页面中填充时间,所以把 startTime ...
2019-09-25 17:55:50
1728
原创 Spring Boot + JQuery Ajax 实现文件上传功能
(一)需求在 Spring Boot 项目中实现文件下载功能 后,项目需要进一步实现 Excel 文件上传功能,已供后端代码读取 Excel 中单元格的数据。本文的代码在下载功能的基础之上继续扩展。(二)代码2.1 后端代码控制层@PostMapping("upload")public String uploadFile(MultipartFile file) { String...
2019-09-24 15:54:04
3252
原创 Spring Boot + MyBatis 多数据源解决方案
(一)需求基于 Spring Boot + MyBatis 是目前最流行的后端 CRUD 开发框架组合,在 CRUD 项目开发过程中,往往会需要连接多个数据库。目前解决方案有 JPA 多数据源方案、AOP 动态切换等,但都比较复杂,比如引入 JPA 甚至要求开发工程师能够熟悉 JPA 框架的CRUD。本文本着最简化解决方案的原则,立足于 Spring Boot + MyBatis 来做多数据源...
2019-09-17 15:16:23
2048
1
原创 在 Spring Boot 项目中实现文件下载功能
需求在您的 springboot 项目中,可能会存在让用户下载文档的需求,比如让用户下载 readme 文档来更好地了解该项目的概况或使用方法。所以,您需要为用户提供可以下载文件的 API ,将用户希望获取的文件作为下载资源返回给前端。代码maven 依赖请您创建好一个 springboot 项目,一定要引入 web 依赖:<dependency> <grou...
2019-09-17 11:48:01
17846
6
原创 Linux 用 tar.gz 压缩包安装 MySQL 5.7
1. 准备工作下载请前往 MySQL 官网下载所需的安装包。在下载页面进行如下选择,下载 tar.gz 压缩包。上传并解压使用 Xftp 或 rz 命令将压缩包上传到 Linux 服务器 /usr/local/ 路径解压tar.gz文件,并重命名解压后的文件夹为mysql:tar zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gzmv ...
2019-08-27 14:06:57
1532
原创 SSH远程重启Tomcat时无法找到JAVA_HOME也连接不上SAP
在Bamboo Agent上通过SSH命令重启目标应用服务器的Tomcat时:ssh root@server_ip "/usr/local/tomcat/bin/startup.sh"可能会报以下错误:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined...
2019-08-05 15:03:16
2038
原创 添加Agent和应用服务器之间的SSH互信
背景及概念CICD已经成为了各公司敏捷开发的重点,而CICD中除了开发部分,自动部署也是极为重要的一环。之前的博文也介绍了Atlassian公司的自动化发布工具Bamboo,运用它可以大大减少运维人员在发布应用过程中的重复操作。首先我们要了解什么是Agent服务器,什么是应用服务器。What is Bamboo Agent?A Bamboo agent is a service that...
2019-08-01 16:23:28
1517
原创 趣味MySQL:查询NBA球员的冠军总数
1. Kobe or Lebron?写这篇博客的目的完全来自于朋友圈一位朋友的回复,他半开玩笑地说,用SQL查出科比和勒布朗的夺冠总数。我是一个资深NBA球迷,同时也是科蜜(科比.布莱恩特的球迷),所以我觉得用我的职业技术之一SQL来做这个“玩笑”式的需求,非常有趣。2. 建表前言:建表的规范2.1 创建表、字段和索引咱们可以创建一个数据库叫nba。建立一张表叫player,里面...
2019-07-29 22:13:38
1906
1
原创 MySQL 调优:直接 JOIN or 先子查询再 JOIN?
背景最近,一个朋友的项目经理指出他的 SQL 写得有问题。朋友的 SQL 大致如下:select needed cols... from t1 inner join t2 on t1.col12 = t2.col12 inner join t3 on t2.col23 = t3.col23;项目经理的建议是修改为:select needed cols... from t1inne...
2019-07-21 21:39:12
5860
7
原创 基于Spring Security OAuth2的SSO(单点登录)
基础理论What is SSO?单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。What is Spring Security?Spring Security官方解释What is OAuth2?首先简单了解一下用于验证及授权的OAuth协议,...
2019-07-08 20:11:27
10176
2
原创 都是MyBatis分页工具PageHelper惹的祸 —— 记一次加入GROUP BY分组查询成功,不分组则失败的奇怪现象Debug过程
项目技术框架请您打开世界上最好使的Java编译器IntelliJ IDEA,建一个SpringBoot项目,保证项目中包含以下依赖:后端框架:SpringBoot + JUnit数据库持久化:MySQL + MyBatis测试数据请您打开可爱的小海豚SQLyog,运行以下SQL建表:/*SQLyog Ultimate v12.08 (64 bit)MySQL - 5.5.62 ...
2019-07-01 20:07:05
6481
原创 记一次基于JUnit的代码平稳升级:使用JDK8日期新特性处理项目中的日期相关逻辑
本文工作本文记录了如何使用JDK8基于DateTimeFormatter和LocalDateTime的工具类JDK8DateUtils取代旧版的基于SimpleDateFormat和Date的工具类DateUtils,在此过程中使用JUnit和Assert作为工具进行平滑过渡升级,将代码中调用DateUtils方法之处全部更换为JDK8DateUtils中的同功能方法。为什么要使用JDK8的日...
2019-06-27 17:54:15
2068
原创 MockMVC登录后测试SpringBoot项目包含Shiro Subject的控制层方法
UnavailableSecurityManagerException在常规SpringBoot项目中,我们往往在单元测试类中直接使用@Autowired注解注入Bean实例,并在Test方法中调用实例方法。但如果该项目加入了Shiro安全框架,并且在某个被测试的实例方法中存在获取当前Shiro Subject对象的方法:package com.jake.manager.controller;...
2019-06-24 19:06:29
3731
原创 JaCoCo生成Java + Maven项目的代码覆盖率检测报告
代码覆盖率What is Code Coverage - from WikipediaIn computer science, test coverage is a measure used to describe the degree to which the source code of a program is executed when a particular test suite...
2019-06-24 17:09:08
3578
2
原创 Java实用工具类-根据当前weekday返回分段排序的周一至周日
需求如图所示,当:weekday = 1时,返回Set:[1, 2, 3, 4, 5, 6, 7]weekday = 2时,返回Set:[2, 3, 4, 5, 6, 7, 1]weekday = 3时,返回Set:[3, 4, 5, 6, 7, 1, 2]weekday = 4时,返回Set:[4, 5, 6, 7, 1, 2, 3]weekday = 5时,返回Set:[5, 6...
2019-06-18 16:41:25
2155
原创 基于Bitbucket和Bamboo的SpringBoot项目CICD(持续集成和部署)
基本概念简单地说,Bitbucket是公司内部的Git远端源码管理工具,相当于Gitlab或Github;Bamboo是自动化运维工具,可以构建、打包、部署,相当于Jenkins。可以前往Atlassian官网了解Bitbucket、Bamboo的详细信息:What is Bitbucket?What is Bamboo?Integrating Bamboo with Bitbucket...
2019-06-13 18:48:10
4525
4
原创 MongoDB在拷贝数据库时无法连接数据源主机的问题及解决方案
使用db.copyDatabase(<from>, <to>, <host>)命令在Linux上的MongoDB备份Windows的MongoDB数据时,报如下错误:"errmsg" : "couldn't connect to server ..., connection attempt failed: SocketException: ...Er...
2019-06-11 19:14:06
1761
原创 MongoDB安装手册 MongoDB Installation Guide
Installation on LinuxLinux VersionCentOS Linux release 7.6.1810 (Core)Referencehttps://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/Install MongoDB Community EditionNote that the ...
2019-06-05 17:44:23
1789
9
原创 springboot配置文件application中spring.profile.active和include属性的区别
0. 参考文档Spring框架官方说明https://www.logicbig.com/tutorials/spring-framework/spring-boot/profile-specific-properties-with-include-property.html1. 概念Properties from spring.profile.include are always loa...
2019-05-29 18:01:52
3565
原创 使用不同级别的git config对应不同的远端仓库
一、必要的git config理论1.1 参考博客好好玩git:git-config: http://wxb.github.io/2016/11/03/%E5%A5%BD%E5%A5%BD%E7%8E%A9git%E4%B9%8Bgit-config.html1.2 git config三个配置级别system-系统级: 在git安装以后,git的默认配置项都在这里;global-全局级...
2019-05-20 11:27:29
2319
原创 Java枚举(Enum)类型的研究与应用
一、枚举类型的使用规范阿里巴巴Java开发手册中对enum类型的使用说明:对enum类的命名说明:对枚举类型的使用限制:对枚举类型的强制注释:二、通过demo认识枚举Season.java一个包含枚举的普通类package com.jake.guidelines.enums;public class Season { SeasonEnums seasonEnu...
2019-04-27 16:17:00
634
原创 解读优秀的Java开发应用框架系列:Spring框架解读【持续更新】
0. What is Spring Framework?0.1 Spring是什么?The Spring Framework is a lightweight solution and a potential one-stop-shop for building your enterprise-ready applications. However, Spring is modular, a...
2019-04-26 15:23:06
1010
原创 将任意自然数分解为质数的乘积(Java实现)
方法一:外层while循环package com.jake.primefactor;import java.util.ArrayList;import java.util.List;public class PrimeFactor { public static List<Integer> calc(int number) { List<Int...
2019-04-22 11:09:40
2405
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人