一篇文章学会MyBatis框架(mybatis 框架)
ccwgpt 2024-09-18 12:24 30 浏览 0 评论
《“爱读书”--给你讲技术》,我来看书,你来进步,让我们开始吧!
本书简介
书名为《Spring+MyBatis企业应用实战》,是本人在学习JavaEE框架时候的一本基础书籍,本书对于SpringMVC和MyBatis框架及相关基础知识讲述的比较清晰,适合需要详细学习Java框架的读者。
本文内容为本书第八章--第十一章,记录和总结了所有MyBatis的知识
MyBatis开发步骤
1.导入MyBatis依赖的Jar包
2.创建持久化类
3.配置持久化类映射,即配置Mapper
4.配置MyBatis配置文件,即mybatis-config.xml
5.在程序中调用对应方法实现持久化操作
核心对象SqlSessionFactory和SqlSession
1.SqlSessionFactory
SqlSessionFactory是MyBatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder对象来获得,SqlSessionFactory是线程安全的, SqlSessionFactory一旦被创建,在应用执行期间都存在,不需要重复创。
SqlSessionFactory是创建SqlSession的工厂,创建方法如下:
SqlSession openSession():创建SqlSession对象
2.SqlSession
SqlSession是执行持久化操作的对象,类似于JDBC中的Connection。它是应用程序与持久存储层之间执行交互操作的一个单线程对象。
SqlSession对象包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行已映射的 SQL语句。
每个线程都应该有它自己的SqlSession实例,是线程不安全的。使用完SqlSession之后必须要关闭它。
SqlSession常用方法如下:
int insert(String statement):插入方法,参数是Mapper中<insert>元素的id,返回执行的行数
int insert(String statement, Object parameter):插入方法,parameter是插入所需的参数
int update(String statement):更新方法,参数是Mapper中<update>元素的id,返回执行的行数
int update(String statement, Object parameter):更新方法,parameter是更新所需的参数
int delete(String statement):删除方法,参数是Mapper中<delete>元素的id,返回执行的行数
int delete(String statement, object parameter):删除方法,parameter是删除所需的参数
<T>T selectOne(String statement):查询方法,参数是Mapper中<select>元素id,返回一条数据
<T>T selectOne(String statement, Object parameter):查询方法
<E> List<E> selectList(String statement):查询方法,参数是Mapper中<select>元素id,返回多条数据
<E> List<E> selectList(String statement, Object parameter):查询方法
<E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds):分页查询,RowBounds对象用于分页,有两个属性:offset指查询的当前页数;limit指当前也显示的数据量
<K,V> Map<K,V> selectMap(String statement, String mapkey):查询方法,mapKey是返回数据的一个列名,查询结果将被封装成一个Map返回,key就是传入的mapkey
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey):查询方法
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds):分页查询
void select(String statement, ResultHandler handler):查询方法,ResultHandler用来处理查询返回的复杂结果集,用于多表查询
void select(String statement, Object parameter, ResultHandler handler):查询方法
void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler):分页查询
void commit():提交事务
void rollback():回滚事务
void close():关闭SqlSession对象
Connection getConnection():获取JDBC数据库连接
<T>T getMapper(Class<T> type):返回mapper接口的代理对象,该对象关联了SqlSession,开发者可通过该对象直接调用方法操作数据库
MyBatis配置文件
1.MyBatis SqlSessionFactory初始化过程
(1)调用SqlSessionFactoryBuilder对象的build(inputStream)方法
(2)SqlSessionFactoryBuilder会根据输入流inputStream等信息创建XMLConfigBuilder对象
(3)SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法
(4)XMLConfigBuilder对象解析XML配置文件返回Configuration对象
(5)SqlSessionFactoryBuilder根据Configuration对象创建一个DefaultSessionFactory对象
(6)SqlSessionFactoryBuilder返回DefaultSessionFactory对象给客户端使用
2.MyBatis配置文件属性
- 顶层configuration 配置
- properties 属性
- settings 设置
- typeAliases 类型命名
- typeHandlers 类型处理器
- objectFactory 对象工厂
- plugins 插件
- environments 环境
- environment 环境变量
- transactionManager 事务管理器
- dataSource 数据源
- databaseIdProvider 数据库厂商标识
- mappers 映射器
(1)properties
在classpath中增加db.properties属性文件
配置如下:
<properties resource="db.properties"/>
调用属性文件的值:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
(2)setting
设置MyBatis运行时参数
配置如下:
<settings>
<setting name="" value=""/>
</settings>
参数包含如下:
(3)typeAliases
类型别名是为Java类型设置的一个短的名字。它只和XML配置有关,仅用来减少类完全限定名的冗余。
<typeAliases>
<typeAlias alias="user" type="org.fkit.domain.User"/>
</typeAliases>
MyBatis内建了java类型的别名如下:
(4)typeHandlers
类型处理器将获取的值以合适的方式转换成Java类型
(5)objectFactory
MyBatis每次创建新实例时,都会使用一个对象工厂。如何想覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现,继承并重写DefaultObjectFactory。配置如下:
<objectFactory type="org.fkit.factory.ExampleObjectFactory">
</objectFactory>
(6)environments
environments配置就是数据源的配置。每个SqlSessionFactory实例只能选择一个环境,即每个数据库对应一个SqlSessionFactory实例。
配置方式如下:
(1)要配置默认的环境id
(2)每个environment要定义环境id
(3)需要配置事务管理器,包括JDBC和MANAGED
(4)需要配置数据源,包括POOLED、UNPOOLED、JNDI
(7)mapper
mapper映射器告诉MapBatis去哪里找映射文件。可以使用相对于类路径的引用、全限定资源定位符或类名包名等。配置如下:
<!-- 使用类径路查找资源文件 -->
<mappers>
<mapper resource="org/fkit/mapper/UserMapper.xml"/>
</mappers>
<!-- 使用本地文件 -->
<mappers>
<mapper url="file:///c:/mapper/UserMapper.xml"/>
</mappers>
<!-- 使用接口类 -->
<mappers>
<mapper class="org.fkit.mapper.UserMapper"/>
</mappers>
<!-- 使用包名 -->
<mappers>
<package name="org.fkit.mapper"/>
</mappers>
MyBatis日志信息配置
配置日志实现方式
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
</configuration>
配置mapper接口所对应的日志级别
(1)采用properties文件配置
//设置某个方法的日志级别
log4j.logger.org.fkit.mapper.UserMapper.selectUser=DEBUG
//设置包的日志级别
log4j.logger.org.fkit.mapper=DEBUG
(2)采用xml文件配置
//设置某个方法的日志级别
<logger name="org.fkit.mapper.UserMapper.selectUser">
<level value="DEBUG"/>
</logger>
//设置包的日志级别
<logger name="org.fkit.mapper">
<level value="DEBUG"/>
</logger>
深入Mapper映射文件
SQL映射文件常用元素:
- select:映射查询语句
- insert:映射插入语句
- update:映射更新语句
- delete:映射删除语句
- sql:可被其他语句引用的可重用语句块
- cache:给定命名空间的缓存配置
- cache-ref:其他命名空间缓存配置引用
- resultMap:用来描述如何从数据库结果集加载对象
1.select
select元素用来映射查询语句
参数符号#{id},是指创建一个预处理语句参数,就是JDBC SQL语句中的?
select元素属性如下:
- id:在命名空间中唯一的标识符,可以被用来引用这条语句
- parameterType:将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset
- resultType:返回值的类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。返回时可以使用resultType或resultMap
- resultMap:外部resultMap的命名引用
- flushCache:如果设置为 true,则任何时候只要语句被调用,都会导致本地缓存和二级缓存都被清空,默认值为false
- useCache:如果设置为 true,将会导致本条语句的结果被二级缓存,在select元素当中默认值为 true
- timeout:这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset
- fetchSize:其尝试使每次批量返回的结果行数和这个设置值相等。默认值为 unset
- statementType:值为STATEMENT、PREPARED或CALLABLE。这会让MyBatis分别使用 JDBC 中的Statement、PreparedStatement或CallableStatement,默认值为PREPARED
- resultSetType:结果集的类型,值为FORWARD_ONLY、SCROLL_SENSITIVE或SCROLL_INSENSITIVE,默认值为unset
- databaseId:如果配置了databaseIdProvider,MyBatis会加载所有的不带databaseId或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略
- resultOrdered:这个设置仅针对嵌套结果select语句适用:如果为true,就是假设包含了嵌套结果集或分组,这样的话当返回一个主结果行的时候,就不会发生对前面结果集引用的情况。这就使得在获取嵌套的结果集时不至于导致内存不够用。默认值为false
- resultSets:这个设置仅对多结果集的情况适用,它将列出语句执行后返回的结果集并给每个结果集起一个名称,名称是逗号分隔的
2.insert、update和delete
常用属性举例如下:
insert、update 和 delete元素的属性大多和select的一致,它们特有的属性如下:
- useGeneratedKeys:(仅对 insert 和 update 有用)这会令MyBatis使用JDBC的getGeneratedKeys方法来获取由数据库内部生成的主键,默认值为false
- keyProperty:(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis会通过getGeneratedKeys的返回值或者通过insert语句的selectKey子元素设置它的键值,默认为unset
- keyColumn:(仅对insert和update有用)通过生成的键值设置表中的列名,这个设置仅对某些数据库(像PostgreSQL)是必须的,当主键列不是表中的第一列时需要设置
insert插入主键的方式
(1)如果数据库支持主键生成方式(如:MySQL和SQL Server)
(2)如果数据库采用其他方式生成主键(如:Oracle)
3.sql
sql元素被用来定义可重用的SQL代码段,可以包含在其他语句中,
定义SQL
使用SQL
4.参数(Parameters)
简单数据类型
复杂对象
5.ResultMaps
resultMap元素作用是讲结果集中取出的数据转换成开发者所需的对象
(1)单表映射
举例如下:
resultType表示将返回的结果集转换成一个Map集合
当然也可以将结果集转换成持久化对象
默认情况下,MtBatis会将查询到的数据列和需要返回的对象的属性逐一进行匹配赋值,但如果查询到的数据列和需要返回的对象属性不一致,就无法自动赋值了。这时需要使用resultMap处理。
如下图:
上图使用resultMap将持久化对象属性和表的字段进行匹配
resultMap常用属性如下:
- id:唯一标识符
- type:实际返回的类型
- <id>子元素指定数据库表的主键,column为列名,property为对象属性
- <result>子元素指定数据库表的普通列
(2)多表关联映射(1对1)
多表查询的情况,当查询某个对象同时关联查询了另一个对象时使用<association>
<!-- 映射学生对象的resultMap -->
<resultMap id="studentResultMap" type="org.fkit.domain.Student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<!-- 关联映射班级对象 -->
<association property="clazz" column="clazz_id"
javaType="org.fkit.domain.Clazz" select="selectClazzWithId"/>
</resultMap>
<!-- 根据班级id查询班级 -->
<select id="selectClazzWithId" resultType="org.fkit.domain.Clazz">
select * from TB_CLAZZ where id = #{id}
</select>
<!-- 查询所有学生信息 -->
<select id="selectStudent" resultMap="studentResultMap">
select * from TB_STUDENT
</select>
说明如下:
- 查询所有的学生数据,此时返回的不是简单的Student对象,因为Student对象中还包含了Clazz对象,所以使用resultMap去映射返回类型
- resultMap中查询的班级id列clazz_id则使用了关联映射<association/>,元素属性如下:
column:数据库表列名
property:返回的对象类型
javaType:property属性对应的java类型
select:执行一条查询语句,将查询到的数据封装到property所代表的对象中
(3)多表关联映射(1对多)
多表查询的情况,当查询某个对象同时关联查询了List对象时使用<collection>
<!-- 映射班级对象的resultMap -->
<resultMap id="clazzResultMap" type="org.fkit.domain.Clazz">
<id property="id" column="id"/>
<result property="code" column="code"/>
<!-- 一个班级对应多个学生,该属性为一个集合映射 -->
<collection property="students" javaType="ArrayList"
column="id" ofType="org.fkit.domain.Student"
select="selectStudentWithId"/>
</resultMap>
<!-- 根据班级id查询学生 -->
<select id="selectStudentWithId" resultType="org.fkit.domain.Student">
select * from TB_STUDENT where clazz_id = #{id}
</select>
<!-- 查询所有班级信息 -->
<select id="selectClazz" resultMap="clazzResultMap">
select * from TB_CLAZZ
</select>
说明如下:
- 查询所有的班级数据,此时返回的不是简单的Clazz对象,因为Clazz对象中还包含了学生的集合对象,所以使用resultMap去映射返回类型
- 查询班级所有学生时使用了集合映射<collection/>,属性如下:
property:返回的集合类型的属性名
javaType:property属性对应的java类型
ofType:集合中的类型
column:使用当前表的哪个列名作为查询集合的条件
select:执行一条查询语句,将查询到的数据封装到property所代表的对象中
fetchType:设置集合属性加载的方式,包括eager和lazy,eager立即加载,lazy延迟加载
一般来说1对多关联大多被设置成lazy,全局设置方式如下:
//mybatis-config.xml文件
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
(4)多表关联映射(多对多)
多对多关联,单独看每个对象的映射,其实就是1对1和1对多的组合。所以只需组合使用<association>和<collection>元素即可。
MyBatis调用存储过程
1.操作数据的存储过程
插入数据
存储过程如下:
配置如下:
(1)调用存储过程时,需要把statementType属性的值设置为CALLABLE
(2)call是用来调用存储过程的关键字,需要注意的是,OUT模式的参数必须指定jdbcType,这是因为在IN模式下,MyBatis提供了默认的jdbcType,而在OUT模式下没有提供
修改数据
存储过程如下:
配置如下:
删除数据
存储过程如下:
配置如下:
2.查询数据的存储过程
存储过程如下:
配置如下:
调用名为select_user的存储过程查询所有User数据并返回List,查询到的每一条数据会被封装到User对象中
3.根据条件查询的存储过程
存储过程如下:
配置如下:
MyBatis事务管理
1.Transaction接口
MyBatis事务核心是org.apache.ibatis.transaction.Transaction接口。Transaction接口有两个实现类:
- JdbcTransaction
- ManagedTransaction
同时MyBatis还设计了org.apache.ibatis.transaction.TransactionFactory接口,实现类:
- JdbcTransactionFactory
- ManagedTransactionFactory
以上类可用来获取事务的实例对象
MyBatis管理事务的两种方式:
(1)使用JDBC的事务管理机制。利用java.sql.Connection对象完成对事务的提交(commit)、回滚(rollback)和关闭(close)等操作
(2)使用MANAGED的事务管理机制。这种机制MyBatis自身不会去实现事务管理,而是让容器如WebLogic、JBoss等来实现对事务的管理
2.事务的配置创建和使用
(1)事务的配置
元素<transactionManager>的type决定我们用什么类型的事务管理机制
(2)事务工厂的创建
MyBatis的事务创建是由TransactionFactory事务工厂来完成的。如果type="JDBC",则MyBatis会创建一个JdbcTransactionFactory的实例;如果type="MANAGED",则MyBatis 会创建一个MangedTransactionFactory的实例
(3)事务工厂TransactionFactory
JdbcTransactionFactory会创建JDBC类型的Transaction,即JdbcTransaction。类似地,ManagedTransactionFactory也会创建ManagedTransaction
(4)JdbcTransaction
JdbcTransaction可直接使用JDBC的提交和回滚事务管理机制。它依赖于从dataSource中取得的连接 connection来管理transaction的作用域。如果将autocommit设置为on,开启状态的话,则它会忽略commit和rollback。
MyBatis缓存机制
1.一级缓存(SqlSession级别)
在操作数据库时需要构造SqlSession对象,在SqlSession对象中有一个HashMap用于存储缓存数据。不同的SqlSession之间的缓存数据区域是互相不影响的。
如果SqlSession执行了DML操作(insert、update、delete),并提交到数据库,MyBatis则会
清空SqlSession中的一级缓存
Mybatis默认开启一级缓存,不需要进行任何配置
MyBatis的缓存机制是基于id进行缓存的,MyBatis使用HashMap缓存数据时,是使用对象的id作为key,对象作为value
2.二级缓存(mapper级别)
使用二级缓存时,多个SqlSession使用同一个mapper的SQL语句去操作数据库,得到的数据会存在二级缓存区域,它同样是使用HashMap进行数据存储的。相比一级缓存 SqlSession,二级缓存的范围更大,多个SqlSession可以共享二级缓存中的数据,二级缓存是跨SqlSession的。
MyBatis默认没有开启二级缓存,需要在setting全局参数中配置开启二级缓存。
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
MyBatis的二级缓存是和命名空间绑定的,即二级缓存需要配置在Mapper.xml映射文件或者Mapper接口中。使用<cache>元素
在映射文件中,命名空间就是XML根节点mapper的namespace属性。在Mapper接口中,命名空间就是接口的全限定名称
配置如下:
- 映射语句文件中的所有SELECT语句将会被缓存
- 映射语句文件中的所有INSERT、UPDATE、DELETE语句会刷新缓存
- 缓存会使用LRU(最近最少使用)策略来回收
- 缓存会被视为read/write(可读/可写)的,这意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改
cache元素属性如下:
- flushInterval:刷新间隔。可以被设置为任意的正整数,单位毫秒。默认没有刷新间隔,缓存仅调用语句时刷新
- size:缓存数目。可以被设置为任意正整数。默认值是1024
- readOnly:只读。该属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改。可读写的缓存会返回缓存对象的拷贝。这种方式会慢一些,但是安全,因此默认是false。
- eviction:回收策略,默认为LRU。有如下几种:
LRU:最近最少使用的策略,移除最长时间不被使用的对象
FIFO: 先进先出策略,按对象进入缓存的顺序来移除它们
SOFT: 软引用策略,移除基于垃圾回收器状态和软引用规则的对象
WEAK。 弱引用策略,更积极地移除基于垃圾收集器状态和弱引用规则的对象
MyBatis的注解配置
1.常用注解
- Select:映射查询的SQL语句
- SelectProvider:select语句的动态SQL映射。允许指定一个类名和 一个方法在执行时返回运行的查询语句
- Insert:映射插入的SQL语句
- InsertProvider:insert语句的动态SQL映射
- Update:映射更新的SQL语句
- UpdateProvider:update语句的动态SQL映射
- Delete:映射删除的SQL语句
- DeleteProvider:delete语句的动态SQL映射
- Result:在列和属性之间的单独结果映射。属性包括:id、 column、property、javaType、jdbcType、type Handler、one、many。id 属性是一个布尔值,表示是否被用于主键映射。one 属性是单独的映射,和XML配置中的 <association>相似,而many属性是对集合而言的,和XML配置的<collection>相似
- Results:多个结果映射(Result)列表
- Option: 提供配置选项的附加值,它们通常在映射语句上作为附加功能配置
- One:复杂类型的单独属性值映射。必须指定select属性,表示已映射的SQL语句的完全限定名
- Many:复杂类型的集合属性映射。必须指定select属性,表示已映射的SQL语句的完全限定名
- Param:当映射器方法需要多个参数时,这个注解可以被应用于映射器方法参数来给每个参数取一个名字。否则,多参数将会以它们的顺序位置和SQL语句中的表达式进行映射,这是默认的。使用 @Param("id")时,SQL中参数应该被命名为#{id}
2.select、insert、update、delete注解
3.One注解
关联映射的对象
被关联的对象
4.Many注解
关联映射对象
被关联的对象
5.存储过程调用
6.二级缓存
相关推荐
- 十分钟让你学会LNMP架构负载均衡(impala负载均衡)
-
业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...
- AGV仓储机器人调度系统架构(agv物流机器人)
-
系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...
- 远程热部署在美团的落地实践(远程热点是什么意思)
-
Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...
- springboot搭建xxl-job(分布式任务调度系统)
-
一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...
- 大模型:使用vLLM和Ray分布式部署推理应用
-
一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...
- 国产开源之光【分布式工作流调度系统】:DolphinScheduler
-
DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...
- 简单可靠高效的分布式任务队列系统
-
#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...
- 虚拟服务器之间如何分布式运行?(虚拟服务器部署)
-
在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...
- 一文掌握 XXL-Job 的 6 大核心组件
-
XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...
- 京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?
-
京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...
- 企业级项目组件选型(一)分布式任务调度平台
-
官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...
- python多进程的分布式任务调度应用场景及示例
-
多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...
- SpringBoot整合ElasticJob实现分布式任务调度
-
介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...
- 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
-
Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...
- SpringBoot任务调度:@Scheduled与TaskExecutor全面解析
-
一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)