关于java:springboot初始化数据库druid解密

1次阅读

共计 2116 个字符,预计需要花费 6 分钟才能阅读完成。

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. 表明这是一个配置类

@Configuration
public class DruidConf {

启动我的项目测试。。。

正文完
 0