تقدم هذه المقالة طريقة التكوين لاستخدام Sharding JDBC للتمهيد الربيعي. سوف أشاركها معك. التفاصيل كما يلي:
يوضح
لاستبعاد تكوين DatasourCeautoconfiguration ، وإلا لا يمكن تكوين مصادر بيانات متعددة
@SpringBootApplication@enableeautoconfiguration (exclude = {datasourCeautOconFiguration.class}) تطبيق الفئة العامة {public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }} يتم تسليم مصادر البيانات المتعددة التي تم تكوينها إلى Sharding-JDBC للإدارة ، ويقوم Sharding-JDBC بإنشاء مصدر بيانات بيانات البيانات لاستخدام MyBatis
المستند الرسمي: http://shardingjdbc.io/index_zh.html
خطوة
تكوين مصادر بيانات متعددة ، من الأفضل أن يكون لديك قواعد معينة لاسم مصدر البيانات لتسهيل تكوين قواعد الحساب لقاعدة البيانات.
bean (initmethod = "init" ، destRymethod = "close" ، name = "datasource0")@configurationProperties (precix = "spring.datasource") dataSource public dataSource0 () {إرجاع druiddatasource () ؛ name = "datasource1")@configurationProperties (precix = "spring.datasource2") dataSource public dataSource1 () {return druiddatasource () ؛} قم بتكوين قواعد مصدر البيانات ، أي تسليم مصادر بيانات متعددة إلى Sharding-JDBC للإدارة ، ويمكنها تعيين مصادر البيانات الافتراضية. عندما لا يحتوي الجدول على قواعد قاعدة البيانات التي تم تكوينها ، سيتم استخدام مصادر البيانات الافتراضية.
BeAnpublic DataSourcerule DataSourcerule (QAlifier ("datasource0") dataSource dataSource0 ، @qualifier ("datasource1") dataSource DataSource1) {map <string ، datasource> datasourcemap = new hashmap <>) ؛ datasourcemap.put ("datasource0" ، dataSource0) ؛ datasourcemap.put ("datasource1" ، datasource1) ؛ إرجاع DataSourcerule الجديد (DataSourCemap ، "DataSource0") ؛} تكوين سياسات مصدر البيانات وسياسات الجدول ، وتنفيذ سياسات محددة بنفسك.
beanpublic shardingrule shardingrule (dataSourcerule dataSourcerule) {// جدول سياسة الجدول tablerule ordertablerule = tableRule.builder ("t_order") .actualtables (arrays.aslist ("t_order_0" ، "t_order_1"). modulotableshardingalgorithm ())) .Datasourcerule (dataSourcerule) .Build () ؛ tablerule orderitemtablerule = tableRule.builder ("t_order_item") .actualtables (arrays.aslist ("t_order_item_0" ، "t_order_item_1") .tableshardingsrateStrategygy (tableshardingStrateGrategy ("order_id" ، modulotableshardingAldingArateR. .يبني()؛ // سياسة الجدول الربط ، سيتم استخدام استراتيجية الجدول الرئيسية لحساب مصدر البيانات الموجهة عند الاستعلام ، وبالتالي فإن قواعد الجدول التي توافق على ربط سياسة الجدول يجب أن تكون متسقة ، والتي يمكن أن تحسن الكفاءة إلى حد معين قائمة <BindingTablerule> bindingTablerules = new ArrayList <BindingTablerule> () ؛ bindingTablerules.Add (New BindingTablerule (Arrays.aslist (ordertablerule ، orderitemTablerule))) ؛ إرجاع shardingrule.builder () .datasourcerule (dataSourcerule) .Tablerules (Arrays.Aslist (OrderTablerule ، OrderItemTablerule). .TableShardingStrategy (TableShardingSrateStySy ("Order_id" ، modulotableShardingAlgorithm ())) .build () ؛} قم بإنشاء مصدر بيانات مصدر بيانات لـ Sharding-JDBC ، والتي سيتم استخدام MyBatisautoconfiguration
bean ("datasource") البيانات العامة ShardingDataSource (ShardingRule ShardingRule) {return ShardingDataSourceFactory.CreatedataSource (ShardingRule) ؛} بحاجة إلى تكوين مدير المعاملات يدويًا (السبب غير معروف)
// يجب إعلان معاملة التكوين يدويًا dataSourCetransActionManager TransactionItonManager (QAlifier ("datasource") dataSource) تنفيذ بسيط لاستراتيجية قسم المكتبة ، واجهة: DatabaseshardingAlgorithm
استيراد java.util.collection ؛ استيراد java.util.linkedHashset ؛ استيراد com.dangdang.ddframe.rdb.sharding.api.shardingvalue ؛ استيراد com.dangdang.ddframe.rdb.sharding.api.strategy.database.singlekeydataBaseshardingAdingAdingAdingAdingAdingAdingAdingAdingAdingAdingAdingAdingAdingalgoringAdingAdingAdingAdingAdingAdingAdingAdingAd com.google.common.collect.range ؛/** * تم إنشاؤه بواسطة fuwei.deng في 11 مايو 2017. كل: databasenames) {if (eary. }} رمي غير alfictalargumentException () ؛ } Override Public Collection <String> doInsharding (Collection <string> databasenames ، ShardingValue <Long> ShardingValue) {collection <string> result = new LinkedHashset <> (databasenames.size ()) ؛ لـ (القيمة الطويلة: ShardingValue.getValues ()) {for (سلسلة tablename: databasenames) {if (tablename.endswith (value ٪ 2 + "")) {result.add (tablename) ؛ }} نتيجة الإرجاع ؛ } Override Public Collection <String> debetweensharding (Collection <string> databasenames ، ShardingValue <Long> ShardingValue) {collection <string> result = new LinkedHashset <> (databasenames.size ()) ؛ Range <Brong> Range = (Range <Brong>) ShardingValue.getValuerange () ؛ لـ (long i = range.lowerendpoint () ؛ i <= range.upperendpoint () ؛ i ++) {for (سلسلة كل: databasenames) {if (كل. }} نتيجة الإرجاع ؛ }} التنفيذ الأساسي لاستراتيجية المرحلة الفرعية الجدول ، الواجهة: TableShardingAlgorithm
استيراد java.util.collection ؛ استيراد java.util.linkedhashset ؛ استيراد com.dangdang.ddframe.rdb.sharding.api.shardingvalue ؛ import com.dangdang.ddframe.rdb.sharding.api.strategy.table.table com.google.common.collect.range ؛/** * تم إنشاؤه بواسطة fuwei.deng في 11 مايو 2017. */الطبقة العامة modulotableShardingAlgorithm تنفذ singlekeytableshardingalgorithm <long> {if (eary. }} رمي غير alfictalargumentException () ؛ } Override Public Collection <string> doinsharding (Collection <string> tablenames ، shardingvalue <long> shardingvalue) {collection <string> result = new LinkedHashset <> (tablenames.size ()) ؛ لـ (القيمة الطويلة: ShardingValue.getValues ()) {for (string tablename: tableNames) {if (tablename.endswith (value ٪ 2 + "")) {result.add (tablename) ؛ }}} نتيجة الإرجاع ؛ } Override Public Collection <String> debetweensharding (Collection <String> Tablenames ، ShardingValue <Long> ShardingValue) {Collection <String> result = new LinkedHashset <> (tablenames.size ()) ؛ Range <Brong> Range = (Range <Brong>) ShardingValue.getValuerange () ؛ لـ (long i = range.lowerendpoint () ؛ i <= raze.upperendpoint () ؛ i ++) {for (سلسلة كل: tablenames) {if (كل. }} نتيجة الإرجاع ؛ }} في هذه المرحلة ، تم تنفيذ وظيفة تقسيم قاعدة البيانات وتقسيم الجدول
اقرأ واكتب الانفصال
تتطلب فصل القراءة والكتابة إضافة طبقة من إنشاء مصدر بيانات الرقيق قبل إنشاء Sourcerule
// بناء مصدر بيانات فصل القراءة والكتابة. يقوم مصدر بيانات فصل القراءة والكتابة بتنفيذ واجهة مصدر البيانات ، والتي يمكن معالجتها مباشرة كمصدر بيانات. // MasterDataSource0 ، slavedatasource00 ، slavedataSource01 ، وما إلى ذلك هي مصادر بيانات حقيقية تم تكوينها باستخدام DBCP ومجمعات الاتصال الأخرى. DataSource masterslaveds0 = masterslavedataSourceFactory.CreatedataSource ("MS_0" ، MasterDataSource0 ، slavedatasource00 ، slavedataSource01) ؛ masterDataTorce slavedatasource11 ، slavedatasource11) ؛ // إنشاء خريطة مصدر بيانات فرعية <string ، dataSource> dataSourCemap = new hashmap <> (2) ؛ dataSourCemap.put ("ms_0" ، masterslaveds0) ؛ datasourcemap.put ("ms_1" ShardingDataSourceFactory عند استخدام المكتبة الرئيسية
Hintmanager Hintmanager = hintmanager.getinstance ()
التوجيه القسري
Hintmanager HintManager = hintmanager.getInstance () ؛ Hintmanager.adddatabaseshardingvalue ("t_order" ، "user_id" ، 1L) ؛ HintManager.adddtableShardingValue ("t_order" ، "order_id" ، "order_id" order.getorderid ()) ؛ hintmanager.adddatabaseshardingValue ("t_order_item" ، "user_id" ، 1l) ؛ hintmanager.addtableShardingValue ("t_order_item" ، "order_id" ، order.getOrderId ()) ؛المعاملات
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.