java代码实现数据源切换(连接池简单粗暴)
--最佳实践配置(.yml)
gs.oracle:
#driverClassName: oracle.jdbc.driver.OracleDriver
driverClassName: oracle.jdbc.OracleDriver
username: myuser
password: root
url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
--最佳实践(注意在springboot的.yml中配置gs.oracle,若使用gs_oracle,@@ConfigurationProperties会提示使用规范配置)
package com.dhht.config; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* @Author: sh
* @Description: oracleDataCfg 前置数据库配置类
* @Date: 9:26 2019/7/23
*/
@Component
@ConfigurationProperties(prefix = "gs.oracle")
@Data
public class OrcaleDataCfg { private String driverClassName;
private String username;
private String password;
private String url;
}
--最佳实践DbConnect
package com.dhht.wechat.util; import com.alibaba.druid.pool.DruidDataSource;
import com.dhht.config.OrcaleDataCfg;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component; import javax.annotation.Resource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.List;
import java.util.Map; /**
* @Author: sh
* @Description: DbConnect
* @Date: 23:01 2019/7/22
*/
@Component
public class DbConnect { @Resource
OrcaleDataCfg orcaleDataCfg; private static DruidDataSource dataSource = null;
private static JdbcTemplate jdbcTemplate = null; /**
* 构造函数完成数据库的连接和连接对象的生成
*
* @throws Exception
*/
private DbConnect() { } public synchronized DruidDataSource GetDbConnect() throws Exception {
try {
if (dataSource == null) {
dataSource = new DruidDataSource();
//设置连接参数
dataSource.setUrl(orcaleDataCfg.getUrl());
dataSource.setDriverClassName(orcaleDataCfg.getDriverClassName());
dataSource.setUsername(orcaleDataCfg.getUsername());
dataSource.setPassword(orcaleDataCfg.getPassword());
//配置初始化大小、最小、最大
dataSource.setInitialSize(5);
dataSource.setMinIdle(5);
dataSource.setMaxActive(5);
//连接泄漏监测
dataSource.setRemoveAbandoned(true);
dataSource.setRemoveAbandonedTimeout(30);
//配置获取连接等待超时的时间
dataSource.setMaxWait(20000);
//配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
dataSource.setTimeBetweenEvictionRunsMillis(20000);
//防止过期,Oracle必须添加 FROM DUAL!
dataSource.setValidationQuery("SELECT 'x' FROM DUAL");
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(true);
return dataSource;
}
} catch (Exception e) {
return null;
}
return null;
} /**
* 取得已经构造生成的数据库连接
*
* @return 返回数据库连接对象
* @throws Exception
*/
public Connection getConnect() throws Exception {
Connection con = null;
try {
GetDbConnect();
con = dataSource.getConnection();
} catch (Exception e) {
throw e;
}
return con;
} public synchronized JdbcTemplate getJdbcTemplate() throws Exception{
DruidDataSource druidDataSource = GetDbConnect();
if(jdbcTemplate==null){
jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(druidDataSource);
}
return jdbcTemplate;
} public static void main(String[] args) throws Exception {
DbConnect dbConnect = new DbConnect();
Connection connection = dbConnect.getConnect();
String sql = "SELECT * from DZHY_GAYZ_KZLOG";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();
if (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
String SQL = "insert into DZHY_GAYZ_KZLOG (id,uniscid,entname,startdate,enddate,kz_uniscid,kz_entname) values (?,?,?,?,?,?,?)";
jdbcTemplate.update(SQL,DateUtil.get32UUIDMilli(),"333","需要刻章33",new Date(),new Date(),"33-33","刻章店33");
}
}
java代码实现数据源切换(连接池简单粗暴)的更多相关文章
- 2017.10.21 Java中的数据源与连接池技术
1.数据源技术就是预先建立好一定的数量的数据库连接,并将这些连接保存在连接池中,有连接池负责对这些数据库连接管理,当访问数据库时,只需要从连接池中取出有空闲状态的数据库连接:当程序访问数据库结束时,释 ...
- 《深入理解mybatis原理3》 Mybatis数据源与连接池
<深入理解mybatis原理> Mybatis数据源与连接池 对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构 ...
- java基础(30):DBUtils、连接池
1. DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils. DBUtils就是JDBC的 ...
- JAVA基础之DBUtils与连接池
利用DBUtils进一步简化JDBC数据库的增删改查的代码,同时利用从连接池中接取连接,进而进行简化和减少资源的消耗! 一.DBUtils: 1.DBUtils就是JDBC的简化开发工具包.需要项目导 ...
- 深入理解Spring Boot数据源与连接池原理
Create by yster@foxmail.com 2018-8-2 一:开始 在使用Spring Boot数据源之前,我们一般会导入相关依赖.其中数据源核心依赖就是spring‐boot‐s ...
- eclipse下jdbc数据源与连接池的配置及功能简介
今天在做四则运算网页版的时候遇到了一个困惑,由于需要把每个产生的式子存进 数据库,所以就需要很多次重复的加载驱动,建立连接等操作,这样一方面写程序不方便,加大了程序量,另一方面,还有导致数据库的性能急 ...
- Spring(Bean)4 配置数据源、连接池
<!-- 配置数据源 Mysql c3p0: 连接池. <bean id="dataSource" class="com.mchange.v2.c3p0.Co ...
- Java常见的开源数据连接池有哪些,并对参数做出简单的说明
(1)DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP. (2)c3p0 c3p ...
- mybatis数据源与连接池
1.概念介绍1.1 数据源:顾名思义,数据的来源,它包含了数据库类型信息,位置和数据等信息,一个数据源对应一个数据库. 1.2 连接池:在做持久化操作时,需要通过数据库连接对象来连接数据库,而连接池就 ...
随机推荐
- C#高级编程(第9版) 第08章 委托、lambda表达式和事件 笔记
本章代码分为以下几个主要的示例文件: 1. 简单委托 2. 冒泡排序 3. lambda表达式 4. 事件示例 5. 弱事件 引用方法 委托是寻址方法的.NET版本.在C++中函数 ...
- 第一章:MySQL架构和历史
1.MySQL逻辑架构 MySQL存储引擎架构:将查询处理以及其他任务系统和数据的存储处理分离开来,这样做的好处在于可以根据需要灵活选择存储引擎. 第一层架构 -- 连接处理.授权认证.安全等. 第二 ...
- tensorflow中的神经网络笔记
1.NN----神经网络 2.CNN卷积神经网络 CNN网络一共有5个层级结构: 输入层 卷积层 激活层 池化层 全连接FC层 一.输入层 与传统神经网络/机器学习一样,模型需要输入的进行预处理操作, ...
- POJ 3438:Look and Say
Look and Say Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9196 Accepted: 5566 Desc ...
- Java基础知识点简记
此篇主要记录(搬运)的是Java中一些常见概念的理解,大致内容如下 final.finally.finalize的区别 Java的传值或者传引用的理解 重写Override和重载Overload的理解 ...
- Linux下mysql5.7安装
当前最新版本为5.7,此次将分别采用yum安装和tar包编译安装的方式分别说明. 一.Yum安装 A:获取repo源 [root@localhost ~]# wget http://dev.mysql ...
- linux环境java程序cpu爆表问题查证
1.top命令查找导致cup爆表的进程 2. top -H -p10832 (10832是Java进程的PID)命令找出了具体的线程 3.使用用命令 jstack 10832> jstack.t ...
- (一)ORBSLAM2主要配置
(1)ORBSLAM2文件夹里面有个build.sh文件,里面主要是编译时终端需要执行的命令,这里把它们放到.sh文件中统一执行. (2)阅读ORBSLAM2的CmakeList可以知道运行ORBSL ...
- 为什么常用 Map<> map = new HashMap()
在初学Java的时候,经常能看到教材上的写法,使用了接口Map来引用一个map,而不是它的具体实现,那么这样做的好处是什么呢? <Effective Java>第52条:通过接口引用对象 ...
- UVA 125 统计路径条数 FLOYD
这道题目折腾了我一个下午,本来我的初步打算是用SPFA(),进行搜索,枚举出发点,看看能到达某个点多少次,就是出发点到该点的路径数,如果出现环,则置为-1,关键在于这个判环过程,如果简单只找到某个点是 ...