package com.dsideal.FengHuang.Plugin; import com.jfinal.plugin.IPlugin; import com.jfinal.plugin.activerecord.IDataSourceProvider; import com.jfinal.plugin.druid.DruidPlugin; import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration; import org.apache.shardingsphere.shardingjdbc.api.MasterSlaveDataSourceFactory; import javax.sql.DataSource; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Properties; /** * 读写分离扩展类 */ public class SlaveDrudPlugin implements IPlugin, IDataSourceProvider { //读写分离的rule MasterSlaveRuleConfiguration masterSlaveRuleConfiguration; //数据源map Map druidPlugins; //原数据库连接源map Map dataSourceMap; //最终sharding-jdbc封装后的数据库连接源 DataSource dataSource; public SlaveDrudPlugin(MasterSlaveRuleConfiguration masterSlaveRuleConfiguration, Map druidPlugins) { this.masterSlaveRuleConfiguration = masterSlaveRuleConfiguration; this.druidPlugins = druidPlugins; dataSourceMap = new HashMap<>(); } public boolean start() { //遍历数据源 ,将数据源加入sharding jdbc for (Map.Entry entry : druidPlugins.entrySet()) { entry.getValue().start(); dataSourceMap.put(entry.getKey(), entry.getValue().getDataSource()); } try { dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveRuleConfiguration, new Properties()); System.out.println(dataSource); } catch (SQLException e) { e.printStackTrace(); } return true; } public boolean stop() { for (Map.Entry entry : druidPlugins.entrySet()) { entry.getValue().stop(); dataSourceMap.put(entry.getKey(), entry.getValue().getDataSource()); } return true; } public DataSource getDataSource() { return dataSource; } }