gpt4 book ai didi

java - Spring @Transactional 基于方法级别的条件

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:01 25 4
gpt4 key购买 nike

我有一个具有可配置事务行为的方法,例如基于 boolean 值,它应该在该方法上应用 @Transactional。有没有这样的:

@Transactional(if myBooleanVariable is true)
public boolean executeQueries(List<String> queries) {
Iterator<String> it = queries.iterator();
}

最佳答案

是的,有条件地注入(inject)bean是可能的。有很多方法,但是,我建议您使用配置文件。

它允许您根据配置文件同时拥有更多未命名的 bean。

@Bean
@Profile("!dev")
public class MyClass1 implements MyInterface {}

@Bean
@Profile("dev")
public class MyClass2 implements MyInterface {}

您可以在 Java 配置类中使用配置文件:

@Configuration
public class MyWebApplicationInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("spring.profiles.active", "dev");
}
}

然后注释 @Autowired 将根据 Activity 配置文件找到要注入(inject)的正确实现。阅读更多关于 Baeldung's websize 的信息,我从中获取示例。


第二种方式是使用注解@Conditional ,它根据已实现接口(interface)的返回方法有条件地注入(inject) bean Condition .

@Bean
@Conditional(MyClass1Condition.class)
public class MyClass1 implements MyInterface {}

@Bean
@Conditional(MyClass2Condition.class)
public class MyClass2 implements MyInterface {}

下面是实现框架的样子:

public class MyClass1Condition implements Condition {

@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// perform your logic
}
}

关于java - Spring @Transactional 基于方法级别的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46543887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com