package com.java110.db; import org.apache.shardingsphere.shardingjdbc.api.yaml.YamlMasterSlaveDataSourceFactory; import org.apache.shardingsphere.shardingjdbc.api.yaml.YamlShardingDataSourceFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import javax.servlet.Filter; import javax.sql.DataSource; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.sql.SQLException; /** * 数据源配置 */ @Configuration public class DataSourceConfig { //@Autowired private Filter statFilter; private static final String SHARDING_YML_PATH = "dataSource.yml"; /** * 构建dataSource * 这里没有使用ShardingDataSourceFactory * 因为要为durid数据源配置监听Filter * * @return 数据源对象 * @throws SQLException sql异常 * @throws IOException IO 异常 * @since 1.8 */ @Bean public DataSource dataSource() throws SQLException, IOException { // YamlShardingConfiguration config = parse(); // YamlShardingRuleConfiguration rule = config.getShardingRule(); // for (String key : config.getDataSources().keySet()) { // DruidDataSource d = (DruidDataSource) config.getDataSources().get(key); // d.setProxyFilters(Lists.newArrayList(statFilter)); // } // return ShardingDataSourceFactory.createDataSource(config.getDataSources(), // rule.getShardingRuleConfiguration(), config.getConfigMap(), config.getProps()); return YamlShardingDataSourceFactory.createDataSource(getYmlFile()); } /** * 解析yml * * @return yaml 配置文件 * @throws IOException IO 异常 * @throws FileNotFoundException 文件未发现异常 * @throws UnsupportedEncodingException 不支持编码异常 */ private File getYmlFile() throws IOException { Resource certResource = new ClassPathResource(SHARDING_YML_PATH); return certResource.getFile(); } }