1.注入配置文件中的数据库配置
/** * datasourceUrl 连贯数据库url */ @Value("${spring.datasource.url}") private String datasourceUrl; /** * driverClassName 数据库驱动 */ @Value("${spring.datasource.driver-class-name}") private String driverClassName; /** * datasourceUserName 连贯数据库的用户名 */ @Value("${spring.datasource.username}") private String datasourceUserName; /** * databasePassword 连贯数据库明码 */ @Value("${spring.datasource.password}") private String databasePassword; /** * 注入数据库公钥 */ @Value("${spring.datasource.public-key}") private String datasourcePublicKey;
2.调用druid公钥+明码钥进行解密,并执行创立数据库语句
/** * @return dataSource * @description 配置数据库主动创立 * 如果连贯地址没有对应的数据库则创立,前提是有root账号,或者是非root账号具备建库的权限 */ @Bean public DataSource dataSourceConfig() { DruidDataSource dataSource = new DruidDataSource(); String decrypt = null; //druid解密 try { decrypt = ConfigTools.decrypt(datasourcePublicKey, databasePassword); } catch (Exception e) { log.error("公钥解密异样:{}", e.getMessage()); } dataSource.setUrl(datasourceUrl); dataSource.setUsername(datasourceUserName); //将解密后的明码增加到datasource源 dataSource.setPassword(decrypt); dataSource.setDriverClassName(driverClassName); Connection connection = null; PreparedStatement state = null; try { Class.forName(driverClassName); // 截取数据库问问好前的连贯参数 String sqlUrl = datasourceUrl.substring(0, datasourceUrl.indexOf("?")); // 获取连贯数据库的url String databasesUrl = sqlUrl.substring(0, sqlUrl.lastIndexOf("/")); // 截取数据库名 String databaseName = sqlUrl.substring(sqlUrl.lastIndexOf("/") + 1); // 创立连贯 connection = DriverManager.getConnection(databasesUrl, datasourceUserName, decrypt); // 创立传输通道,并设置占位符 String sql = "create database if not exists ? default character set utf8 COLLATE utf8_general_ci"; state = connection.prepareStatement(sql); // 将数据库名注入到占位符 state.setString(1, databaseName); // 获取到注入的sql语句 String resultSql = ((ClientPreparedStatement) state).asSql(); String executeSql = resultSql.replaceAll("'", "`"); int execute = state.executeUpdate(executeSql); log.info("sql语句执行状态:{}", execute); } catch (Throwable e) { log.error("数据库连贯异样:{}", e.getMessage()); } finally { try { if (null != state) { state.close(); } if (null != connection) { connection.close(); } } catch (SQLException throwable) { log.error("sql语句异样:{}", throwable.getMessage()); } } return dataSource; }
3. 表明这是一个配置类
@Configurationpublic class DruidConf {
启动我的项目测试。。。