【发布时间】:2018-04-27 08:04:59
【问题描述】:
我正在使用 spring JPA 连接到我的主从数据库。 我创建了两个事务管理器,一个用于主数据库,另一个用于从属数据库,分别命名为 masterTransactionManager 和 slaveTransactionManager。
但是当我尝试使用 @Transactional 注释使用我的 slaveTransactionManager 时,它仍在寻找默认的“transactionManager”。
我已经尝试过使用 Transactional 注释的 value 和 transactionManager 参数。 知道为什么会发生吗?
下面是我的代码:-
@Override
@Transactional(value = "slaveTransactionManager")
public EmailDTO getDataByIdSlave(Long dataId, Long brandId) {
emailDataSlaveRepository.findAll();
return null;
}
以下是我的从属数据配置之一:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = BeanConstant.SLAVE_ENTITY_MANAGER_FACTORY,
transactionManagerRef = DataConfigConstant.SLAVE_TRANS_MANAGER,
basePackages = {DataConfigConstant.SLAVE_REPO_PACKAGE}
)
public class SlaveDataSourceConfiguration {
@Autowired
@Qualifier(BeanConstant.JPA_REPO)
private Map<String, Object> jpaRepo;
@Bean(BeanConstant.SLAVE_DATA_SOURCE_PROPERTIES)
@ConfigurationProperties(DataConfigConstant.SLAVE_DATA_SOURCE)
public DataSourceProperties slaveDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = BeanConstant.SLAVE_DATA_SOURCE)
@ConfigurationProperties(prefix = DataConfigConstant.SLAVE_DATA_SOURCE)
public DataSource slaveDataSource(@Qualifier(BeanConstant.SLAVE_DATA_SOURCE_PROPERTIES) DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean(name = BeanConstant.SLAVE_ENTITY_MANAGER_FACTORY)
public LocalContainerEntityManagerFactoryBean entityManagerFactory(final EntityManagerFactoryBuilder builder,
@Qualifier(BeanConstant.SLAVE_DATA_SOURCE) DataSource dataSource) {
return builder.dataSource(dataSource).properties(jpaRepo).packages(DataConfigConstant.ENTITY_PACKAGE).persistenceUnit
(DataConfigConstant.SLAVE_REPO_PROCESS_NAME).build();
}
@Bean(name = DataConfigConstant.SLAVE_TRANS_MANAGER)
@Qualifier(value = DataConfigConstant.SLAVE_TRANS_MANAGER)
public PlatformTransactionManager barTransactionManager(
@Qualifier(BeanConstant.SLAVE_ENTITY_MANAGER_FACTORY) EntityManagerFactory
barEntityManagerFactory) {
return new JpaTransactionManager(barEntityManagerFactory);
}
【问题讨论】:
-
我很困惑。您在谈论 masterTransactionManager 但示例使用 slaveTransactionManager?
-
嗨西蒙,很抱歉造成混乱,我现在已经解决了。
标签: spring-data-jpa datasource transactionmanager