1.Spring配置C3P0连接池
官网:http://www.mchange.com/projects/c3p0/
步骤:
- 导入C3P0坐标
- 修改applicationContext.xml里面DataSource的class属性值, 修改属性名
实现:
- 导入坐标
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
- 配置数据源连接池
<!-- 配置C3P0数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql:///itcastspring" />
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="user" value="root" />
<property name="password" value="root" />
</bean>
<!-- 管理JDBC模版 -->
<bean id="jdbcTemplete" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
核心类:`com.mchange.v2.c3p0.ComboPooledDataSource
2.Spring配置Druid连接池
官网:http://druid.io/
步骤:
- 导入Druid坐标
- 修改applicationContext.xml里面DataSource的class属性值, 修改属性名
实现:
-
导入坐标
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency>
-
配置数据源连接池
<!--注册dataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/itcastspring"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
</bean>
3.Spring配置DBCP连接池【扩展】
官网:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
步骤:
- 导入DBCP连接池坐标
- 修改applicationContext.xml里面DataSource的class属性值, 修改属性名
-
导入坐标
<dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
-
配置连接池
<!-- 配置DBCP数据库连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url" value="jdbc:mysql:///spring_jdbc" /> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean> <!-- 管理JDBC模版 --> <bean id="jdbcTemplete" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean>
核心类:
org.apache.commons.dbcp.BasicDataSource
4.Spring配置HikariCP连接池【扩展】
官网:https://github.com/brettwooldridge/HikariCP
步骤:
- 添加HikariCP坐标
- 修改applicationContext.xml里面DataSource的class属性值, 修改属性名
实现:
-
导入HikariCP坐标
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.1.0</version> </dependency>
-
配置数据源连接池
<!-- 配置HikariCP数据库连接池 --> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <property name="jdbcUrl" value="jdbc:mysql:///spring_jdbc" /> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean> <!-- 管理JDBC模版 --> <bean id="jdbcTemplete" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean>
核心类:
com.zaxxer.hikari.HikariDataSource
-
为什么HikariCP为什么越来越火?
- 效率高
- 一直在维护
- SpringBoot2.0 现在已经把HikariCP作为默认的连接池了
-
为什么HikariCP被号称为性能最好的Java数据库连接池?
-
优化并精简字节码: HikariCP利用了一个第三方的Java字节码修改类库Javassist来生成委托实现动态代理
-
优化代理和拦截器:减少代码,代码量越少。一般意味着运行效率越高、发生bug的可能性越低.
-
自定义集合类型ConcurrentBag:ConcurrentBag的实现借鉴于C#中的同名类,是一个专门为连接池设计的lock-less集合,实现了比LinkedBlockingQueue、LinkedTransferQueue更好的并发性能。ConcurrentBag内部同时使用了ThreadLocal和CopyOnWriteArrayList来存储元素,其中CopyOnWriteArrayList是线程共享的。ConcurrentBag采用了queue-stealing的机制获取元素:首先尝试从ThreadLocal中获取属于当前线程的元素来避免锁竞争,如果没有可用元素则再次从共享的CopyOnWriteArrayList中获取。此外,ThreadLocal和CopyOnWriteArrayList在ConcurrentBag中都是成员变量,线程间不共享,避免了伪共享(false sharing)的发生。
-
使用FastList替代ArrayList: FastList是一个List接口的精简实现,只实现了接口中必要的几个方法。JDK ArrayList每次调用get()方法时都会进行rangeCheck检查索引是否越界,FastList的实现中去除了这一检查,只要保证索引合法那么rangeCheck就成为了不必要的计算开销(当然开销极小)。
-
【小结】
- 导入连接池坐标
- 改DataSource的class属性值, 配置属性名
知识点-Spring引入Properties配置文件
【目标】
掌握Spring引入Properties配置文件
【步骤】
-
定义jdbc.properties文件
-
把jdbc.properties引入到applicationContext.xml
-
根据key获得值, 赋值
【实现】
1.jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_day03
jdbc.username=root
jdbc.password=123456
2.在applicationContext.xml页面使用
- 引入配置文件方式一(不推荐使用)
<!-- 引入properties配置文件:方式一 (繁琐不推荐使用) -->
<bean id="properties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
- 引入配置文件方式二【推荐使用】
<!-- 引入properties配置文件:方式二 (简单推荐使用) -->
<context:property-placeholder location="classpath:jdbc.properties" />
- bean标签中引用配置文件内容
<!-- hikariCP 连接池 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="driverClassName" value="${jdbc.driver}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
注意:在使用
<context:property-placeholder/>
标签时,properties配置文件中的key一定要是带点分隔的。例如jdbc.url