java jdbc 多数据源_多数据源使用jdbc连接数据库

2023-11-18

问题提出

问题: 多数据源使用jdbc连接数据库,每次连接都是new新连接

for循环多次时new会导致连接创建失败

分析问题

使用数据库连接池技术解决重复创建的问题

具体实现

jdbc连接数据库

package com.keep.account.util;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DbUtil {

public static void main(String[] args) {

Connection conn = null;

Statement stmt = null;

try{

//

for(int i = 0; i < 3; i++) {

conn = MultiDataSourcePollUtil.getConnection("test");

// 执行查询

stmt = conn.createStatement();

String sql;

sql = "SELECT id, name FROM user WHERE id IN (1,2,3)";

ResultSet rs = stmt.executeQuery(sql);

// 展开结果集数据库

while (rs.next()) {

// 通过字段检索

int id = rs.getInt("id");

String name = rs.getString("name");

// 输出数据

System.out.print("ID: " + id);

System.out.print(", 站点名称: " + name);

System.out.print("\n");

}

// 完成后关闭

rs.close();

}

stmt.close();

conn.close();

}catch(SQLException se){

// 处理 JDBC 错误

se.printStackTrace();

}catch(Exception e){

// 处理 Class.forName 错误

e.printStackTrace();

}finally{

// 关闭资源

try{

if(stmt!=null) stmt.close();

}catch(SQLException se2){

}// 什么都不做

try{

if(conn!=null) conn.close();

}catch(SQLException se){

se.printStackTrace();

}

}

}

}

多数据源缓存(其中配置可拿出来作为参数传入)

package com.keep.account.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.beans.PropertyVetoException;

import java.sql.Connection;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

/**

* 多数据源datasource

*/

public class MultiDataSourcePollUtil {

private static Map dataSources = new ConcurrentHashMap<>();

private static ComboPooledDataSource getDataSource(String connName) {

ComboPooledDataSource dataSource = dataSources.get(connName);

if (dataSource == null) {

synchronized (MultiDataSourcePollUtil.class) {

dataSource = dataSources.get(connName);

if (dataSource == null) {

System.out.println("create datasource");

dataSource = createDataSource();

dataSources.put(connName, dataSource);

}

}

}

return dataSource;

}

private static ComboPooledDataSource createDataSource() {

// TODO: 2019/7/8 考虑配置让初始化类处理

String dbUrl = "jdbc:mysql://localhost:3306/privateTool?serverTimezone=GMT&useUnicode=true&characterEncoding=utf8&useSSL=false";

String dbUser = "***";

String dbPwd = "****";

String driver = "com.mysql.jdbc.Driver";

ComboPooledDataSource dataSource = new ComboPooledDataSource();

dataSource.setUser(dbUser);

dataSource.setPassword(dbPwd);

dataSource.setJdbcUrl(dbUrl);

try {

dataSource.setDriverClass(driver);

} catch (PropertyVetoException e) {

e.printStackTrace();

}

dataSource.setInitialPoolSize(10);

dataSource.setMinPoolSize(10);

dataSource.setMaxPoolSize(100);

dataSource.setMaxStatements(100);

dataSource.setMaxIdleTime(60);

dataSource.setAcquireIncrement(10);

return dataSource;

}

public static Connection getConnection(String connName) {

try {

ComboPooledDataSource dataSource = getDataSource(connName);

return dataSource.getConnection();

} catch (Exception e) {

throw new RuntimeException("can not get sms database connection ", e);

}

}

}

参考文献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java jdbc 多数据源_多数据源使用jdbc连接数据库 的相关文章

  • 打破ViT SOTA垄断!SegNeXt:卷积注意力机制重夺语义分割的胜利高地(NeurIPS 22)

    是通过配置文件实现网络结构的 pytorch 第三方网络结构 CvPytorch segnext py at eb052994ff663bd899fc1700b57b952bcfb0fca3 shanglianlm0525 CvPytorc
  • 【pytest】 参数化@pytest.mark.parametrize

    1 创建 test parametrize py 通过 pytest mark parametrize 方法设置参数 import pytest import math pytest参数化 pytest mark parametrize b
  • 中国人寿业务稳定性保障:“1+1+N” 落地生产全链路压测

    引言 保险业务的数字化转型正如火如荼地进行 产品线上化 投保线上化 承保线上化 核保线上化等业务转型 导致系统的应用范围不断扩大 用户的高频访问也正在成为常态 同时 系统复杂性也呈指数上升 这些因素都增加了系统的稳定性风险 中国人寿将无侵入
  • GIS栅格平均值计算

    GIS中批量计算tif栅格文件平均值 coding UTF 8 import arcpy import os inws r C Users DELL Desktop 新建文件夹 arcpy env workspace inws raster
  • ISP(一) 基础知识储备

    ISP image signal processing 图像信号处理芯片 在手机摄像头和车载摄像头等领域有着广泛应用 是图像信号处理的核心芯片 ISP pipeline 流程图如下 光线经过lens镜头 投射到sensor上 经过光电转换成
  • 学习笔记 Day 41 (监督学习分类算法)

    knn 结果不太理想 可以删除row id项 朴素贝叶斯 朴素贝叶斯预测 api省略 def navie bayes 获取数据 fet fetch 20newsgroups subset all print fet 数据基本处理 分割数据
  • linux系统把驱动编译成.ko模块 insmod动态加载

    介绍 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中 这样当 Linux 内核启动的时候就会自动运行驱动程序 第二种就是将驱动编译成模块 Linux 下模块扩展名为 ko 在Linux 内核启动以后使用 insm
  • 最小错误率的贝叶斯决策和最小风险贝叶斯决策的关系?

    1 基于最小错误率的贝叶斯决策 共w1 wn种决策 本质上就是最大后验概率P wi X 的贝叶斯决策 公式一 P wi X P X wi P wi nj 1 P X wj P wj i 1 n j 1 n 2 最小风险的贝叶斯决策 共a1
  • 【MySQL数据库笔记 - 进阶篇】(二)索引

    个人博客 https blog csdn net Newin2020 spm 1011 2415 3001 5343 专栏地址 https blog csdn net Newin2020 article details 127933422
  • centos 7 jenkins安装

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 添加yum repos 安装 官方文档 https www jenkins io doc book installing linux red hat centos gt sud
  • MongoDB数据库

    MongoDB 一 简介 1 1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库 官方地址 https www mongodb com 1 2 数据库是什么 数据库 DataBase 是按照数据结构来组织 存储和管
  • Postman使用技巧-环境变量使用

    目录 一 下载安装Postman 二 添加环境与环境变量 三 环境变量使用方法 1 路径中使用变量 2 body中使用变量 3 调用接口前设置变量 4 调用接口后设置变量 一 下载安装Postman 下载安装过程不做赘述 本文章以9 3 1
  • SPWM逆变的原理分析与仿真

    1 单相半桥SPWM逆变电路 1 1 拓扑 下图是单相半桥SPWM逆变电路 含有两个开关管 桥臂中点和直流侧电容中点之间连接负载 输出电压 端口电压 是幅值为0 5Vdc的脉冲波形 1 2 输出电压分析 单相半桥电路的输出电压的主要频率成分
  • 关于QsciScintilla的快捷键设置原理

    经过调试跟踪发现 设置的组合键 修饰键可以是ctrl shift alt的组合 但是第二个键 只能是键值小于0x7f的 从qnamespace文件可知 该按键范围 Key Space Key AsciiTilde 期间包括了各种字母 那么如
  • Unity之自发光Emission效果

    小白欢迎评论 共同探讨 共同进步 写的博文零碎可能比较多 基本是学到啥了写啥 希望可以帮到各位童鞋 同时感谢我看过的各个论坛 博主 同事们的帮助 Unity之自发光Emission效果 很多人都会奇怪 为什么我选了自发光的颜色 强度也调整的
  • Android X86 解决ARM兼容的问题

    最近在Parallels Desktop上安装了64位的Android 9 x86 64 但是很多App只支持arm64 不支持Intel的x86 下面是解决办法 设置中 安卓x86设置 把三个全选上 端口映射5555到Android的55
  • 基于音频和文本的多模态语音情感识别(一篇极好的论文,值得一看哦!)

    基于音频和文本的多模态语音情感识别 语音情感识别是一项具有挑战性的任务 在构建性能良好的分类器时 广泛依赖于使用音频功能的模型 本文提出了一种新的深度双循环编码器模型 该模型同时利用文本数据和音频信号来更好地理解语音数据 由于情感对话是由声
  • EA 的类型/EA 智能交易的介绍(自动化交易/程序化交易/量化交易)

    EA 的类型 EA 智能交易的介绍 自动化交易 程序化交易 量化交易 EA 的类型 1 趋势类 最常见也是最成熟的类型 趋势类 最为主流的 EA 类型 一般根据各种指标和策略来进行出入场操作 2 网格类 网络类的特征 就是单子很多 而且浮亏
  • python引入同一目录下的py文件

    存在一个目录bert base 其中有两个文件 admin py和dealcode py 如果要在admin py中引用dealcode py 则在admin py文件中加一行 from bert base dealcode import

随机推荐