美文网首页
springboot jdbc 动态连接数据库

springboot jdbc 动态连接数据库

作者: 楚长铭 | 来源:发表于2019-10-17 11:14 被阅读0次
    • 首先说个连接数据库连接的坑,错误提示(也可能是英文)为:
    驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“SQL Server 未返回响应。连接已关闭
    
    • 在排除了网络等其他因素影响之后,初步确定是数据库太老的问题,我连接的sqlserver数据库,使用datagrip连接的时候,使用microsaft SQL server的驱动也会报相同的错,但是使用microsaft SQL server(jTds)能连接地上,然而在springboot使用jtds还是连不上,这是搞事情啊!
    • 说下解决方案,在JAVA_HOME/jre/lib/security文件夹找到java的安全策略文件Java.security,其中有一段
    jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
    jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024,
    EC keySize < 224, DES40_CBC, RC4_40,3DES_EDE_CBC
    

    将3DES_EDE_CBC注释掉即可

    jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
    jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024,
    EC keySize < 224, DES40_CBC, RC4_40
    #,3DES_EDE_CBC
    

    动态连接数据库

    • 依赖
    <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc6</artifactId>
                <version>11.2.0.3</version>
    </dependency>
    
    <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.17</version>
    </dependency>
    
    <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>mssql-jdbc</artifactId>
                <version>7.2.2.jre8</version>
    </dependency>
    
    <!--用于动态连接-->
     <dependency>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId>
                <version>3.1.0</version>
    </dependency>
    
    
    • 动态连接代码
    public HikariDataSource customDataSource() {
    
           final HikariDataSource customDataConfig = new HikariDataSource();
    
            customDataConfig.setJdbcUrl("数据库的url");
            customDataConfig.setDriverClassName("数据库的驱动");
            
    
            customDataConfig.setUsername("数据库用户名");
            customDataConfig.setPassword("数据库密码");
    
            customDataConfig.setMaximumPoolSize(2);
            customDataConfig.setMinimumIdle(1);
            customDataConfig.setAutoCommit(true);
            //customDataConfig.setConnectionTestQuery("SELECT 1 FROM DUAL");
            customDataConfig.addDataSourceProperty("cachePrepStmts", "true");
            customDataConfig.addDataSourceProperty("prepStmtCacheSize", "250");
            customDataConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
    
            return customDataConfig;
    }
    
    
    • 上述代码之中,可以从方法中传入参数,设置url,数据库驱动以及数据库用户名和密码来动态连接任意的数据库
    • 数据库url和驱动的写法如下
    String sqlserverUrl ="jdbc:sqlserver://localhost:1433;DatabaseName=数据库名称";
    String sqlserverDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    
    String mySqlUrl="jdbc:mysql://localhost:3307/数据库名称";
    String mySqlDriver="com.mysql.cj.jdbc.Driver";
    
    String oracleUrl="jdbc:oracle:thin:@//localhost:1521/数据库名称";
    String oracleDriver="oracle.jdbc.OracleDriver";
    
    //orcale也可以使用sid连接的url
    String oracleUrl="jdbc:oracle:thin:@localhost:1521:SID";
    
    • 连接数据库:
    HikarDataSource dataSource=customDataSource();
    NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
    
    • 之后就可以使用jdbcTemplate来执行sql了
    • 使用结束后关闭连接
    dataSource.close()
    
    • 事务的使用
    public TransactionTemplate getTransactionTemplate(DataSource dataSource) {
            PlatformTransactionManager txManager = new DataSourceTransactionManager(dataSource);
            return new TransactionTemplate(txManager);
    }
    
    TransactionTemplate transactionTemplate =  getTransactionTemplate(dataSource);
    
    
    transactionTemplate.execute(status -> {
      //回滚的方法
      status.setRollbackOnly();
    });
    

    相关文章

      网友评论

          本文标题:springboot jdbc 动态连接数据库

          本文链接:https://www.haomeiwen.com/subject/rmlmmctx.html