1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/t0mZ-xatomic

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Начало работы

Описание

Поддерживаемые окружения: SpringBoot / MyBatis / Atomickos
Основные характеристики:

  1. Поддержка нескольких источников данных с возможностью динамического переключения
  2. Поддержка распределённых транзакций XA с использованием нескольких источников данных (требуется установка Atomickos)
    Поддерживается только MyBatis, использует AbstractRoutingDataSource для динамического изменения источника данных. Введены Atomickos распределённые транзакции, поддерживающие динамическое переключение между несколькими источниками данных в распределённой среде.

Способ использования

Добавьте зависимость jar файла

Maven:

<dependency>
  <groupId>com.tomz</groupId>
  <artifactId>xatomic</artifactId>
  <version>1.0.0</version>
</dependency>

Gradle:

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Инструмент для интеграции с поддержкой транзакций для множества источников данных, прост в использовании. В настоящее время поддерживается только интеграция MyBatis в проекты SpringBoot, для распределённых транзакций требуется интеграция Atomickos. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/t0mZ-xatomic.git
git@api.gitlife.ru:oschina-mirror/t0mZ-xatomic.git
oschina-mirror
t0mZ-xatomic
t0mZ-xatomic
master