3
我使用spring jdbc支持spring jdbc。jdbctemplate的Java配置和彈簧事務管理
這是我的配置。
@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()方法,其中inturn創建jdbcDataSource。我認爲在我創建兩個jdbc dataSource的方法中,所以jdbcTemplate和事務管理器都使用兩個不同的dataSource。
所以我的問題是 -
- 是真的JdbcTemplate類transactionManager在使用兩個不同的數據源或@Bean可以處理這種情況。
- 如果它們都使用兩個不同的dataSource,那麼如何配置它們以便它們使用相同的dataSource。
我可以看到很容易在xml中配置它,但使用java配置我找不到同時使用jdbcTemplate和transactionManager的示例。