美文网首页
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