spring怎样设置动态定时任务

spring怎样设置动态定时任务,第1张

在spring 中 基于注解的 定时配置很简单,只需要三步哦,如下: 1、在类名前加@Component注解,标记该bean,也就是配置扫描标记。 2、在该类下的方法前加定是配置注解,@Schedule("cron= 0/30 * * * * *")。 3、添加配置文件(如下)。

在经历的几轮面试中,每一轮都问到了事务相关的内容,让我越发感到事务的重要性。

如:

MySQL事务隔离级别?分别解释下他们的含义,默认的事务隔离级别是什么,Oracle的呢?

Spring事务传播级别?分别代表什么含义

Spring事务是如何处理的?自己能写出来吗?

那么今天一起看一下Spring的事务处理方式。我自己想手写事务的时候,发现还是太依赖Spring框架提供的功能了,自己写对我来说还是有一定的难度,在此分析一下Spring的实现方式。

Spring整个框架包含很多的过程,其中每一个方法内部都包含了很多要处理的事情,都是细节性的问题,我们先不去深究那些细节,感兴趣的可以自己看看。

之前有文章介绍了Spring AOP入门与Advice相关的内容,我之前的文章有写,AOP利用的是动态代理,在我们的方法中,有些方法我们需要进行增强,比如方法周围加上事务的处理,AOP中有个接口是 方法拦截器,借助这个接口我们可以在想要 *** 作的方法外加一些 *** 作。

事务拦截的对象是TransactionInterceptor,可以看出它继承了TransactionAspectSupport. TransactionAspectSupport内部是真正的 *** 作部分。

Spring事务中有几个对象很重要,理解了这几个对象就相当于抓住了总体,剩下的一些细节多花些时间就懂了。

创建事务后返回的对象是TrnsactionInfo对象,因此有必要看一下这个对象都包含了什么信息:

事务传播级别处理是事务中的一个重点,那么源码中如何处理的呢?从创建事务部分开始看

tm.getTransaction,如何获取事务的呢?

真正启动事务的是doBegin方法,其内部把autoCommit设置为false

里面还涉及到一个对象TransactionSynchronizationManager,事务同步管理器,主要是一个Map对象,映射当前Datasource到当前的连接。

另外可以看到,如果是新的事务,当传播级别为这三个的时候,会新建事务

TransactionDefinition.PROPAGATION_REQUIRED

TransactionDefinition.PROPAGATION_REQUIRES_NEW TransactionDefinition.PROPAGATION_NESTED

当传播界别为PROPAGATION_MANDATORY,抛出异常

对存在的事务进行处理

如何得知是否存在事务了呢?

事务对象是否有Connection,并且Connection的事务是否活跃,

(txObject.hasConnectionHolder() &&txObject.getConnectionHolder().isTransactionActive())

Transaction对象是由TransactionSynchronizationManager来控制的。其判断当前的数据源是否有连接对应,用的是ThreadLocal

关于Spring事务处理的部分,先说到这里。主要是提到了事务传播级别与Spring事务的大体架构,更多细节的内容,还要一起探索啊。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11450882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存