写在前面:
为什么使用连接池?
减少计算机性能消耗
连接池的核心?
将连接指向改了,指向数据源而不是直接指向数据库
什么是JNDI?
java命名与目录接口,将某一个资源(对象),以配置文件的形式写入,通过配置文件拿到资源(对象)信息
Tomcat-bdcp连接池
1.导入jar包(版本自选)
mysql-connector-java-8.0.19.jar
点击进入maven库下载
2.配置tomcat中context.xml文件
- 进入tomcat安装目录,tomcat/conf/context.xml
- 添加配置信息
<Resource name="Demo"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="123456"
maxIdle="30"
maxWait="10000"
maxActive="100"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/aa" />
配置信息中各种信息的意思如下表:
3.配置项目工程中web.xml文件
<resource-ref>
<res-ref-name>Demo</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
这样子就配置完成了,接下来就可以使用了!
4.使用:将访问数据库的连接指向数据源
以前写过用jdbc直接访问数据库:点击查看
这是与数据库建立连接的代码(jdbc直接连接数据库)
现在我们通过jdbc连接池连接
Class.forName("com.mysql.cj.jdbc.Driver");
Context ctx=new InitialContext();// 从context.xml拿数据源
DataSource ds=(DataSource)ctx.lookup("java:comp/env/Demo");
connection=ds.getConnection();
总结下来,使用数据源,就是更改Connection的获取方式
dbcp连接池
1.导入jar包(版本自选)
- commons-dbcp-1.4.jar
主要用到此jar包下面两个类:
Bas icDataSource、Basi cDataSourceFactory - commons-pool-1.6.jar
- mysql-connector-java-8.0.19.jar
2.使用
-
以Bas icDataSource方式获取
new一个DasicDataSource对象然后设置各种属性 -
BasicDataSourceFactory方式: 配置方式
编写一个“ properties”文件(dbcpconfig. properties), 编写方式key=value
下面以一个栗子来理解,首先创建一个类
这是第一种方式,new一个DasicDataSource对象后设置各种属性
package com.thxy.untils;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;
public class DBCPDemo {
public static DataSource getDataSourceWithDBCP(){
BasicDataSource dbcp = new BasicDataSource();
dbcp.setDriverClassName("com.mysql.cj.jdbc.Driver");
dbcp.setUrl("jdbc:mysql://localhost : 3306/my_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT");
dbcp.setUsername("root");
dbcp.setPassword("123456");
dbcp.setInitialSize(20);
dbcp.setMaxActive(10);
return dbcp;
}
public static void main(String[] args) throws Exception {
System.out.println(getDataSourceWithDBCP().getConnection());
}
}
运行结果,拿到链接并输出
下面是第二种方式,先编写一个文件dbcpconfig. properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost : 3306/my_test?
useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username=root
password=123456
initialSize=10
创建一个类
package com.thxy.untils;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;
public class DBCPDemo2 {
public static DataSource getDataSourceWithDBCPBYProperties() throws Exception{
DataSource dbcp =null;
Properties properties =new Properties();
InputStream input = new DBCPDemo().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");
properties.load(input);
dbcp=BasicDataSourceFactory.createDataSource(properties);
return dbcp;
}
public static void main(String[] args) throws Exception {
System.out.println(getDataSourceWithDBCPBYProperties().getConnection());
}
}
运行结果:拿到链接并输出
c3p0连接池
核心类 : ComboPool edDataSource
他有两种方式:硬编码、配置文件
但是它们合二为一,通过ComboPool edDataSource的构造方法参数区分: 如果无参,硬编码;有参,配置文件
1.导入jar包(版本自选)
c3p0-0.9.5.5.jar
mchange-commons-java-0.2.12.jar
如果是orcal数据库,则还需导入orcal适配的包。
点击进入maven库下载
2.使用
- 硬编码模式,先new一个ComboPooledDataSource,然后通过new的对象获取各种配置信息
package com.thxy.untils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
public class c3p0Demo {
public static DataSource getDateSourceWithC3p0(){
ComboPooledDataSource c3p0 =new ComboPooledDataSource();
try {
c3p0.setDriverClass("com.mysql.cj.jdbc.Driver");
} catch (PropertyVetoException e) {
e.printStackTrace();
}
c3p0.setJdbcUrl("jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT");
c3p0.setUser("root");
c3p0.setPassword("123456");
return c3p0;
}
public static void main(String[] args) throws Exception{
System.out.println(getDateSourceWithC3p0().getConnection());
}
}
运行结果:获取链接并输出
- 配置文件模式
编写配置文件"c3p0-config.xml"(注意名字不要改)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="user">root</property>
<property name="password">123456</property>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT</property>
<property name="checkoutTimeout">30000</property>
</default-config>
</c3p0-config>
注意注意注意:要把url里所有的“&”改成“&”(带分号),否则会报错
编写一个类
package com.thxy.untils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
public class c3p0Demo {
public static DataSource getDateSourceWithC3p0ByXml(){
ComboPooledDataSource c3p0= new ComboPooledDataSource();
return c3p0;
}
public static void main(String[] args) throws Exception{
System.out.println(getDateSourceWithC3p0ByXml().getConnection());
}
}
运行结果
转载:https://blog.csdn.net/weixin_44894962/article/details/106125624