Основанный на sharding-jdbc из Дамодан, этот проект представляет собой распределённую базу данных по схемам и таблицам, поддерживаемую Spring Boot 2.1.0. Поддерживает распределение по одному id и по дате.
Проект можно клонировать и добавить в Maven проект, но проект должен быть на Spring Boot 2.x, версия 1.5 не тестировалась, можно протестировать самостоятельно.
Почему был создан этот проект? На самом деле, это просто обёртка для springboot-starter проекта sharding-jdbc, чтобы можно было настроить запуск sharding-jdbc по нашим требованиям, например, распределение по id или по дате с помощью конфигурации, без необходимости создания большого количества сущностей для распределения. В этом проекте также исправлен баг с распределением по id, который не даёт целочисленных значений. Поскольку sharding-jdbc использует синтаксис Groovy, деление / может давать дробные значения, что ограничивает использование. Поэтому был создан этот обёртыватель, коллеги могут также модифицировать его по своему усмотрению.
Данные и DAO-операции в этом проекте основаны на MyBatis, исходные мапперы не требуют изменений. Sharding-jdbc действительно мощная технология, которая позволяет реализовать распределение без изменения бизнес-кода.
Шаги использования:
Клонировать проект на локальную машину1. Добавить зависимость проекта com.plat sharding-db 0.0.1-SNAPSHOT
Настроить springboot проект application.properties
spring.application.name=paas-demo server.port=8082 mybatis.mapper-locations=classpath:mappers/*.xml spring.devtools.restart.enabled=true
spring.main.allow-bean-definition-overriding=true
##========================================================== Настройка источников данных =========================================================## ######## Для версий Spring Boot 2.x параметры не должны содержать подчеркивания _, должны соответствовать правилам kebab case ########## sharding.jdbc.datasource.names=ds-common,ds-0,ds-1,ds-2018
#sharding.jdbc.datasource.dscommon.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds-common.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-common.driver-class-name=com.mysql.cj.jdbc.Driver sharding.jdbc.datasource.ds-common.url=jdbc:mysql://192.168.1.227:3306/demo_ds_common?useUnicode=true&characterEncoding=utf-8 sharding.jdbc.datasource.ds-common.username=gzlife sharding.jdbc.datasource.ds-common.password=gzlife sharding.jdbc.datasource.ds-common.filters=stat
#sharding.jdbc.datasource.ds0.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds-0.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-0.driver-class-name=com.mysql.cj.jdbc.Driver sharding.jdbc.datasource.ds-0.url=jdbc:mysql://192.168.1.227:3306/demo_ds_0?useUnicode=true&characterEncoding=utf-8 sharding.jdbc.datasource.ds-0.username=gzlife sharding.jdbc.datasource.ds-0.password=gzlife sharding.jdbc.datasource.ds-0.filters=stat
#sharding.jdbc.datasource.ds1.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds-1.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-1.driver-class-name=com.mysql.cj.jdbc.Driver sharding.jdbc.datasource.ds-1.url=jdbc:mysql://192.168.1.227:3306/demo_ds_1?useUnicode=true&characterEncoding=utf-8 sharding.jdbc.datasource.ds-1.username=gzlife sharding.jdbc.datasource.ds-1.password=gzlife sharding.jdbc.datasource.ds-1.filters=statsharding.jdbc.datasource.ds-2018.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-2018.driver-class-name=com.mysql.cj.jdbc.Driver sharding.jdbc.datasource.ds-2018.url=jdbc:mysql://192.168.1.227:3306/demo_ds_0?useUnicode=true&characterEncoding=utf-8 sharding.jdbc.datasource.ds-2018.username=gzlife sharding.jdbc.datasource.ds-2018.password=gzlife sharding.jdbc.datasource.ds-2018.filters=stat
##========================================================== Настройки мониторинга Druid (необязательно) =========================================================##
spring.datasource.druid.web-stat-filter.enabled=true spring.datasource.druid.web-stat-filter.url-pattern=/* spring.datasource.druid.web-stat-filter.exclusions='.js,.gif,.jpg,.png,.css,.ico,/druid/*'
spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.reset-enable=false spring.datasource.druid.stat-view-servlet.login-username=admin spring.datasource.druid.stat-view-servlet.login-password=123456 spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 spring.datasource.druid.stat-view-servlet.deny=219.230.50.108
##========================================================== Конфигурация правил шардинга по базам данных и таблицам =========================================================##
com.plat.sharding.enabled=true
com.plat.sharding.default-data-source-name=ds-common
com.plat.sharding.props.sql.show=false####################### Конфигурация шардинга для таблицы user_info по базам данных #######################
com.plat.sharding.tables.user_info.database.inline.sharding-column=user_id com.plat.sharding.tables.user_info.database.inline.algorithm-expression=ds-$->{user_id % 4 % 2}
#com.plat.sharding.tables.user_info.database.timer.sharding-column=create_time #com.plat.sharding.tables.user_info.database.timer.algorithm-expression=ds-$->{yyyy}
#com.plat.sharding.tables.user_info.database.coustom-class.sharding-column=create_time #com.plat.sharding.tables.user_info.database.coustom-class.precise-algorithm-class-name=$->{classname} #com.plat.sharding.tables.user_info.database.coustom-class.range-algorithm-class-name=$->{classname}
####################### Конфигурация шардинга для таблицы user_info по таблицам #######################
#com.plat.sharding.tables.user_info.table.inline.sharding-column=user_id #com.plat.sharding.tables.user_info.table.inline.algorithm-expression=user_info_$->{user_id % 4 / 2}
com.plat.sharding.tables.user_info.table.timer.sharding-column=create_time com.plat.sharding.tables.user_info.table.timer.algorithm-expression=user_info_$->{yyyyMM}
#com.plat.sharding.tables.user_info.table.coustom-class.sharding-column=create_time #com.plat.sharding.tables.user_info.table.coustom-class.precise-algorithm-class-name=$->{classname} #com.plat.sharding.tables.user_info.table.coustom-class.range-algorithm-class-name=$->{classname}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )