All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yuweix.kuafu.sharding.springboot.ShardingConf Maven / Gradle / Ivy

The newest version!
package com.yuweix.kuafu.sharding.springboot;


import com.yuweix.kuafu.sharding.aspect.TableAspect;
import com.yuweix.kuafu.sharding.context.DatabaseSetting;
import com.yuweix.kuafu.sharding.context.ShardingContext;
import com.yuweix.kuafu.sharding.context.TableSetting;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;

import java.util.HashMap;
import java.util.Map;


/**
 * @author yuwei
 */
public class ShardingConf {
	interface H {
		Map getDatabases();
		Map getTables();
	}
	private static class DSetting implements DatabaseSetting {
		private int suffixLength = 4;
		private String split = "_";

		@Override
		public int getSuffixLength() {
			return suffixLength;
		}
		public void setSuffixLength(int suffixLength) {
			this.suffixLength = suffixLength;
		}
		@Override
		public String getSplit() {
			return split;
		}
		public void setSplit(String split) {
			this.split = split;
		}
	}
	private static class TSetting implements TableSetting {
		private int suffixLength = 4;
		private String split = "_";
		private int databaseSize = 1;
		private int tableSize = 2;

		@Override
		public int getSuffixLength() {
			return suffixLength;
		}
		public void setSuffixLength(int suffixLength) {
			this.suffixLength = suffixLength;
		}
		@Override
		public String getSplit() {
			return split;
		}
		public void setSplit(String split) {
			this.split = split;
		}

		/**
		 * 如:2表示1库2表;2,4表示2库4表
		 */
		public void setShardingSize(String shardingSize) {
			String[] arr = shardingSize.split(",");
			if (arr.length == 1) {
				this.databaseSize = 1;
				this.tableSize = Integer.parseInt(arr[0].trim());
			} else {
				this.databaseSize = Integer.parseInt(arr[0].trim());
				this.tableSize = Integer.parseInt(arr[1].trim());
			}
		}

		@Override
		public int getDatabaseSize() {
			return databaseSize;
		}
		@Override
		public int getTableSize() {
			return tableSize;
		}
	}

	@Bean
	@ConfigurationProperties(prefix = "kuafu.sharding", ignoreUnknownFields = true)
	public H shardingSettingHolder() {
		return new H() {
			private Map databaseMap = new HashMap<>();
			private Map tableMap = new HashMap<>();

			@Override
			public Map getDatabases() {
				return databaseMap;
			}
			@Override
			public Map getTables() {
				return tableMap;
			}
		};
	}

	@ConditionalOnMissingBean(name = "shardingContext")
	@Bean(name = "shardingContext")
	public ShardingContext shardingContext(H holder) {
		Map databases = holder.getDatabases();
		Map tables = holder.getTables();
		ShardingContext.putDatabaseSetting(databases);
		ShardingContext.putTableSetting(tables);
		return null;
	}

	@ConditionalOnProperty(name = "kuafu.boot.sharding.table-aspect-enabled", matchIfMissing = true)
	@Bean
	public TableAspect tableAspect() {
		return new TableAspect();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy