SpringBoot实践
文章平均质量分 96
SpringBoot实践记录
SunAlwaysOnline
开始工作的第3年!
展开
-
从源码中窥探出事务失效的8种原因
核心流程解读我们从一段简单的代码入手,从头到尾分析以下其中的奥秘。如果在一个controller中调用service方法,该方法被@Transaction注解修饰。controller方法: @GetMapping("/save") public String saveStudent() { testService.save(); return "success"; }service方法: @Transactional原创 2021-11-30 23:45:47 · 1482 阅读 · 0 评论 -
从源码角度结合详细图例剖析过滤器与拦截器
过滤器示例:@Componentpublic class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter.init"); } @Override public void doFilter(ServletRequest se原创 2021-11-14 22:30:35 · 2895 阅读 · 2 评论 -
还记不住Spring Bean的生命周期?看这篇你就知道方法了!
一、前言上次我们在手把手教你解决循环依赖,一步一步地来窥探出三级缓存的奥秘中分析了Spring解决循环依赖的方式,在第6节中的doCreateBean(AbstractAutowireCapableBeanFactory类中)其实已经隐约看到了Bean的生命周期的几个阶段。 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] ar原创 2021-10-16 23:33:53 · 4121 阅读 · 7 评论 -
手把手教你解决循环依赖,一步一步地来窥探出三级缓存的奥秘
先不去管Spring中的循环依赖,我们先实现一个自定义注解,来模拟@Autowired的功能。一、自定义注解模拟@Autowired自定义Load注解,被该注解标识的字段,将会进行自动注入/** * @author qcy * @create 2021/10/02 13:31:20 *///只用在字段上@Target(ElementType.FIELD)//运行时有效,这样可以通过反射解析注解@Retention(RetentionPolicy.RUNTIME)public @原创 2021-10-03 23:10:01 · 3690 阅读 · 10 评论 -
SpringBoot的自动装配原理、自定义starter与spi机制,一网打尽
一、前言Spring简直是java企业级应用开发人员的春天,我们可以通过Spring提供的ioc容器,避免硬编码带来的程序过度耦合。但是,启动一个Spring应用程序也绝非易事,他需要大量且繁琐的xml配置,开发人员压根不能全身心的投入到业务中去。因此,SpringBoot诞生了,虽然本质上还是属于Spring,但是SpringBoot的优势在于以下两个特点:(1)约定大于配置SpringBoot定义了项目的基本骨架,例如各个环境的配置文件统一放到resource中,使用active来启原创 2021-08-24 23:51:52 · 9725 阅读 · 14 评论 -
Ribbon源码分析
Ribbon是Netflix公司开源的一个客户端负载均衡的项目,一般配合Eureka使用。不过为了降低其他干扰因素,专注于Ribbon,这一次我们脱离Eureka讲Ribbon。上一篇我们讲了RestTemplate源码分析,今天这一篇打算使用@Ribbon注解使得RestTemplate具有负载均衡的能力。一、简单的例子首先引入ribbon的依赖() <dependency> <groupId>org.springframew原创 2021-08-14 14:01:43 · 1846 阅读 · 0 评论 -
RestTemplate源码分析
相信RestTemplate是我们在SpringBoot中用过的最多的http客户端,今天来分析他的源码。一、最简单的用法首先需要向容器中注入RestTemplate的Bean实例@Configurationpublic class RestTemplateConfig { @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); }}接着直接使用即可原创 2021-08-07 16:45:32 · 2332 阅读 · 4 评论 -
SpringBoot中的异步调用@Async
如何开启异步调用在SpringBoot中,只需要给方法加上@Async注解,就能将同步方法变为异步调用。首先在启动类上添加@EnableAsync,即开启异步调用。/** * @author qcy */@SpringBootApplication@EnableAsyncpublic class AsyncApplication { public static void main(String[] args) { SpringApplication.run(原创 2020-09-09 17:52:37 · 1200 阅读 · 0 评论 -
基于SpringBoot与Redis实现分布式锁
首先,使用Docker运行Redis拉取最近版本的Redis镜像:docker pull redis启动容器:docker run -d --name redis -p 6379:6379 redis:latest进入容器内部,测试存储:# docker exec -it redis redis-cli127.0.0.1:6379> set name qcyOK127.0.0.1:6379> get name"qcy"到这里,说明我们启动成功了。.原创 2020-08-28 18:11:36 · 4777 阅读 · 1 评论 -
SpringBoot集成RabbitMQ
容器化运行RabbitMQ,可以参考我之前的一篇文章容器化运行RabbitMQ本篇不讲解RabbitMQ的理论知识,均采用最简配置那么消息队列,需要一个消息的生产者与消费者创建一个生产者:引入相关的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-a原创 2020-08-06 17:02:35 · 382 阅读 · 0 评论 -
【JAVA】Spring事务的传播行为
一、前言Spring为我们提供了巨大的便利,其中的事务增强特性,使得程序出错时,不需要我们进行手动回滚。Spring在Propagation定义了7种事务的传播行为:public enum Propagation { REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), SUPPORTS(TransactionDefiniti...原创 2020-04-17 15:08:51 · 3354 阅读 · 2 评论 -
【Tomcat】Error parsing HTTP request header的解决方案
最近个人的一个项目,总是不定时浮现Error parsing HTTP request header这样的问题,有以下两种具体报错Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986. Invalid character found i...原创 2020-03-17 10:28:27 · 36607 阅读 · 6 评论 -
【SpringBoot】使用不同的策略动态地调用某个接口的实现类
经常遇到这样的一个需求,前端传的实体类型相同,后端需要根据实体类中的某一个字符串,动态地调用某一个类的方法。在SpringBoot中,我们可以理解成,一个Controller接口对应多个ServiceImpl,使用这种方式,如果后期需要添加一个功能,仅仅创建一个ServiceImpl就可以满足需求,而不用再额外创建一个Controller接口。现在假设一个情景,前端传入不同的用户类型,后端...原创 2020-03-12 11:17:15 · 7147 阅读 · 4 评论 -
【SpringBoot】SpringBoot接收请求的n种姿势
本篇文章,用来探寻SpringBoot接收请求的多种方法。如果有些遗漏,或者有错误,还请各位指正。首先定义一个User实体类:@Dataclass User { String name; int age; User() { } User(String name, int age) { this.name = name; ...原创 2020-01-17 17:41:04 · 9284 阅读 · 4 评论 -
SpringBoot接口跨域问题
前后端未分离前,前端界面和代码写在一起,维护成本高,开发效率低。当前后端分离后,就要考虑到接口跨域的问题。首先,在这里先简要解释一下,什么是同源。所谓同源是指,域名,协议,端口相同。比如www.abc.com下的js脚本采用ajax去访问www.xyz.com下的resource资源,在xyz没有明确授权跨域的情况下,请求一定会失败。即使js脚本已经请求到数据,F12也可以看到响应的数...原创 2019-12-27 15:47:09 · 2596 阅读 · 0 评论 -
Docker构建SpringBoot应用
1.基于Dockerfile构建SpringBoot镜像1.1准备工作 将SpringBoot项目通过maven打成jar包: mvn clean package1.2使用Dockerfile构建镜像step1 在存放jar所在目录下创建Dockerfile文件touch Dockerfilestep2 编辑Dockerfile增加以下内容FROM j...转载 2019-12-03 09:20:22 · 750 阅读 · 0 评论 -
【SpringBoot】教你写个QQ机器人(4)让你的机器人学会看妹子
教你写个QQ机器人(4)让你的机器人学会看妹子市场调研炎炎夏日,唯有空调和西瓜(西瓜皮不知道是什么垃圾的请看上一节【JAVA】教你写个QQ机器人(3)让你的机器人学会垃圾分类),才能抵御住热浪的侵袭与蝉鸣的噪耳。此时此刻,如果再有一个姣好的妹子,那就十分快哉了。当然,妹子是不可能有的,但我们可以实现他。功能需求发送“看妹子,来n(n是...原创 2019-07-16 10:38:14 · 3278 阅读 · 4 评论 -
【SpringBoot】教你写个QQ机器人(3)让你的机器人学会垃圾分类
教你写个QQ机器人(3)让你的机器人学会垃圾分类事前废话自从上海实行垃圾分类后,上海老百姓生活于水生火热之中,如今战火蔓延到了苏州,身为正义化身的我,决定让我的机器人学会垃圾分类。我们的需求:用户输入垃圾分类+垃圾后,机器人返回该垃圾的分类类型。例如:用户输入垃圾分类+湿纸巾 机器人返回湿纸巾属于干垃圾(其它垃圾)...原创 2019-07-10 14:56:15 · 5504 阅读 · 0 评论 -
【SpringBoot】教你写个QQ机器人(2)搭建项目框架
教你写个QQ机器人(2)搭建项目框架开始SpringBoot之旅2019/7/5 18:05 未完待续.....(其实是下班了,回去再写)目前项目的目录(可能会有所改动),详细代码见我的GithubSunAlwaysOnline/kq以下是我用到的依赖MyBatis-plus:是MyBatis的增强版,封装了一些...原创 2019-07-07 21:46:38 · 15110 阅读 · 2 评论 -
【SpringBoot】教你写个QQ机器人(1)准备哪些东西呢
教你写个QQ机器人(1)准备哪些东西呢有一天,我的高中同学,闲着没事做着二手车倒腾生意。突然给我提了一个需求,说我能不能实现一个机器人。它能够监控群消息,如果有人发了设定好的关键词,比如二手车,就立马把这个人的QQ号转发给他,接下来去谈生意。我一想,这怎么监控群消息啊,难度有点高啊(这个时候我丝毫没意识其实早就出现了这种技术,只不过Ja...原创 2019-07-05 17:44:27 · 12123 阅读 · 3 评论 -
【SpringBoot】运用拦截器与注解,在SpringBoot中实现自定义的权限认证
运用拦截器与注解,在SpringBoot中实现自定义的权限认证 权限的认证框架很多,比如Shiro与SpringSecurity。今天使用拦截器与注解的方式,实现一个自定义的权限认证。目前,系统中需要两种角色,分别是平台管理员与普通用户,他们各自拥有不同的权限。在真正开始他们的操作之前,系统要求先登录。(1)第一次登陆系统后,之后利...原创 2019-06-19 14:04:07 · 4333 阅读 · 5 评论 -
【SpringBoot】IDEA中SpringBoot整合MyBatis
IDEA中SpringBoot整合MyBatis1.使用IDEA创建SpringBoot项目的详细步骤(1)点击Create New Project(2)点击Spring Initializr(3)修改项目名与包名,然后一路next下去。2.项目的整体结构如下3.详细代码(1)pom.xm...原创 2019-05-21 18:28:18 · 4319 阅读 · 0 评论 -
【SpringBoot】SpringBoot整合Redis
SpringBoot整合Redis 首先我是在Windows上开发的,因此需要在Windows安装Redis,安装的教程Windows下安装Redis服务,这个教程很容易懂,我按照教程一步一步安装下来,很久就可以运行Redis了。 这个教程在【JAVA】IDEA中SpringBoot整合M...原创 2019-05-28 16:59:37 · 2340 阅读 · 0 评论 -
【SpringBoot】SpringBoot整合log4j
SpringBoot整合log4j(1)添加依赖 记得移除SpringBoot中默认的日志框架logback 需要指定log4j的版本号,否则在应用启动时,slf4j找不到具体的日志实现。关于各种日志和slf4j的关系,可以参考这篇文章Spring Boot(十)Logba...原创 2019-05-29 16:16:33 · 4121 阅读 · 0 评论 -
【SpringBoot】SpringBoot整合Nginx的全部流程
SpringBoot整合Nginx的全部流程对Nginx还不了解的同学可以先看这篇文章Nginx 相关介绍(Nginx是什么?能干嘛?)今天的目标是将SpringBoot项目由默认部署方式(jar)替换成war形式,部署在同一台电脑上的两个不同端口的tomcat上,利用Nginx做反向代理,将请求自由的映射到不同端口的tomcat中...原创 2019-05-31 16:31:01 · 52609 阅读 · 13 评论 -
【SpringBoot】SpringBoot安装SSL证书
SpringBoot安装SSL证书一、前言 本文介绍的是在SpringBoot环境中安装SSL证书的过程,关于HTTP与HTTPS的区别,可以移步我的另外一篇文章【计算机网络】浅析HTTP与HTTPS的区别二、下载证书 这边以在阿里云上申请的证书为例,点击下载选...原创 2019-09-29 11:46:43 · 5008 阅读 · 13 评论 -
【SpringBoot】SpringBoot常用注解
SpringBoot常用注解SpringBoot中大量使用来自Spring与SpringMVC的注解,正确且合理的使用注解,可以避免配置繁杂的xml文件,提升开发效率。今天记录一下SpringBoot中经常使用到的注解。一、路由正确的路由是进入SpringBoot项目的关键,是打开奇妙之...原创 2019-09-12 14:55:51 · 1740 阅读 · 0 评论 -
【SpringBoot】HandlerMethodArgumentResolver的简单使用
HandlerMethodArgumentResolver的简单使用一、前言现在项目有这样的一个需求,前端在请求头中传入userId,后端需要在controller中接收到此id的整个用户信息。面对这样的需求,我们当然可以拿到userId后,在controller调用的service中请求数据库,从而拿到整个用户信息。不过这样重复的代码...原创 2019-09-03 16:00:11 · 7858 阅读 · 2 评论 -
【SpringBoot】全局异常处理与发生异常时的邮件通知
全局异常处理与发生异常时的邮件通知一、前言在任何一个SpringBoot项目中,Controlle层遍布异常捕获的代码,是不是觉得特别的不舒服呢。其实SpringBoot给我们提供了全局异常处理机制,使用ControllerAdvice与ExceptionHandler这两个注解即可。我们现在的需求是,在任何Con...原创 2019-09-04 16:19:04 · 2799 阅读 · 3 评论