package cn.stylefeng.guns.base.db.dao; import cn.hutool.core.date.DateUtil; import cn.stylefeng.guns.base.db.dao.sqls.AddDatabaseInfoSql; import cn.stylefeng.guns.base.db.dao.sqls.DatabaseListSql; import cn.stylefeng.guns.base.db.dao.sqls.DeleteDatabaseInfoSql; import cn.stylefeng.guns.base.db.exception.DataSourceInitException; import cn.stylefeng.roses.core.config.properties.DruidProperties; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import lombok.extern.slf4j.Slf4j; import java.sql.*; import java.util.Date; import java.util.HashMap; import java.util.Map; import static cn.stylefeng.guns.base.db.context.DataSourceContext.MASTER_DATASOURCE_NAME; /** * 操作数据源信息的dao * * @author fengshuonan * @date 2019-06-12-14:02 */ @Slf4j public class DataBaseInfoDao { private DruidProperties druidProperties; public DataBaseInfoDao(DruidProperties druidProperties) { this.druidProperties = druidProperties; } /** * 查询所有数据源列表 * * @author fengshuonan * @Date 2019-05-04 20:30 */ public Map getAllDataBaseInfo() { Map dataSourceList = new HashMap<>(); try { Class.forName(druidProperties.getDriverClassName()); Connection conn = DriverManager.getConnection( druidProperties.getUrl(), druidProperties.getUsername(), druidProperties.getPassword()); PreparedStatement preparedStatement = conn.prepareStatement(new DatabaseListSql().getSql(druidProperties.getUrl())); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { DruidProperties druidProperties = createDruidProperties(resultSet); String dbName = resultSet.getString("db_name"); dataSourceList.put(dbName, druidProperties); } return dataSourceList; } catch (Exception ex) { throw new DataSourceInitException(DataSourceInitException.ExEnum.QUERY_DATASOURCE_INFO_ERROR); } } /** * 初始化master的数据源,要和properties配置的数据源一致 * * @author fengshuonan * @Date 2019-06-15 10:20 */ public void createMasterDatabaseInfo() { try { Class.forName(druidProperties.getDriverClassName()); Connection conn = DriverManager.getConnection( druidProperties.getUrl(), druidProperties.getUsername(), druidProperties.getPassword()); PreparedStatement preparedStatement = conn.prepareStatement(new AddDatabaseInfoSql().getSql(druidProperties.getUrl())); preparedStatement.setLong(1, IdWorker.getId()); preparedStatement.setString(2, MASTER_DATASOURCE_NAME); preparedStatement.setString(3, druidProperties.getDriverClassName()); preparedStatement.setString(4, druidProperties.getUsername()); preparedStatement.setString(5, druidProperties.getPassword()); preparedStatement.setString(6, druidProperties.getUrl()); preparedStatement.setString(7, "主数据源,项目启动数据源!"); preparedStatement.setString(8, DateUtil.formatDateTime(new Date())); int i = preparedStatement.executeUpdate(); log.info("初始化master的databaseInfo信息!初始化" + i + "条!"); } catch (Exception ex) { log.error("初始化master的databaseInfo信息错误!", ex); throw new DataSourceInitException(DataSourceInitException.ExEnum.QUERY_DATASOURCE_INFO_ERROR); } } /** * 删除master的数据源信息 * * @author fengshuonan * @Date 2019-06-15 10:20 */ public void deleteMasterDatabaseInfo() { try { Class.forName(druidProperties.getDriverClassName()); Connection conn = DriverManager.getConnection( druidProperties.getUrl(), druidProperties.getUsername(), druidProperties.getPassword()); PreparedStatement preparedStatement = conn.prepareStatement(new DeleteDatabaseInfoSql().getSql(druidProperties.getUrl())); preparedStatement.setString(1, MASTER_DATASOURCE_NAME); int i = preparedStatement.executeUpdate(); log.info("删除master的databaseInfo信息!删除" + i + "条!"); } catch (Exception ex) { log.info("删除master的databaseInfo信息失败!", ex); throw new DataSourceInitException(DataSourceInitException.ExEnum.QUERY_DATASOURCE_INFO_ERROR); } } /** * 通过查询结果组装druidProperties * * @author fengshuonan * @Date 2019-06-12 14:22 */ private DruidProperties createDruidProperties(ResultSet resultSet) { DruidProperties druidProperties = new DruidProperties(); druidProperties.setTestOnBorrow(true); druidProperties.setTestOnReturn(true); try { druidProperties.setDriverClassName(resultSet.getString("jdbc_driver")); druidProperties.setUrl(resultSet.getString("jdbc_url")); druidProperties.setUsername(resultSet.getString("user_name")); druidProperties.setPassword(resultSet.getString("password")); } catch (SQLException e) { throw new DataSourceInitException(DataSourceInitException.ExEnum.QUERY_DATASOURCE_INFO_ERROR); } return druidProperties; } }