package com.qianwen.smartman.modules.visual.dynamic; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.creator.DataSourceCreator; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; import java.util.Set; import javax.sql.DataSource; import com.qianwen.core.cache.utils.CacheUtil; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.tool.utils.StringUtil; import org.springframework.beans.BeanUtils; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/visual/dynamic/DynamicDataSourceHolder.class */ public class DynamicDataSourceHolder { private DataSource dataSource; private DataSourceCreator dataSourceCreator; private JdbcTemplate jdbcTemplate; public void setDataSource(final DataSource dataSource) { this.dataSource = dataSource; } public void setDataSourceCreator(final DataSourceCreator dataSourceCreator) { this.dataSourceCreator = dataSourceCreator; } public void setJdbcTemplate(final JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void handleDataSource(String id) { DynamicRoutingDataSource ds = (DynamicRoutingDataSource)this.dataSource; /* DynamicRoutingDataSource ds = this.dataSource;*/ Set keys = ds.getCurrentDataSources().keySet(); if (!keys.contains(id)) { DynamicDataSource dynamicDataSource = getDataSource(id); if (dynamicDataSource != null) { DataSourceProperty dataSourceProperty = new DataSourceProperty(); BeanUtils.copyProperties(dynamicDataSource, dataSourceProperty); DataSource dataSource = this.dataSourceCreator.createDataSource(dataSourceProperty); ds.addDataSource(id, dataSource); return; } throw new ServiceException(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_NOT_FOUND); } } private DynamicDataSource getDataSource(String id) { try { DynamicDataSource dynamicDataSource = (DynamicDataSource) CacheUtil.get(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_CACHE, DynamicDataSourceConstant.DYNAMIC_DATASOURCE_KEY, id, DynamicDataSource.class, Boolean.FALSE); if (dynamicDataSource == null) { dynamicDataSource = (DynamicDataSource) this.jdbcTemplate.queryForObject(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_SINGLE_STATEMENT, new String[]{id}, new BeanPropertyRowMapper(DynamicDataSource.class)); if (dynamicDataSource != null && StringUtil.isNoneBlank(new CharSequence[]{dynamicDataSource.getId(), dynamicDataSource.getDriverClass(), dynamicDataSource.getUrl(), dynamicDataSource.getUsername(), dynamicDataSource.getPassword()})) { CacheUtil.put(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_CACHE, DynamicDataSourceConstant.DYNAMIC_DATASOURCE_KEY, id, dynamicDataSource, Boolean.FALSE); } } return dynamicDataSource; } catch (Exception ex) { ex.printStackTrace(); return null; } } }