Поддерживаемые окружения: SpringBoot / MyBatis / Atomickos
Основные характеристики:
Добавьте зависимость jar файла
<dependency>
<groupId>com.tomz</groupId>
<artifactId>xatomic</artifactId>
<version>1.0.0</version>
</dependency>
implementation 'com.tomz:xatomic:1.0.0'
Используйте аннотацию @DynamicDataSource
для переключения источников данных. Она может быть применена как к классу, так и к методу.
Пример конфигурационного файла: если свойство name
равно default
, то этот источник данных будет использоваться по умолчанию. Без применения аннотации @DynamicDataSource
используется первый источник данных из списка.```yaml
spring:
datasources:
- name: ds1
type: com.zaxxer.hikari.HikariDataSource
username: root
password:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&allowMultiQueries=true&serverTimezone=GMT%2B8
- name: ds2
type: com.zaxxer.hikari.HikariDataSource
username: root
password:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&allowMultiQueries=true&serverTimezone=GMT%2B8
Для использования добавьте зависимость:
```groovy
implementation 'org.springframework.boot:spring-boot-starter-jta-atomikos'
Конфигурационный файл аналогичен примеру выше, но тип источника данных type
должен быть изменён на объект, поддерживающий XA, такой как MysqlXADataSource
или DruidXADataSource
.
Обратите внимание, что для DruidXADataSource
поддерживаются MySQL драйверы до версии 8.0.11.```yaml
spring:
datasources:
- name: ds1
type: com.mysql.cj.jdbc.MysqlXADataSource
databaseName: test01
hostName: localhost
user: root
password:
port: 3306
url: jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&allowMultiQueries=true&serverTimezone=GMT%2B8
Кроме того, можно настроить Atomikos
```yaml
# JtaProperties
spring.jta:
# logDir:
transactionManagerId: myTxMgrId
# AtomikosProperties
# atomikos:
# properties:
# org.springframework.boot.jta.atomikos.AtomikosDataSourceBean конфигурация пула соединений
atomikos:
datasource:
poolSize: 5
minPoolSize: 3
maxPoolSize: 20
borrowConnectionTimeout: 60
reapTimeout: 300
maxIdleTime: 60
maintenanceInterval: 60
loginTimeout: 60
testQuery: select 1
Наконец, необходимо использовать аннотацию @MapperScan
над классом конфигурации, как показано ниже:
// factoryBean заменяет дефолтный MapperFactoryBean, реализует отображение мапперов на каждый источник данных. Эта аннотация требуется только при использовании распределённых транзакций XA, в остальных случаях её можно не добавлять
@MapperScan(factoryBean = XaDynamicMapperFactoryBean.class, basePackages = {"com.test.mapper"})
@SpringBootApplication
class ApplicationDemo {
public static void main(String[] args) {
SpringApplication.run(ApplicationDemo.class, args);
}
}
// маппер класс
@Mapper
public interface TestMapper {
@DynamicDataSource("ds1")
@Insert("insert into test(name) values ('a')")
long insertA();
@DynamicDataSource("ds2")
@Insert("insert into test(name) values ('b')")
long insertB();
}
// сервис класс
@Service
class ServiceA {
@Autowired
private TestMapper mapper;
@Transactional(rollbackFor = Exception.class)
public void insertAB() {
this.mapper.insertA();
this.mapper.insertB();
//throw new IllegalArgumentException("test xa-rollback");
}
}
// тестовый класс
@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {
@Autowired
``` private ServiceA service;
@Test
``````java
public void тестXA() {
this.service.insertAB();
}
}
```
Отключение распределённых транзакций данных: spring.jta.enabled=false<br>
Отключение динамического многочисленного источника данных: spring.dynamic.datasource.enabled=false
Примечание: этот проект требуется скачать самостоятельно на локальную машину, выполнить команду `install` для установки на локальной машине перед использованием. 🤣
```bash
$ git clone https://gitee.com/t0mZ/xatomic.git
Initialized empty Git repository in D:/java/xatomic/.git/
remote: Подсчёт объектов: завершено (69/69)
remote: Сжатие объектов: завершено (56/56)
remote: Всего 69 (дельта Yöntem 19), переиспользовано 0 (дельта 0)
Распаковка объектов: завершена (69/69)
$ cd xatomic
$ ./gradlew install
Загрузка https://services.gradle.org/distributions/gradle-4.10.3-all.zip
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )