
从零开始学springboot
文章平均质量分 75
基于springboot最新2.1.3RELEASE,记录学习springboot的过程,通过小demo,一步步进阶,逐步完善。原理部分不完善,主要是作者自己也不是很清楚,不敢随便写,写出来的都是作者自己总结的,所有的代码都是作者一个个敲的,希望大家一起加油!可以的话给我个赞!
码哥说
路漫漫其修远兮
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
48. 从零开始学springboot: 接入RocketMQ
微服务的架构越来越流行, 很多老旧项目面临着解耦重构, 复杂项目的解耦通常会引入一些中间件来帮助我们更好的完成工作, 本章, 我们就来通过实例了解下消息中间件的用法.市面上比较流行的消息中间件如下因为鱼哥的项目上了阿里的云, 所以选择很简单, 就用RocketMQ即可, 看官们根据实际情况择优选择....原创 2022-08-11 16:10:10 · 2662 阅读 · 0 评论 -
47. 从零开始学springboot: spel结合redisson实现动态参数分布式锁
随着分布式服务的烂大街,不可避免的就是公共资源的争用问题,对开发来说,本质上就是如何限流加锁的问题.上章简单介绍了spel表达式的一些应用案例,本章则结合spel和redisson来实现一个分布式锁注解.Redisson是一个高级的、分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象.Redisson、Jedis、Lettuce是三个不同的操作Redis的客户端....原创 2022-07-29 14:54:37 · 421 阅读 · 0 评论 -
46. 从零开始学springboot: spel结合aop实现动态传参
基于SpingBoot框架中,我们随处可以见的便是各种各样的功能注解,注解的实现原理AOP之前有说过(翻看本系列的前面几章即可),这里不过多赘述.那么,你有没有碰到这样一种场景需要动态的传参数进注解,注意是动态的而不是写死在代码里的.针对这种需求,今天,我们就来实现一个简单的案例.正式撸代码之前,先了解下SpEl(SpringExpressionLanguage)表达式,这是Spring框架中的一个利器.//定义了一个表达式。...原创 2022-07-26 15:49:46 · 1527 阅读 · 2 评论 -
45. 从零开始学springboot撸一个Xss过滤器-注解实现
前言上章通过Filter实现了Xss全局过滤器可能小伙伴还有点不满, 全局意味着“一刀切”,虽然我们也有白名单黑名单设置, 但是, 白名单黑名单针对的是整个方法或整个实体类举个例子, 我定义了个实体public class People { private String name; private String info; private String des;}可能业务上有限制(比如name限制了只有5个字符长),那么name其实不可能存在Xss注入风险了,程序原创 2021-08-26 14:11:57 · 493 阅读 · 0 评论 -
44. 从零开始学springboot撸一个Xss过滤器-Filter实现
前言项目安全需要, 需要全局对参数进行xss过滤处理.Xss简介关于Xss很多人可能都有了解, 出于“礼貌”,咸鱼君还是简单举个例子用户注册时可以填写姓名此时我填写了“” 并提交,后端呢没有做任何检测就保存了.那么就可能有问题, 下次再访问这个页面你会发现不停的弹窗“1”!Xss攻击呢也分很多种, 感兴趣的自行查阅资料, 这里不多说了.那么如何面对Xss攻击呢?其实也很好解决, 一句话“不要相信用户的任何输入”!编程上就是对用户的提交内容进行过滤以及非法字符的“转义”!Spring原创 2021-08-26 14:00:06 · 1411 阅读 · 0 评论 -
43. 从零开始学springboot整合feign跨服务调用
介绍微服务横行的互联网世界, 跨服务调用显得很平凡, 我们除了采用传统的http方式接口调用, 有没有更为优雅方便的方法呢?答案是肯定的,feign就提供了轻便的方式!如果你的服务都注册了注册中心,比如nacos, 那么调用会显得很轻松, 只需一个注解, 带上需要调用的服务名即可,**feign + nacos**会帮你做剩余的事.如果没有注册中心, 也无需担心, feign一样可以以传统的ip:port方式进行调用~下面,我们来实践下吧springboot整合feign引入依赖, 这里原创 2020-11-02 10:23:42 · 757 阅读 · 1 评论 -
42. 从零开始学springboot整合alibaba-nacos做注册/配置中心
前言随着 服务化 的普及, 你会发现越来越多的公司开始服务化的调整, 那么有哪些变化呢?你会发现, 原来一个接口就实现了一套逻辑功能, 而服务化后, 服务拆分的维度更细了, 实现一个功能, 可能需要同时协同很多的服务接口!服务的拆分维度更细当然是有好处的, 服务间耦合度更低, 复用性更强, 但是随之而来的是服务间配置及管理成本的上升!所以, 为了解决这些服务治理成本, Nacos应运而生.Nacos 是阿里巴巴的开源项目,其核心定位是 动态服务发现、配置和服务管理平台简而言之 nacos两个功能原创 2020-10-13 15:34:37 · 534 阅读 · 0 评论 -
41. 从零开始学springboot整合ElasticSearch
Elastic介绍在2018年10月5日,一个做数据搜索服务的软件初创公司 Elastic,在纳斯达克上市。而我们所熟悉的 ElasticSearch,正是 Elastic 公司最出名的产品之一,其中还包括有分布式日志解决方案 ELK(Elastic Search、Logstash、Kibana)、Beats、ECE等。那 ElasticSearch 究竟是干啥的呢?本质其实是一个基于 Lucene 开发的搜索服务器,它提供了一个基于 RESTful web 接口的分布式多用户能力的全文搜索引擎,原创 2020-09-07 17:08:04 · 346 阅读 · 0 评论 -
40. 从零开始学springboot-再谈参数合法性验证
一、介绍关于参数合法性验证的重要性就不多说了,即使前端对参数做了基本验证以外,后端依然还需要进行验证,以防不合规的数据直接进入后端,严重的甚至会造成系统直接崩溃!本文结合自己在项目中的实际使用经验,主要以实用为主,对数据合法性验证做一次总结,不了解的朋友可以学习一下,同时可以立马实践到项目上去。下面我们通过几个示例来演示如何判断参数是否合法,不多说直接开撸!二、断言验证对于参数的合法性验证,最初的做法比较简单,自定义一个异常类。public class CommonExc原创 2020-06-09 16:02:17 · 645 阅读 · 0 评论 -
39. 从零开始学springboot-好用的开源工具类
前言不过最近 Review 代码的时候,咸鱼君发现之前的有些代码有些繁琐,现在看来, 可以用一些开源工具类实现,不需要自己重复实现。所以,这里就分享几个常用的工具类,希望帮助到刚入行的同学们。其他编程老司机如果还有其他好用的工具类,欢迎评论区分享。下文主要分享这几个方向的常用工具类:字符串相关工具类Java 中 String 应该是日常用的最多一个类吧,平常我们很多代码需要围绕 String ,做一些处理。JDK 提供 String API 虽然比较多,但是功能比较基础,通常我们需要结合 S原创 2020-05-28 10:33:41 · 487 阅读 · 0 评论 -
38. SpringBoot通用开发框架
SimpleFrameSpringBoot Bussiness Frame这是一个通用SpringBoot 项目框架, 集成了很多常用的通用的依赖并且做好了配置真正的只需关心业务,无需折腾项目结构的好框架本项目是作者总结这些年的开发经验所得,花费了较多精力整理如果你觉得好用,请务必给个 STAR项目简单介绍项目结构通读项目结构,可以看出本项目基于 MAVEN 多模块之所以创建...原创 2020-04-25 16:49:52 · 615 阅读 · 0 评论 -
37.SpringBoot集成EasyExcel读取Excel反射实体值为NULL问题
前言小编最近使用springboot集成使用EasyExcel时发现了一个坑EasyExcelEasyExcel是由阿里巴巴开发团队提供的一套操作excel的工具, 与常用的POI区别就在于如下POI对大数据处理起来会引起OOM内存溢出, EasyExcel对此进行了优化, 对内存的占用极大的优化,同时允许分批处理数据POI对于读写EXCEL操作复杂, 而EasyExcel只需几...原创 2020-04-25 16:48:45 · 8581 阅读 · 6 评论 -
36.从零开始学springboot-事务失效问题详解
前言小编最近使用springboot事务时,发现了点问题问题ServiceA @Transactional public void addStudent() { Student student = new Student(); student.setAge(20); student.setName("学生"); ...原创 2019-12-30 15:24:46 · 360 阅读 · 1 评论 -
35.从零开始学springboot-数据库版本管理Flyway
前言一个项目上线后,在不断的迭代过程中,总会出于这样那样的原因需要对数据库表做“增删改”这些“硬”操作.事实上,在项目真正稳定运行前,对数据库的调整根本不可能停止.那么,每次发版前,收集每个开发人员调整的SQL文件就慢慢的变成一件麻烦的事,大概会有如下痛点:开发人员往往会遗忘SQL更改每个人的SQL会有“先后”执行的顺序问题需要手动去数据库执行那么,有没有这么一套“工具”可以让执...原创 2019-12-26 09:51:51 · 323 阅读 · 0 评论 -
34.从零开始学springboot-mybatis查询字段null值不回显问题
前言作者最近使用mybatis写sql查询,xml中查询某表记录,使用 <!-- 查询列表 --> <select id="queryList" parameterType="com.mrcoder.query" resultType="map"> select name, category from prod...原创 2019-12-13 11:54:55 · 831 阅读 · 0 评论 -
33.2从零开始学springboot-一文读懂消息队列-生产消费(附redis实现)
前言上一节我们使用Redis实现了发布订阅者模式,关于Redis实现的发布订阅模式的特点,我们也了解了基于Redis服务主动推送消息,而非订阅者循环拉取.消息即发即丢(就是消息一发布,就丢失了,不会保存)那么,实际场景时,我们也会遇到如下的业务场景:需要保存消息,按需取出需要异步延迟处理消息,比如预定订单会先入消息队列,而后统一在一个时间集中处理此时,发布订阅模式就不太适用了...原创 2019-12-13 11:54:24 · 320 阅读 · 0 评论 -
33.1从零开始学springboot-一文读懂消息队列-发布订阅(附redis实现)
前言实际生产中,我们经常会碰到这样的场景: 业务方触发了某些预料之中的bug,(比如项目中调用了第三方的服务,但是第三方的服务出问题导致无法访问,这类错,我们往往不会直接提示用户,而是选择屏蔽此类错误,写入错误日志),我们处理此类bug往往需要去生产导出日志记录,然后排查,最后找到第三方服务的提供者去解决问题.那么,与其等“被动”业务反馈,能不能让这类问题“主动”推送给开发呢? 我们能不做个“...原创 2019-12-13 11:53:53 · 477 阅读 · 0 评论 -
32.从零开始学springboot-一篇搞定Schedule定时任务
前言实际开发中,经常会碰到“定期定时去做一些重复操作”的需求,这个时候,定时任务显得是那么的方便.本章,我们来讲讲SpringBoot的定时任务如何使用.分类使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式基于注解(@Scheduled)基于接口(SchedulingConfigurer)基于注解多线程定时任务基于注解(单线程)基于注解@Schedule...原创 2019-12-13 11:53:18 · 974 阅读 · 0 评论 -
31.从零开始学springboot-再谈切面“AOP”
前言说起Java,就不得不提Spring,提到Spring,就不得不提IOC(控制反转)和AOP(切面), 本章就详细介绍一下AOP(切面)思想以及它在Spring中的应用.概念我们先看看百度此条对AOP的解释在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP...原创 2019-12-13 11:52:34 · 236 阅读 · 0 评论 -
30.从零开始学springboot-再谈控制反转“IOC”
前言说起Java,就不得不提Spring,提到Spring,就不得不提IOC(控制反转)和AOP(切面), 本章就详细介绍一下IOC思想以及它在Spring中的应用.概念IOC:控制反转,一种设计思想,它是Spring的核心。所谓IOC,对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。控制反转,由如上的概念,我们可能看到关键词“控制”,那么“反转”...原创 2019-12-13 11:51:44 · 270 阅读 · 0 评论 -
JavaBean-一个“豆子”的故事
前言初学java,看到各位大佬的学习资料,总会不断提到一个单词“JavaBean”,新手会一脸蒙蔽,这个究竟是个神马?类在说JavaBean前,我们还是先说类吧,这个我相信大家都知道是什么!好吧,还是简单解释下吧.什么是类?百度词条的解释如下:类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,...原创 2019-12-13 11:50:32 · 241 阅读 · 0 评论 -
29.从零开始学springboot-批量“覆盖导入”&“更新导入”
前言作者之前做了个excel导入导出的功能。之前的实现思路是完全的"覆盖导入"。什么意思?意思就是,每次导入excel时按照一定的过滤条件,把之前存储的数据的状态置为删除状态(在真实的环境中开发,几乎不存在"物理删除",也就是真正的把数据删除的应用场景,基本上都是用一个"状态"字段来控制)。然后,本次导入的数据就无需关心之前的那些数据,只需按照"新增"插入记录即可。这种实现方式有好处也有坏...原创 2019-09-20 14:55:26 · 1195 阅读 · 0 评论 -
28.从零开始学springboot-详解金钱类BigDecimal
前言作者最近开发项目, 需要用到java的金钱处理类BigDecimal.为什么要BigDecimal而不用Float或Double对此很多有和我一样,肯定有疑惑,一般的金钱用Double就行,怎么整出个BigDecimal类?why?其实,这和计算机的设计有关,原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。计算机CPU表示浮点数由两个部分组成:指数和尾数,这样的...原创 2019-09-20 14:54:33 · 1014 阅读 · 2 评论 -
27.2.从零开始学springboot-运行原理
前言上章介绍了springboot入口类SpringApplication类的初始化流程,本章,我们分析介绍SpringApplication.run()方法的运行流程及原理。SpringApplication实例run方法运行原理分析public ConfigurableApplicationContext run(String... args) { //1.创建并启动计时监控类...原创 2019-09-20 14:53:06 · 172 阅读 · 0 评论 -
27.1.从零开始学springboot-运行原理
前言SpringBoot作为目前最流行的 Java 开发框架,秉承“约定优于配置”原则,大大简化了 Spring MVC 繁琐的 XML 文件配置,基本实现零配置启动项目。本文基于SpringBoot 2.1.4.RELEASE 版本,通过一步步追踪代码,详细探求 SpringBoot的运行原理。图解整个springboot运行流程可以由如下图表示(图来自互联网,版权归原作者所有)入口...原创 2019-07-05 09:24:17 · 292 阅读 · 0 评论 -
26.2.从零开始学springboot-数据校验
前言对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证。JSR-303JSR 是Java Specification Requests 的缩写,是指向 JCP(Java Community Process) 提出新增一个标准化技术规范的正式请求。任何人都可以提...原创 2019-06-13 16:14:35 · 206 阅读 · 0 评论 -
26.1.从零开始学springboot-全局异常处理
前言无论什么项目,异常处理和数据校验都显得尤其重要。作为一个开发,我们不应该不对数据检验就直接入库,我们也不应该傻乎乎的把乱糟糟的报错信息直接返回给用户。本章,我们就讲讲sprinboot的异常和数据校验处理。异常处理流程自定义异常类型自定义错误代码及错误信息对于可预知的异常由程序员在代码中主动抛出,有springboot统一捕获,可预知异常是程序员在代码中手动抛出本系统定义的特定业务...原创 2019-06-13 13:50:50 · 289 阅读 · 0 评论 -
25.从零开始学springboot-springboot2.1.x报错循环依赖问题
前言实际开发中,我们常常是基于模块分工开发的,也就是不同的人负责不同的模块。最后合并代码。这种方式适合多人协同,每个人只关心自己的业务模块实现(controller/model/service/mapper等),当碰到需要其它模块支持的功能时,只需引入其它模块的类即可调用其方法循环依赖问题Bean A 依赖 B,Bean B 依赖 A这种情况下出现循环依赖。Bean A → Bean B ...原创 2019-06-10 13:52:47 · 641 阅读 · 0 评论 -
24.从零开始学springboot-swagger2文档自动生成
前言在软件开发周期中,我们写完代码常常还要写文档,一方面给调用方提供调用文档,一方面也能归档。其实,做开发的对于写文档这件事很是呵呵,占用了至少40%的开发时间,而且每当代码有调整,还得记得去修改对应的文档。那么,springboot有没有哪种方法可以帮助我们自动生成文档呢,这样能解决我们开发人员的痛点。本章,我们就来介绍Swagger2这个东东,使用后你会爱上它的。好处:自动生成文...原创 2019-06-13 16:17:52 · 326 阅读 · 0 评论 -
23.从零开始学springboot-excel导入导出
前言上一章作者分享了mybatis通用mapper的实用。在实际开发中,我们常常会用到excel导入导出相关的功能,本章,作者将分享一个实用的excel操作案例,实现excel的导入导出功能。亮点:excel导入反射java实体excel导出使用模版这边简单解释下。excel导入反射java实体:首先我们讲下正常实现excel导入的方法,如下伪代码public List<...原创 2019-05-31 14:41:20 · 613 阅读 · 0 评论 -
22.从零开始学springboot-通用mapper的使用
前言通过作者《从零开始学springboot》前面大概20几个独立的小demo以及最后的两个大汇总案例,相信大家和作者一样,对于使用springboot来开发已经得心应手了。作者在写《从零开始学springboot》这个专题时,也还是个phper,在写完前二十几章时,作者已经完成了从一名phper到javer的转型之路,项目也已安全上线。说这个,只是希望,这个系列能够对希望转型java开发的同学...原创 2019-05-29 15:25:08 · 457 阅读 · 0 评论 -
21.从零开始学springboot-搭建一个可以上线的项目结构-多模块篇
前言通过前面的多章学习,相信大家对于springboot整合各个基础依赖已经得心应手了。并且,对于各个依赖的选择和使用都有了一定的理解。本章,将对前段时间的所学做一个总结,会完成一个可以上生产的项目基础架构。首先,我们来归纳一下一般项目的需求:多数据源分布式事务数据持久层缓存日志记录druid数据源监控api文档以上需求基本囊括了所有项目的基础。那么我们,根据需求,对应我们...原创 2019-05-28 11:45:33 · 481 阅读 · 2 评论 -
20.从零开始学springboot-搭建一个可以上线的项目结构-单项目篇
前言通过前面的多章学习,相信大家对于springboot整合各个基础依赖已经得心应手了。并且,对于各个依赖的选择和使用都有了一定的理解。本章,将对前段时间的所学做一个总结,会完成一个可以上生产的项目基础架构。首先,我们来归纳一下一般项目的需求:多数据源多数据源分布式事务druid数据源监控数据持久层缓存日志记录以上需求基本囊括了所有项目的基础。那么我们,根据需求,对应我们的前...原创 2019-04-29 16:51:24 · 509 阅读 · 0 评论 -
19.从零开始学springboot-jdbc-atomikos多数据源分布式事务案例
前言上章我们通过jpa和atomikos实现了分布式事务的处理案例。这节,我们来实现jdbc多数据源+atomikos的方式来实现分布式事务的处理案例。Atomikos介绍Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器。我们通过它来管理事务。springboot本身对其有很好的支持,依赖为spring-boot-starter-jta-atomikos。创建空项目...原创 2019-04-10 16:29:33 · 646 阅读 · 0 评论 -
18.1.从零开始学springboot-配置jpa自动建表为innodb
前言接上章,springboot-jpa-atomikos多数据源分布式事务(https://www.jianshu.com/p/3f7bbbd9fb35)细心的同学肯定发现了,我们至今为止的案例基本上所有的配置都只有application.yml一个文件,为何上章多了一个hibernate.properties文件,此文件是干啥的? 能否统一到application.yml中去。原因先说...原创 2019-03-28 15:47:00 · 1882 阅读 · 1 评论 -
18.从零开始学springboot-jpa-atomikos多数据源分布式事务案例
前言前章我们已经能够流畅的写出一个基于springboot2.1.3的多数据源的案例了,而且我们选择很多,可以通过jpa搭建,也可以通过jdbc。有了多数据源,必然会碰到多数据源事务处理的问题,也就是分布式事务,所以,这节,我们就通过jpa多数据源+atomikos的方式来实现分布式事务的处理案例。Atomikos介绍Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器。...原创 2019-03-28 15:42:23 · 1800 阅读 · 0 评论 -
17.从零开始学springboot-整合mybatisPlus-druid多源案例
背景之前写了个springboot整合mybatis-plus和dynamic-datasource-spring-boot-starter做多数据源切换的案列 http://wrsee.com/articles/79 ,但是呢,考虑到在复杂的业务场景中,多数据源必须对事务有很好的支持,这种情况下dynamic-datasource-spring-boot-starter目前就不适用了,...原创 2019-03-14 11:22:06 · 889 阅读 · 0 评论 -
16.从零开始学springboot-整合mybatisPlus-多数据源-代码生成器
前言前几个案例一直只有一个固定的数据源,但是实际开发中我们常常会有多个数据库(分库分表存放业务场景&amp;主从场景),所以本次来做个这样的尝试。另外,我们此次使用mybatis-plus插件来更方便的进行数据操作。几个概念多模块(maven聚合):我们之前的demo都是一个项目一个文件,但是实际生产场景中,这种方式还是比较少见的,正常一个项目都或或多或少的关联另一个项目,比如开发了一套...原创 2019-03-14 11:21:38 · 1227 阅读 · 2 评论 -
15.从零开始学springboot-mybatis-多数据源-xml方式
前言上一章我们实现了springboot-mybatis-多数据源-annotations注解方式对mysql的操作访问,本章我们继续来实现 springboot-mybatis-多数据源-xml方式的案例。创建空项目添加依赖 <dependency> <groupId>org.springframework.boot<...原创 2019-04-16 16:42:06 · 295 阅读 · 0 评论 -
14.从零开始学springboot-mybatis-多数据源-annotations注解方式
前言上两章我们实现了springboot+mybatis基于annotations注解方式和mapper.xml方式对mysql的操作访问,那么springboot结合mybatis对多数据源的支持如何呢?答案是完全OK,本章我们就来实现 springboot-mybatis-多数据源-annotations注解方式的案例。创建空项目添加依赖 <dependency...原创 2019-04-16 16:40:52 · 309 阅读 · 0 评论