源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Spring Boot多数据源及其事务管理配置方法

  • 时间:2021-06-17 04:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Spring Boot多数据源及其事务管理配置方法
[b]准备工作[/b] 先给我们的项目添加Spring-JDBC依赖和需要访问数据库的驱动依赖。 [b]配置文件[/b]
spring.datasource.prod.driverClassName=com.mysql.jdbc.Driver
spring.datasource.prod.url=jdbc:mysql://127.0.0.1:3306/prod
spring.datasource.prod.username=root
spring.datasource.prod.password=123456

spring.datasource.dev.driverClassName=com.mysql.jdbc.Driver
spring.datasource.dev.url=jdbc:mysql://127.0.0.1:3306/dev
spring.datasource.dev.username=root
spring.datasource.dev.password=123456
[b]JavaConfig[/b] 首先建立Java配置类,为其添加上注解[code]@Configuration[/code]。
@Configuration
public class JdbcConfig {

}
[b]配置数据源[/b] 给其中一个数据源加上[code]@Primary[/code]。因为在Spring Boot Jdbc的自动配置过程中,会对于开发者透明地使用dataSource进行一些相关配置,所以当有两个Datasource实现类时,Spring Boot将无法确定使用哪一个。 当我们不为@Bean指定名字时,Spring会默认使用方法名作为Bean的名字,所以下面两个数据源的名字分别为[code]prodDataSource[/code]和[code]devDataSource[/code]。
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.prod")
public DataSource prodDataSource(){
 return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "spring.datasource.dev")
public DataSource devDataSource(){
 return DataSourceBuilder.create().build();
}
配置文件里的属性名是不需要写成[code]spring.datasource.xxx[/code]的形式的,写成[code]a.b.c.url[/code]也没有问题,只要在配置bean时指定前缀为[code]a.b.c [/code] [b]配置JdbcTemplate[/b] 在此我们返回的不是[code]JdbcTemplate[/code]的实现,而是其实现接口[code]JdbcOperations[/code]。 Bean的入参Spring会自动其相符合的Bean注入,所以在此我们不需要@Autowired相应的Bean再使用。 Spring会将变量名与Bean的名字做关联。在此我们入参数据源的名称和上面数据源Bean的方法名相匹配,所以也不需要用@Qualifier注解指定是哪个Bean。
@Bean
public JdbcOperations prodJdbcOperations(DataSource prodDataSource) {
 return new JdbcTemplate(prodDataSource);
}

@Bean
public JdbcOperations devJdbcOperations(DataSource devDataSource) {
 return new JdbcTemplate(devDataSource);
}

[b]使用[/b] 直接注入[code]JdbcOperations[/code]即可 如上文的说明,不需要[code]@Qualifier[/code]等的注解。
 @Autowired
 private JdbcOperations devJdbcOperations;

 @Autowired
 private JdbcOperations prodJdbcOperations;
[b]事务配置[/b] 开启事务管理功能 在项目入口类,添加以下注解开启事务管理功能。
@EnableTransactionManagement
[b]配置事务管理器[/b]
@Bean
public PlatformTransactionManager prodTransactionManager(DataSource prodDataSource) {
 return new DataSourceTransactionManager(prodDataSource);
}

@Bean
public PlatformTransactionManager devTransactionManager(DataSource sitDataSource) {
 return new DataSourceTransactionManager(sitDataSource);
}
[b]使用[/b] 使用时只需在需要事务的方法添加注解[code]@Transactional[/code],并指定其value值即可。同样的,value值与相应的方法名相匹配即可。
@Transactional(value = "prodTransactionManager")
public void prod() {
 prodJdbcOperations.queryForList("SELECT * FROM USER");
}

@Transactional(value = "devTransactionManager")
public void dev() {
 devJdbcOperations.queryForList("SELECT * FROM USER");
}

注意,@Transactional配置事务有很多限制,如方法必须为public,同一个类中无该注解的方法调用有注解的方法事务不生效等。该注解还可以配置在接口类等地方,具体用法请参考Spring官方文档相应章节[url=http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html]http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html[/url] 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部