| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package com.izouma.awesomeadmin.datasource;
- import com.izouma.awesomeadmin.dao.DataSourceInfoMapper;
- import com.izouma.awesomeadmin.model.DataSourceInfo;
- import com.izouma.awesomeadmin.util.Const;
- import org.apache.commons.dbcp.BasicDataSource;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
- import javax.sql.DataSource;
- import java.util.HashMap;
- import java.util.Map;
- public class DynamicDataSource extends AbstractRoutingDataSource {
- private static final Map targetDataSource = new HashMap<>();
- protected DataSource masterDataSource;
- @Override
- protected DataSource determineTargetDataSource() {
- // 根据数据库选择方案,拿到要访问的数据库
- String dataSourceName = determineCurrentLookupKey();
- if (!dataSourceName.equals("dataSource")) {
- DataSource datasource = (DataSource) targetDataSource.get(DynamicDataSourceHolder.getDataSource());
- if (datasource == null) {
- datasource = createDataSource(DynamicDataSourceHolder.getDataSource());
- targetDataSource.put(DynamicDataSourceHolder.getDataSource(), datasource);
- }
- return datasource;
- } else {
- return masterDataSource;
- }
- }
- @Override
- protected String determineCurrentLookupKey() {
- return DynamicDataSourceHolder.getDataSource();
- }
- public DataSource getMasterDataSource() {
- return masterDataSource;
- }
- public void setMasterDataSource(DataSource masterDataSource) {
- this.masterDataSource = masterDataSource;
- }
- //创建数据源
- private BasicDataSource createDataSource(String datasource) {
- // 查询所需信息
- DataSourceInfo dataSourceInfo = Const.DataSourceInfoMap.get(datasource);
- if (dataSourceInfo != null) {
- if ("Mysql".equals(dataSourceInfo.getDatabaseType())) {
- return createDataSource("com.mysql.jdbc.Driver", "jdbc:mysql://" + dataSourceInfo.getUrl() + "/" + dataSourceInfo.getDatabaseName(), dataSourceInfo.getUsername(), dataSourceInfo.getPassword());
- } else if ("SqlServer".equals(dataSourceInfo.getDatabaseType())) {
- return createDataSource("com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://" + dataSourceInfo.getUrl() + ";DatabaseName=" + dataSourceInfo.getDatabaseName(), dataSourceInfo.getUsername(), dataSourceInfo.getPassword());
- }
- }
- return null;
- }
- //创建数据源
- private BasicDataSource createDataSource(String driverClassName, String url,
- String username, String password) {
- BasicDataSource dataSource = new BasicDataSource();
- dataSource.setDriverClassName(driverClassName);
- dataSource.setUrl(url);
- dataSource.setUsername(username);
- dataSource.setPassword(password);
- dataSource.setTestWhileIdle(true);
- return dataSource;
- }
- }
|