我正在使用spring JPA连接到我的主人和我的主人。奴隶数据库。 我创建了两个事务管理器,一个用于master数据库和另一个用于奴隶和分别命名为masterTransactionManager和slaveTransactionManager。
但是当我尝试使用@Transactional注释时使用slaveTransactionManager时,它仍然在寻找默认的“transactionManager”。
我已经尝试了它的价值和& Transactional注释的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);
}
答案 0 :(得分:0)
我已通过以下方式解决了这个问题:
除了数据源配置类之外,我在主类上使用了EnableJpaRepositories注释,因此共有三个事务管理器。
1)来自main / driver类的EnableJpaRepositories的事务管理器。 2)MasterTransactionManager。 3)SlaveTransactionManager。
一旦我从主类中删除了EnableJpaRepositories,它就开始正常工作了。