1. ЮТА
Atomikos — это менеджер транзакций класса с открытым исходным кодом, который предоставляет дополнительные услуги для платформы Java.
Принцип работы: Распределенные транзакции включают диспетчеры транзакций и диспетчеры ресурсов с поддержкой XA. Менеджер ресурсов — это наша БД, а менеджер транзакций отвечает за регулирование и контроль всех транзакций, разработанных участвующей БД.
личное понимание: после того, как Atomikos получит соединение с базой данных, он заблокирует базовое управление транзакциями базы данных, а затем передаст его Atomikos для единого планирования и контроля.
<!--分布式事务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>
3. Класс конфигурации
@Configuration
@MapperScan(basePackages = "com.example.mapper.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")
public class DB1DataSourcesConfig {
@Primary
@Bean(name = "db1DataSource")
public DataSource dataSource(DB1Config DB1Config) {
// 设置数据库连接
MysqlXADataSource mysqlXADataSource = new MysqlXADataSource();
mysqlXADataSource.setUrl(DB1Config.getUrl_jdbc());
mysqlXADataSource.setUser(DB1Config.getUsername());
mysqlXADataSource.setPassword(DB1Config.getPassword());
mysqlXADataSource.setPinGlobalTxToPhysicalConnection(true);
// 交给事务管理器进行管理
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSource(mysqlXADataSource);
atomikosDataSourceBean.setUniqueResourceName("db1DataSource");
return atomikosDataSourceBean;
}
@Primary
@Bean(name = "db1SqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/db1/*.xml"));
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
sessionFactoryBean.setConfiguration(configuration);
return sessionFactoryBean.getObject();
}
@Primary
@Bean(name = "db1SqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
На этом настройка в основном завершена.Здесь я написал только конфигурацию одной базы данных.Другая такая же, как эта, за исключением того, что информация базы данных изменилась.
Нет данных до модификации
Давайте не будем сначала добавлять транзакции, а посмотрим, есть ли исключение при изменении оценки, и будет ли откатываться информация о пользователе.
результат
Во-первых, код сообщает об ошибке в строке 39. Если по нашей логике, если модификация балла не удалась, соответствующая модификация возраста пользователя также не удалась, но результат показывает, что возраст пользователя все еще модифицируется.Очевидно, этот интерфейс не был распределен управляемой транзакцией.
Для большего количества контента, пожалуйста, обратите внимание на публичный аккаунт WeChat: рост программиста