• SpringTask任务调度和声明式事务配置


    是哪段话激励着你不断向前摆脱逆境?

    一,SpringTask xml写法

    SpringTask已经纳入到spring核心技术里面了,直接导入spring的上下文坐标就好了

     
           
                org.springframework
                spring-context
                5.3.29
           

       

    测试代码 

    1. package com.apesource.job;
    2. import java.util.Date;
    3. /**
    4. *
    5. * @version 1.0
    6. * @since 2023/9/16
    7. */
    8. public class MyJob {
    9. public void jobMethod1(){
    10. System.out.println("===>开启任务调度1"+new Date());
    11. }
    12. public void jobMethod2(){
    13. System.out.println("===>开启任务调度2"+new Date());
    14. }
    15. }

    1.1cron表达式   

    cron表达式:秒 分 时 日 月 星期 【年】年份可以忽略,默认是今年。

    "?"===>占位符忽略不计  其实日月已经可以确定天数了,如果在加一个星期,可能会出错。
    "/"===>递增至  3/6秒        3,9,15...秒
    "-"===>范围 3-6时 

     ","===> 3,6,9 月

       
       

       

    pool-size是调度池中初始化线程数量
       
        scheduled-tasks scheduler="poolTaskScheduler">

    scheduled-tasks:依托的是调度池中线程,所以scheduler属性需要绑定上面task:scheduler的id
           

    方法+任务:需要执行的方法
    调度:执行方法的逻辑 调度体现在cron表达式上

           
           
       

    1.2如何使用不同的task命名空间?

     xmlns="http://www.springframework.org/schema/beans"
           xmlns:task="http://www.springframework.org/schema/task"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/task
           http://www.springframework.org/schema/task/spring-task.xsd"

     二,SpringTask ann写法

    @Component
    public class MyJob {

        @Scheduled(cron = "* * * * * ?")
        public void  jobMethod1(){
            System.out.println("===>开启任务调度1"+new Date());
        }

        public void  jobMethod2(){
            System.out.println("===>开启任务调度2"+new Date());
        }
    }

    1. <context:component-scan base-package="com.apesource">context:component-scan>
    2. <task:annotation-driven>task:annotation-driven>

    三,事务管理xml版

    事务管理在service层,声明式事务扔掉了通知,由spring去执行。

    3.1PlatformTransactionManager


    此接口是spring的事务管理器,它里面提供了我们常用的操作事务的方法,我们在开发中都是使用的PlatformTransactionManager实现类,其中根据dao层用到的技术,我们选择了使用Spring JDBC或iBatis进行持久化数据的DataSourceTransactionManager

    3.2事务的定义信息对象 TransactionDefinition


    String getName()                获取事务对象名称
    int getlsolationLevel()         获取事务隔离级          ☆
    int getPropagationBehavior()    获取事务传播行为        ☆
    int getTimeout()                获取事务超时时间
    boolean isReadOnly()            获取事务是否只读        

    3.3事务的隔离级别

    isolation:指定事务的隔离级别。默认值是使用数据库的默认隔离级别。

    3.4事务的传播行为(七种)

    并行事务发生时,如何做。propagation:指定事务的传播行为。 

    在xml中的配置 

      xmlns:tx="http://www.springframework.org/schema/tx"

        
        
            
            
        
    绑定数据源

        
        
            
            
            
            
        

    四,事务管理注解版


        
            
            
        


        
        

    4.1@Transactional


    该注解的属性和xml中的属性含义一致。该注解可以出现在接口上,类上和方法上。
    出现接口上,表示该接口的所有实现类都有事务支持。
    出现在类上,表示类中所有方法有事务支持
    出现在方法上,表示方法有事务支持。
    以上三个位置的优先级:方法>类>接口 

    1. @Service
    2. @Transactional(readOnly=false,propagation= Propagation.SUPPORTS,isolation = Isolation.DEFAULT)
    3. public class AccountServiceImp implements IAccountService {
    4. @Override
    5. @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    6. public void transfer(String sourceName, String targetName, int money) {
    7. //2.1查询转账人与被转账人的信息
    8. Account sourceAccount = dao.findAccountByName(sourceName);
    9. Account targetAccount = dao.findAccountByName(targetName);
    10. //2.2开始转账
    11. sourceAccount.setAmoney(sourceAccount.getAmoney()-money);
    12. targetAccount.setAmoney(targetAccount.getAmoney()+money);
    13. //2.3修改数据库
    14. dao.updateAccountById(sourceAccount);
    15. //模拟转账事故
    16. int a = 10/0;
    17. dao.updateAccountById(targetAccount);
    18. }
    19. }

     

     

     

  • 相关阅读:
    一文看懂TikTok养号
    前端框架中的路由(Routing)和前端导航(Front-End Navigation)
    教你几招,快速实现Word转PDF操作
    大数据运维之MySQL备份及恢复
    Echarts 实现两两柱图重叠(背景和实际值柱图)
    .NET周刊 【12月第3期 2023-12-24】
    Idea之常用插件
    java 循环跳转控制语句
    pdf转cad怎么弄?教你这几种快速转换cad的方法
    博云 Kubernetes 开源榜单贡献度进入全球前十
  • 原文地址:https://blog.csdn.net/weixin_51704612/article/details/132958934