声明式注解对XXL-JOB的定时任务代码生效吗?

说明:源于博主的思考,本文验证一下声明式注解,即@Transactional注解,对XXL-JOB的定时任务是否生效。

准备

首先,创建一个需要事务的场景。有两张表,一张部门表,一张用户表,用户隶属于某个部门。当删除部门时,该部门下的用户也需要全部删除。

(User,用户对象)

import lombok.Data;
import java.io.Serializable;

/**
 * 用户实体类
 */
@Data
public class User implements Serializable {

    /**
     * 用户ID
     */
    private Integer id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 用户密码
     */
    private String password;

    /**
     * 用户隶属于哪个部门
     */
    private Integer departId;
}

(Department,部门对象)

import lombok.Data;

import java.io.Serializable;

/**
 * 部门实体类
 */
@Data
public class Department implements Serializable {

    /**
     * 部门ID
     */
    private Integer id;

    /**
     * 部门名称
     */
    private String name;
}

删除记录对应的Mapper方法;

(根据部门ID删除用户)

    <delete id="deleteUserByDepartId" parameterType="int">
        delete from tb_user where depart_id = #{id}
    delete>

(根据ID删除部门)

    <delete id="deleteDepartmentById" parameterType="int">
        delete from tb_dep where id = #{id}
    delete>

(定时任务代码:删除部门,同时删除部门下的所有用户)

    @XxlJob("deleteDepartmentById")
    @Transactional(rollbackFor = Exception.class)
    public void deleteDepartmentById() {
        System.out.println("====================定时任务开始执行====================");

        // 删除部门ID为1的记录
        departmentService.deleteDepartmentById(1);
        System.out.println("====================删除部门完成====================");

		// 手动制造异常
        System.out.println(1/ 0);

        // 删除部门下的用户
        userService.deleteUserByDepartId(1);
        System.out.println("====================删除部门下的用户完成====================");
    }

对应的表内容

声明式注解对XXL-JOB的定时任务代码生效吗?_第1张图片

声明式注解对XXL-JOB的定时任务代码生效吗?_第2张图片

启动

打开XXL-JOB后台,找到这个定时任务,执行一次。

声明式注解对XXL-JOB的定时任务代码生效吗?_第3张图片

查看控制台,可以看到删除部门的SQL有打印出来;

声明式注解对XXL-JOB的定时任务代码生效吗?_第4张图片

查看数据库,部门没有删掉,说明事务起作用了。

声明式注解对XXL-JOB的定时任务代码生效吗?_第5张图片

去掉注解,再试下。

声明式注解对XXL-JOB的定时任务代码生效吗?_第6张图片

部门被成功删掉了,说明代码是没问题的。

声明式注解对XXL-JOB的定时任务代码生效吗?_第7张图片

总结

声明式注解对XXL-JOB的定时任务代码是有效的。

你可能感兴趣的:(java,xxl-job,事务)