事务钩子函数

public class TransactionalSupport implements TransactionSynchronization {

    private Supplier supplier;

    public TransactionalSupport(Supplier supplier) {
        this.supplier = supplier;
    }

    @Override
    public void afterCommit() {
        supplier.get();
    }
}

//业务逻辑事务提交之后再执行日志操作
TransactionalSupport transactionalSupport = new TransactionalSupport(()-> {
    try {
         contextBean.doCommonLogAfterBusiness(finalMap);
    } catch (Exception e) {
         logger.error("日志保存失败,异常信息:{},入参:{},结果:{}",   e.getMessage(),                                         param, result);
         e.printStackTrace();
   }
       return null;
  });
           TransactionSynchronizationManager.registerSynchronization(transactionalSupport);

//mybatis 代码自动生成

https://www.cnblogs.com/lanomw/p/12426985.html

//java编译动态生成class文件

public class CompilerUtil {

    public static Class generateClass(String javaFilename, String packageName, String javaCode) throws Exception {

        JavaStringCompiler compiler = new JavaStringCompiler();

        String prefix = String.format("package %s;", packageName);

        Map<String, byte[]> map = compiler.compile(javaFilename + ".java", prefix + "\n" + javaCode);

        return compiler.loadClass(packageName + "." + javaFilename, map);
    }

    public static void main(String[] args) throws Exception {
        String teacherCode = "public class Teacher extends Person {\n" +
                "\n" +
                "    @Override\n" +
                "    public void sayHello() {\n" +
                "        System.out.println(\"My name is \" + getName() + \", I am a teacher\");\n" +
                "    }\n" +
                "}\n";

        Class teacherClass = generateClass("Teacher", "com.example.demo.classg", teacherCode);
        Person person = (Person) teacherClass.newInstance();
        person.setName("Tom");
        person.sayHello();
    }
}

实战:一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了_公众号:方志朋的博客-优快云博客GitHub - pengziliu/GitHub-code-practice: GitHub代码实战系列

在Spring Boot中,你可以通过配置事务管理器和声明式事务来使用事务钩子函数,也称为切面编程(AOP)。以下是一些步骤: 1. **启用事务管理**:首先,在`application.properties`或`application.yml`文件中添加Spring Data JPA相关的依赖项,并启用事务管理。例如: ```properties spring.jpa.hibernate.ddl-auto=update spring.datasource.platform=h2 spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.transaction-manager-type=jpa ``` 2. **配置数据源和事务管理器**:在`src/main/resources`下的`spring-boot-devtools.properties`或`application.properties`中设置数据源和事务管理器。 3. **选择事务管理策略**:Spring支持多种事务管理策略,如JDBC、PlatformTransactionManager(默认)和JpaTransactionManager。选择适合你的应用的策略。 4. **定义事务注解**:使用Spring提供的注解,如`@Transactional`,标记需要进行事务控制的方法。例如: ```java @Service public class UserService { @Transactional public User createUser(User user) { // 业务操作 } } ``` 5. **创建事务顾问(Aspect)**:如果想在特定条件下触发事务,可以创建一个事务切面,使用`@Before`、`@AfterSuccess`等通知注解定义事务钩子。这通常在`@Configuration`类上使用`@EnableTransactionManagement`开启。 6. **异常传播行为**:Spring允许你定义异常如何影响当前事务。常见的有`PROPAGATION_REQUIRED`(默认)、`PROPAGATION_SUPPORTS`、`PROPAGATION_NESTED`等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值