gpt4 book ai didi

spring - spring中jdbctemplate和事务管理的java配置

转载 作者:行者123 更新时间:2023-12-01 15:08:50 24 4
gpt4 key购买 nike

我正在使用具有 spring jdbc 事务支持的 spring jdbc。

这是我的配置。

@Configuration
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
@EnableGlobalMethodSecurity(securedEnabled = true)
@PropertySource(name = "props", value = { "classpath:common/jdbc.properties", "classpath:common/mail.properties",
"classpath:common/message.properties", "classpath:common/common.properties" })
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

@Value("${jdbc.url}")
private String jdbcURL;

@Value("${jdbc.username}")
private String jdbcUsername;

@Value("${jdbc.password}")
private String jdbcPassword;

@Value("${jdbc.driver}")
private String jdbcDriver;

/**
* configure jdbc datasource
*
* @return DataSource
*/
@Bean
public DataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource(jdbcURL, jdbcUsername, jdbcPassword);
dataSource.setDriverClassName(jdbcDriver);
return dataSource;
}

/**
* configure jdbc template
*
* @return JdbcTemplate
*/
@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(getDataSource());
}

@Bean
public PlatformTransactionManager txManager() {
return new DataSourceTransactionManager(getDataSource());
}
}

使用此配置交易对我不起作用。我不确定原因,但我能理解的是 -

如您所见,jdbcTemplate() 和 txManager() 这两个方法都调用 getDataSource() 方法,后者又创建 jdbcDataSource。我认为在这两种方法中我都创建了两个 jdbc 数据源,所以 jdbcTemplate 和事务管理器都使用了两个不同的数据源。

所以我的问题是 -

  1. jdbcTemplate 和 transactionManager 是否使用了两个不同的数据源,或者@Bean 可以处理这种情况。
  2. 如果它们都使用两个不同的数据源,那么如何配置它们以便它们使用相同的数据源。

我可以看到在 xml 中配置它很容易,但是使用 java 配置我找不到同时使用 jdbcTemplate 和 transactionManager 的示例。

最佳答案

答案

  1. @Bean 处理这个。因为你在类的顶部有 @Configuration 那么你在完整(相对于精简)模式下运行,因此那些 java @Bean 注释的方法被 Spring 拦截,并确保该方法只被调用一次。顺便说一句,我会称它为 dataSource() 而不是 getDataSource(),因为方法名称是针对 bean 名称的。如果有疑问,请记录一些日志并查看控制台以确认。
  2. 问题 2. 变得无关紧要。

为什么您的交易不起作用?很难说,因为您没有提供它无法工作的完整上下文,但需要考虑一些事项:

  1. 您是否忘记为您的方法/类添加@Transactional?
  2. 您使用的是一种不太常见的原生 AspectJ 编织方法(相对于更常见和更简单的基于 JDK 代理的方法)。我没有使用过它,但根据文档,您必须以不同的方式编译/构建代码,因为它不是纯 Java 方法。

关于spring - spring中jdbctemplate和事务管理的java配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594625/

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