springboot框架详解(基于springboot框架)

http://www.itjxue.com  2023-01-25 17:56  来源:未知  点击次数: 

一图看懂Spring Boot 异步框架

在SpringBoot的日常开发中,一般都是同步调用的。但经常有特殊业务需要做异步来处理,例如:注册新用户,送100个积分,或下单成功,发送push消息等等。

就拿注册新用户为什么要异步处理?

在SpringBoot中使用异步调用是很简单的,只需要使用@Async注解即可实现方法的异步调用。

采用@EnableAsync来开启异步任务支持,另外需要加入@Configuration来把当前类加入springIOC容器中。

增加一个service类,用来做积分处理。

@Async添加在方法上,代表该方法为异步处理。

@Async注解,在默认情况下用的是SimpleAsyncTaskExecutor线程池,该线程池不是真正意义上的线程池,因为线程不重用,每次调用都会新建一条线程。

可以通过控制台日志输出查看,每次打印的线程名都是[task-1]、[task-2]、[task-3]、[task-4].....递增的。

@Async注解异步框架提供多种线程

SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。

SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方。

ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类。

ThreadPoolTaskScheduler:可以使用cron表达式。

ThreadPoolTaskExecutor :最常使用,推荐。 其实质是对java.util.concurrent.ThreadPoolExecutor的包装。

SpringBoot基础(三)

大家好,一直以来我都本着 用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫

「大佬可以绕过 ~」

本节给大家讲讲 「Java的SpringBoot框架」 , 之前我们学习的都是java的基础知识和底层提供的一些能力,我们日常工作都是在写接口。在我们在产品开发中,一般我们都会选择比较稳定的框架来帮我们加速开发,不会自己去造轮子,而在java众多框架中,spring框架表现的非常好,大部分公司都会首选它作为开发框架,而至今,大部分企业都是以 springboot 来构建项目了~

上期我们讲解了springboot中的 http请求处理 以及涉及到的几个注解。后台服务始终绕不开数据的开发,我们需要把用户产生的数据落地到数据库。本期,将带大家学习一下springboot中的 数据库处理 , 我们将学习目前市面上比较火的 Mybatis 框架, 它是一个 ORM 框架, 我将分为 三个小节 去讲解,现在用的比较多的数据库是 Mysql , 它是一个 开源 的 关系型 数据库, 这一节将带大家快速入门 Mysql 。最近github可能会被墙,所以我把源码放到了国内gitee上,本节我们依然使用上期的代码

如果你是mac用户,推荐使用 homebrew 安装, 它是mac软件包管理工具,如果你还没安装, 可以到这个官网去安装 , 安装好后执行命令:

安装好后,它会列出启动命令,设置root密码命令,复制运行即可

如果你是windows用户, 可以直接去mysql官网下载安装, 安装好后运行即可

工欲善其事,必先利其器。目前市面上可视化工具很多,目前比较火的是 Navicat ,推荐使用,功能也丰富,界面也比较美观。平时开发中,推荐大家多使用工具,因为很多繁琐的事情,点点按钮就结束了,不用去敲黑乎乎的命令了。

安装好后,我们点击左上角的链接,链接到我们的数据库,链接成功后,右击链接名称,点击新建数据库。

多说一点, 在 生产环境 中,数据库操作,我们一般没有编辑操作,通常只有查询数据的操作, 一般用的都是云产品, 比如阿里云的 Rds ,因为维护数据库服务的成本太大了,安全性也不高,所以 生成环境 中的库一般都是用的云产品。如果你是管理员,对账号一定要做权限,和账号分配。

之前我们提到mysql是 关系型(RDBMS) 数据库, 我们需要理解几个关键术语:

如果你看的有点懵逼,没关系,这不影响我们成为 crud body , 本节只是带大家快速入门,不会涉及太多专业领域知识,不要慌~

终于进入正题了,下面我们学习一下mysql的 sql 编写。我们用 Navicat 新建一张表, 点击我们刚刚创建的库,点击表, 然后点击右边 绿色 加号,就可以新建了。 然后会跳出新建字段的界面,输入我们的字段就好, 字段 意思就是数据的一个属性, 这里我们以用户角色表为例,我就不一一带大家新建字段了,这里直接导sql,可以参考, 我也是用工具新建的,创建完的表想复制sql给别人,可以点击右边的 DDL 查看创建表的 sql

表我们插好了,怎么往里边查数据呢? 有两种方式:

我们最常用的就是表的sql操作了,所以我们重点学习数据操作相关的 sql 语法

插入记录:

我们平常业务开发用的最多就是 查询 操作了,往往复杂的 sql 也都是在这里产生, sql 优化也是优化查询

sql 的语法语义化还是比较友好的,我们查询数据就是 select xxx ,在哪查就是 from , 查哪个就是 where ,很容易理解, 所以不用去背它,要去理解它,多写就熟悉了

这里给大家介绍常用的两种:

这种有弊端,就是 distinct 必须跟在字段

按 name 进行分组, GroupBy 后边可以跟多个字段,当是多个字段时,需要满足多条件

对于数据 去重 , 有时候当数据量很大的时候,我们用 sql 查询会非常吃力,我们可以在代码层面上做处理,因为程序计算比较快

本节到此就结束了,我们主要讲了 Mysql 数据库的使用,建议大家多自己练习练习,不要去背语句,要去理解它,适当的做些总结, 最新的代码已经同步到仓库了

有了 sql 基础之后,我们再学习 MyBatis 框架就相对简单了,下期带大家正式学习它~

SpringBoot运行原理

SpringBoot是一个基于Spring开发,集成了大量第三方库配置的javaweb开发框架

pom.xml

父依赖

其中它主要是依赖一个父项目,主要是管理项目的资源过滤及插件。以后我们导入依赖默认是不需要写版本的。

启动器spring-boot-starter

springboot-boot-starter-xxx:spring-boot的场景启动器

spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件。

springBoot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目中引入这些starter即可,所有相关的依赖都会被引进来,我们要用什么功能就导入什么样的场景启动器即可。

@SpringBootApplication

作用:标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot运行这个类的main方法来启动SpringBoot应用。

进入这个注解,里面包含了很多其他注解

@ComponentScan作用:自动扫描并加载符合条件的组件或者bean,将这个bean定义加载到IOC容器中。

@SpringBootConfiguration作用:SpringBoot的配置类,标注在某个类上,表示这是一个SpringBoot的配置类。

进入@SpringBootConfiguration注解查看,这里的@Configuration说明这是一个配置类,配置类对应Spring的xml配置文件。

继续查看@SpringBootConfiguration包含的其他注解

@EnableAutoConfiguration:开启自动配置功能

进入@EnableAutoConfiguration注解查看

@AutoConfigurationPackage自动配置包

@import:Spring底层注解@import,给容器中导入一个组件

@Import({AutoConfigurationImportSelector.class})给容器导入组件

AutoConfigurationImportSelector:自动配置导入选择器。那么它导入哪些组件的选择器呢

这个类中有这样一个方法:getCandidateConfiguration,而在这个方法中有调用了SpringFactoriesLoader类的静态方法loadFactoryNames()方法

进入loadSpringFactories方法

根据全局搜索Spring.factories,打开后是自动配置的文件。

随便打开一个其中的自动配置类看,它们都是javaConfig配置类,都注入了一些Bean

所以,自动配置真正实现是从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中对应的org.springframework.boot.autoconfigure包下的配置项通过反射实例化为对应标注了@Configuration的javaConfig形式的IOC容器配置类,然后将这些都汇总成为一个实例并加载到IOC容器中。

结论:

1.SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值

2.将这些值作为自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作。

3.整个J2EE的整体解决方案和自动配置都在springboot-autoConfigure的jar包中。

4.它会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件。

5.有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。

SpringApplication

这个类主要做了以下四件事

1.推断应用的类型是普通的项目还是web项目

2.查找并加载所有可用初始化器,设置到initializers属性中

3.找出所有的应用程序监听器,设置到listeners属性中

4.推断并设置main方法的定义类,找到运行的主类

(责任编辑:IT教学网)

更多

推荐时间特效文章