DBCP

高并发系统设计40讲之 池化技术

荒凉一梦 提交于 2020-04-29 15:59:02
系统架构中,数据库的连接时间比SQL的执行时间要长, 为了提高效率,使用数据库连接池将连接预先建立好 用连接池预先建立数据库连接 数据库连接池有两个最重要的配置:最小连接数和最大连接数,它们控制着从连接池中获取连接的流程: 如果当前连接数小于最小连接数,则创建新的连接处理数据库请求; 如果连接池中有空闲连接则复用空闲连接; 如果空闲池中没有连接并且当前连接数小于最大连接数,则创建新的连接处理请求; 如果当前连接数已经大于等于最大连接数,则按照配置中设定的时间(C3P0 的连接池配置是 checkoutTimeout)等待旧的连接可用; 如果等待超过了这个设定时间则向用户抛出错误。 连接池故障: 数据库的域名对应的 IP 发生了变更,池子的连接还是使用旧的 IP,当旧的 IP 下的数据库服务关闭后,再使用这个连接查询就会发生错误; MySQL 有个参数是“wait_timeout”,控制着当数据库连接闲置多长时间后,数据库会主动地关闭这条连接。这个机制对于数据库使用方是无感知的,所以当我们使用这个被关闭的连接时就会发生错误。 如何保持连接池可用: 启动一个线程来定期检测连接池中的连接是否可用,比如使用连接发送“select 1”的命令给数据库看是否会抛出异常,如果抛出异常则将这个连接从连接池中移除,并且尝试关闭。目前 C3P0 连接池可以采用这种方式来检测连接是否可用

logback日志输出至数据库

烈酒焚心 提交于 2020-04-28 03:46:48
我们知道将数据库输出到不同的地方需要使用不同的appender表示,那下面了解一下输出到数据库的DBAppender。 1.DBAppender 由于DBAppender会把记录写到数据库中,因此我们必须知道数据库的表结构。这个结构是固定的,但是可以通过继承DBAppenderBase类来实现修改表的结构,详细做法参考 https://blog.csdn.net/qq_20914913/article/details/92830914#%E4%B8%80%E3%80%81%E5%8E%9F%E5%A7%8Blogback%20%C2%A0MySQL%E9%85%8D%E7%BD%AE 1.根据官方文档创建数据库 DBAppender会把记录事件写入数据库的三张表(logging_event、logging_event_property、logging_event_exception),并且这三张表的结构是固定的。创建这三张表的脚本如下: BEGIN ; DROP TABLE IF EXISTS logging_event_property; DROP TABLE IF EXISTS logging_event_exception; DROP TABLE IF EXISTS logging_event; COMMIT ; BEGIN ; CREATE TABLE logging

JavaWeb学习之DButils和连接池

时光毁灭记忆、已成空白 提交于 2020-04-28 01:54:27
DButils DButils是JDBC的简化开发工具包。需要导入commons-dbutils-1.6.jar才能够正常使用DButils工具类 DButils封装了对JDBC的操作,简化了JDBC操作,可以少些代码。DButils的三个核心功能: 1、 QueryRunner 提供了对 sql语句操作的API 2、 ResultSetHandler接口 ,用于 定义select操作后怎样去封装结果集 3、DButils类,是一个工具类,定义了 关闭资源与事物处理的方法 QueryRunner核心类 1、 update (Connection conn,String sql,Object...params),用于完成表数据 增加、删除、修改 的操作 //添加 public static void add() throws SQLException { QueryRunner qr = new QueryRunner(); String sql = "insert into users(username,pwd) values(?,?)"; Object[] obj = { "houyi", "123456" }; int row = qr.update(conn,sql, obj); conn.close(); if (row > 0) { System.out.println(

java-DBUtils的练习题

霸气de小男生 提交于 2020-04-27 23:51:01
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。 DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 Dbutils三个核心功能介绍 QueryRunner中提供对sql语句操作的API. ResultSetHandler接口,用于定义select操作后,怎样封装结果集. DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法 package cn.incast.homework31DBUtils; import java.math.BigDecimal; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils

JDBC连接数据库的四种方式:DriverManager,DataSource,DBCP,C3P0

依然范特西╮ 提交于 2020-04-27 22:21:14
方法1:使用java.sql.DriverManager类 驱动管理器类,用于管理所有注册的驱动程序。 (注:DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。) 常用的两个API registerDriver(driver) : 注册驱动类对象 ConnectiongetConnection(url,user,password); 获取连接对象 @Test public void test1 (){ Statement stmt = null; Connection conn = null; try { //1.驱动注册程序 --内部执行了RegisterDriver Class.forName( "com.mysql.jdbc.Driver"); //2.获取连接对象 conn = DriverManager.getConnection(url, user, password); //3.创建Statement stmt = conn.createStatement(); //4.准备sql String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20)

java基础(30):DBUtils、连接池

寵の児 提交于 2020-04-27 22:20:01
1. DBUtils 如果只使用 JDBC 进行开发,我们会发现冗余代码过多,为了简化 JDBC 开发,本案例我们讲采用 apache commons 组件一个成员: DBUtils 。 DBUtils 就是 JDBC 的简化开发工具包 。需要项目导入commons-dbutils-1.6.jar 才能够正常使用 DBUtils 工具。 1.1 概述 DBUtils 是 java 编程中的数据库操作实用工具,小巧简单实用。 DBUtils 封装了对 JDBC 的操作,简化了 JDBC 操作,可以少写代码。 Dbutils 三个核心功能介绍   QueryRunner 中提供对 sql 语句操作的 API.   ResultSetHandler 接口,用于定义 select 操作后,怎样封装结果集 .   DbUtils 类,它就是一个工具类 , 定义了关闭资源与事务处理的方法 1.2 QueryRunner 核心类 update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作 query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作 1.3 QueryRunner 实现添加

Spring boot连接mysql数据库启动

混江龙づ霸主 提交于 2020-04-24 09:51:51
说到数据库配置,我们最开始想象的也就是JDBC连接。 1、首先,我们得准备mysql的驱动jar包 2、得有数据库 3、使用JDBC连接mysql数据库demo //JDBC驱动名 String JDBC_DRIVER = "com.mysql.jdbc.Driver"; //数据库URL:这里的mysql2020是数据库名称 String JDBC_URL = "jdbc:mysql://localhost:3306/mysql2020?useSSL=false&serverTimezone=UTC"; //数据库的用户名与密码 String USER = "root"; String PASS = "123456"; //通过DriverManager类获得该连接对象才能访问数据库 Connection connection = null; //通过Connection获得该结果对象用于执行静态的SQL语句 Statement statement = null; try { //注册JDBC驱动 Class.forName(JDBC_DRIVER); //数据库的连接:通过DriverManager类的getConnection方法,传入三个参数:数据库URL、用户名、用户密码,实例化connection对象 connection = DriverManager

Invalid property &apos;driver&apos; of bean class [org.apache.commons.dbcp.BasicDataSource]

送分小仙女□ 提交于 2020-04-17 14:04:10
【推荐阅读】微服务还能火多久?>>> Spring整合MyBatis! main方法测试,出现异常: 一堆错,很懵逼! 别慌,慢慢分析,也许错误很简单; 先分析一下applicationContext.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="config" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="locations"> <array> <value>classpath:db.properties</value> </array> </property> </bean> <bean id=

Java 数据持久化系列之 HikariCP (一)

白昼怎懂夜的黑 提交于 2020-04-15 11:57:12
【推荐阅读】微服务还能火多久?>>> 在上一篇 《Java 数据持久化系列之池化技术》 中,我们了解了池化技术,并使用 Apache-common-Pool2 实现了一个简单连接池,实验对比了它和 HikariCP、Druid 等数据库连接池的性能数据。在性能方面,HikariCP遥遥领先,而且它还是 Spring Boot 2.0 默认的数据库连接池。下面我们就来了解一下这款明星级开源数据库连接池的实现。 本文的主要内容包括: HikariCP 简介,介绍它的特性和现况。 HikariCP 的配置项详解,分析部分配置的影响。 HikariCP 为什么这么快,介绍其优化点。 这里啰嗦两句,由于本系列会涉及很多开源项目,比如说 HikariCP、Druid、Mybatis等,所以简单聊一下我对学习开源项目的认识,这也是我自己行文或者组织系列文章顺序的思路,后续有时间再详细总结一下。 安装并检查提供的所有工具,比如 Redis 目录下的 redis-check-aof 等工具的作用,这些工具都是官方特意提供的,一般都是日常经常要使用的,了解其功能。 运行,学习所有配置项的功能,原理和优缺点,比如 Redis 的内存溢出控制策略 maxmemory-policy 的可选值都有哪些,分别对应的策略是什么含义,适用于哪些场景等。 原理研究,针对关键特性进行研究,比如 Netty 的异步

Activiti流程引擎配置实战

*爱你&永不变心* 提交于 2020-04-14 12:04:58
【推荐阅读】微服务还能火多久?>>> 一 pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath/> </parent> <groupId>com.syc.activiti</groupId> <artifactId>activiti6-helloworld</artifactId> <version>1.0-SNAPSHOT</version> <dependencies>