连接池

Spring Boot配置MongoDB连接池

雨燕双飞 提交于 2019-12-02 16:38:23
Spring Boot中通过依赖 spring-boot-starter-data-mongodb ,来实现 spring-data-mongodb 的自动配置。 但是默认情况下,Spring Boot 中,并没有像使用MySQL或者Redis一样,提供了连接池配置的功能。因此,我们需要自行重写 MongoDbFactory ,实现MongoDB客户端连接的参数配置扩展。 需要说明的是,MongoDB的客户端本身就是一个连接池,因此,我们只需要配置客户端即可。 配置文件 为了统一Spring Boot的配置,我们要将重写的配置也配置到 application.yml 中,前缀为 spring.data.mongodb.custom 下(前缀可自己随意配置): spring: data: mongodb: custom: hosts: - 10.0.5.1 - 10.0.5.1 ports: - 27017 - 27018 replica-set: mgset-3590061 username: jancee password: abc123 database: jancee authentication-database: admin connections-per-host: 20 min-connections-per-host: 20 该配置例子中,配置了副本集

java锁_IO_NIO_AIO_BIO_GC_Jvm

被刻印的时光 ゝ 提交于 2019-12-02 16:19:59
# 多线程环境下如何保证一个共享数据的一致性? # 使用synchronized关键字 使用Lock锁 使用Atomic原子类 多线程之不使用锁保证数据的一致性:多线程共享变量的情况下,为了保证数据的一致性,往往需要对这些变量的访问进行加锁。 而锁本身又会带来一些问题和开销。Immutable Object模式的意图:通过使用对外可见的状态不可变的对象(即Immutable对象), 使得共享对象“天生”具有线程安全性,而无需额外添加同步访问控制 # 锁synchronize、Lock、ReenTrantLock 的区别 # 1.1 相似点: 这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统需要在用户态与内核态之间来回切换,代价很高,不过可以通过对锁优化进行改善)。 1.2 区别: 1.2.1 API层面 这两种方式最大区别就是对于Synchronized来说,它是java语言的关键字,是原生语法层面的互斥,需要jvm实现。而ReentrantLock它是JDK 1.5之后提供的API层面的互斥锁,需要lock()和unlock()方法配合try/finally语句块来完成。 synchronized既可以修饰方法

Jedis 连接池配置详解

老子叫甜甜 提交于 2019-12-02 15:44:38
XML 配置 <!-- 定义加载资源文件 --> <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true" /> <!-- 对象资源池初始化配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.pool.maxTotal}"/> <property name="maxIdle" value="${redis.pool.maxIdle}" /> <property name="minIdle" value="${redis.pool.minIdle}"/> <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/> <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" /> <property name="testOnReturn" value="${redis.pool.testOnReturn}" />

JDBC

十年热恋 提交于 2019-12-02 14:27:09
ideac3p0连接池技术 1.在项目目录下创建文件夹,导入jar包c3p0-0.9.5.2.jar, mchange-commons-1.2.jar, mysql-connector-java-5.1.37-bin.jar, 右键选择As a Library。 2. 定义配置文件,直接放在src目录下,创建对象时被自动加载,名称c3p0.properties或者c3p0-config.xml 内容: <c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/db4</property> <property name="user">root</property> <property name="password">root</property> <!-- 连接池参数 --> <!--初始化申请的连接数量--> <property name="initialPoolSize">5</property> <!--最大的连接数量--> <property name=

SQLALchemy之介绍,基本使用

Deadly 提交于 2019-12-02 12:21:48
一、介绍 SQLALchemy也是一个python的ORM框架,django内部的ORM框架只适用于django,而SQLALchemy适用于所有python的web框架 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作 Engine,框架的引擎 Connection Pooling ,数据库连接池 Dialect,选择连接数据库的DB API种类 Schema/Types,架构和类型 SQL Exprression Language,SQL表达式语言 DBAPI,也就是pymysql或者MySQLdb模块 总体流程:类和对象的操作转换为SQL语句交给框架引擎,引擎去数据库连接池拿连接。从Dialect获取用哪个模块,然后调用DBAPI中对应的模块,利用模块去真正的数据库中做操作 二、使用 1、执行原生sql语句 import time import threading import sqlalchemy from sqlalchemy import

SpringBoot之集成数据库

狂风中的少年 提交于 2019-12-02 11:44:55
一、集成 MySQL 数据库 1.1 添加依赖 <dependencies> <!--Spring 数据库相关依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--mysql 驱动依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies> 1.2 设置配置文件 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8 username: root password: sa000 1.3 测试连接 添加测试依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring

面经连接池 - 集合框架(一)

帅比萌擦擦* 提交于 2019-12-02 11:08:06
List List是Java非常常用的数据集合框架。List是有序的Colletion(对映下标与插入顺序有关) Java List一共有三个实现类:ArrayList、LinkList、Vector(不常用,渐渐被取代) 1.ArrayList(数组、随机访问、不同步 线程不安全) ArrayList 是最常用的List实现类,底层通过数组实现,所以它允许对元素快速随机访问 get (int index)时间复杂度为O(1), add ( E e)、 addAll ( Collection <? extends E > c) 默认添加到数组末尾(时间复杂度为O(1))、 remove ( Object o)从列表中删除指定元素的第一个出现(如果存在)。时间复杂度为O(1) 数组的缺点就是每个元素之间不能有间隔,当从ArrayList 的中通过下标的方式插入或者删除,都需要对数组进行复制、移动代价比较高(时间复杂度为O(n)) 源码解析: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ... /** * Default initial capacity. */ private static

C3P0 详解

江枫思渺然 提交于 2019-12-02 08:53:50
定义: C3P0是一个开源的JDBC连接池,目前使用它的开源项目有 Hibernate,Spring 等。 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。获取一个连接,系统要在背后做很多消耗资源的事情,大多时候,创建连接的时间比执行sql语句的时间还要长。用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。 使用方法: 1.导入jar包:c3p0和mysql 2.配置xml文件 c3p0通过set方法进行配置 c3p0通过c3p0-config.xml文件进行配置 关于通过配置文件进行配置的话, 这边需要把xml文件方法同src文件夹下,c3p0会扫描文件进行相关的配置。 在Maven依赖中要加入c3p0和mysql-connector-java依赖,版本号一定要写。 废话不多说,下面是c3p0-config.xml文件的代码 是不是代码简洁了很多,所以在我们通常使用配置文件来创建数据库的连接池。 c3p0常用配置参数介绍 在前面的c3p0的相关配置中,我们看到了c3p0的配置参数,这里我们介绍几个常用的c3p0的配置参数 最基础的参数配置:

为什么要使用连接池?

时光总嘲笑我的痴心妄想 提交于 2019-12-02 08:49:05
传统的数据库连接方式 一个连接对象对应一个物理连接,每次操作都打开一个物理连接,使用完都关闭连接,造成系统性能低下。 连接池技术 客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的close()方法,物理连接并没有关闭,数据源的实现只是删除了客户程序中的连接对象和池中的连接对象之间的联系. 数据库连接的建立及关闭是耗费系统资源的操作,在大型应用中对系统的性能影响尤为明显。为了能重复利用数据库连接对象,缩短请求的响应时间和提高服务器的性能,支持更多的客户,应采用连接池技术. 来源: https://www.cnblogs.com/Yanss/p/11739073.html

java架构之路-(Redis专题)SpringBoot连接Redis超简单

孤街醉人 提交于 2019-12-02 07:52:54
  上次我们搭建了Redis的主从架构,哨兵架构以及我们的集群架构,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis 主从架构    如何配置我上次已经讲过了, https://www.cnblogs.com/cxiaocai/p/11711377.html 。我们这次主要看如何用java来操作redis,先来复习一下上次的配置,准备三台服务器,安装redis,保证互通,两台改为slave,配置 replicaof IP 端口,主从复制是通过rdb文件来复制的。大概就这么多,配置不再多说了,我们直接上代码。   jedis   创建一个Maven项目,引入我们的jedis依赖包 <!-- 加入jedis依赖 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 这里我就不封装连接工具类啦,我们直接看下测试代码吧 public static void main(String[] args) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig