标签:out 载器 https tor stat lib set 设计 opened
1、连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
作用:避免频繁地创建与消毁,给服务器减压力。
2、数据库的弊端:
1.当用户群体少服务器可以支撑,如果群体比较大万级别服务器直接死机。数据库默认的并发访问50.
2.每一个用完数据库之后直接关闭,不能重复利用太浪费资源。
3、设计连接池:
1.在池子中创建出多个连接供使用。
2.当用户需要操作数据库时直接从池子中获取连接即可。
3.当用户使用完毕之后把连接归还给连接池,可以达到重复使用。
4.可以设定池子的最大容器。比如50个连接,当第51个人访问的时候,需要等待。
5.其它用户释放资源的时候,可以使用。
4、手动实现连接池
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class JDBCTool { private static Connection conn; private static String driverName; private static String username; private static String url; private static String password; static { InputStream is = JDBCTool.class.getClassLoader().getResourceAsStream("qq.properties"); Properties prop = new Properties(); try { prop.load(is); } catch (IOException e) { e.printStackTrace(); } driverName = (String)prop.get("driverClassName"); username = (String)prop.get("username"); url = (String)prop.get("url"); password = (String)prop.get("password"); try { Class.forName(driverName); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConn() { try { conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void close(Connection conn,PreparedStatement ps,ResultSet rs) { if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if(ps!=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
import java.sql.Connection; import java.util.ArrayList; import java.util.List; public class MyJDBCPool { /* 1.定义一个容器 集合 2.初始化连接,并放在池子中。 3.创建一个从容器中获取连接的方法 4.创建一个归还连接的方法。*/ private static List<Connection> pool = new ArrayList<>(); private static int List_size = 3; static { for(int i=0;i<List_size;i++) { Connection conn=null; conn = JDBCTool.getConn(); pool.add(conn); System.out.println("当前存放连接为:"+conn+",当前池子中剩余连接数为:"+pool.size()); } System.out.println("====================="); } //取出一个连接 要判断是否为空 public static Connection getConn() throws NullPointerException{ if(pool.isEmpty()) { System.out.println("请等待"); throw new NullPointerException("已经空了,别拿了"); } Connection conn = pool.remove(0); System.out.println("当前取出的连接为:"+conn+",当前剩余连接数为:"+pool.size()); return conn; } //归还连接 要判断是否为真正的连接 public static void returnConn(Connection conn) { if(conn==null) { System.out.println("你玩我?"); return; } pool.add(conn); System.out.println("当前存入的连接为:"+conn+",当前剩余连接数为:"+pool.size()); } }
import java.sql.Connection; public class Test1 { public static void main(String[] args) { Connection conn = MyJDBCPool.getConn(); Connection conn1 = MyJDBCPool.getConn(); Connection conn2 = MyJDBCPool.getConn(); MyJDBCPool.returnConn(conn2); MyJDBCPool.returnConn(conn1); MyJDBCPool.returnConn(conn); } }
注:这里涉及到一个properties文件,文件内容是key =value形式存在的,先使用类加载器(或输入流)将文件加载进来,然后使用properties对象处理文件,使用get()方法获取内容。
1、导入连接池的步骤
导包 buildpath
配置文件 properties
加载文件流,使用properties处理文件
使用连接池的API读取prop对象,创建连接池
getConnection获取连接
返回连接的引用
2、dbcp连接池 开源连接池,效率高,但安全性不强
工具包下载地址:http://commons.apache.org/proper/commons-pool/download_pool.cgi
http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
导包 commons-dbcp 和commons-pool mysql-connection
配置文件导入*.properties 建议放在src根目录
import java.sql.Connection; import org.apache.commons.dbcp.BasicDataSource; public class Test1{ public static void main(String[] args) throws Exception{ BasicDataSource bds = new BasicDataSource(); // 4个必须设置的属性 bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql:///db0619"); bds.setUsername("root"); bds.setPassword("root"); //其他属性,都是可选属性 bds.setInitialSize(100); // 初始创建100个连接 bds.setMaxActive(50); // 最大活动数 bds.setMaxIdle(20); // 最大空闲数 bds.setMinIdle(10); // 最小空闲数 bds.setMaxWait(-1); // 最大等待时间 Connection conn = bds.getConnection(); System.out.println(conn); Connection conn2 = bds.getConnection(); System.out.println(conn2); } }
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class DBCPUtil { private static DataSource ds; static{ try { Properties p = new Properties(); InputStream is = new FileInputStream("src/db.properties"); p.load(is); ds = BasicDataSourceFactory.createDataSource(p); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDataSource(){ return ds; } public static Connection getConnection(){ Connection conn = null; try { conn = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
3、c3p0连接池
工具包:https://sourceforge.net/projects/c3p0/
导包 c3p0-0.9.5.2.jar mchange-commons-java... mysql-connection...
配置文件名称:c3p0-config.xml c3p0.properties
import java.sql.Connection; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Test1{ public static void main(String[] args) throws Exception{ ComboPooledDataSource cds = new ComboPooledDataSource(); //4 个基本设置 cds.setDriverClass("com.mysql.jdbc.Driver"); cds.setJdbcUrl("jdbc:mysql:///db0619"); cds.setUser("root"); cds.setPassword("root"); Connection conn = cds.getConnection(); System.out.println(conn); } }
import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Util { private static DataSource ds; static{ //ds = new ComboPooledDataSource();//加载src/c3p0-config.xml,并使用配置文件中默认的配置配置<default-config> ds = new ComboPooledDataSource("offcn"); //加载src/c3p0-config.xml,并使用名字为offcn的配置配置 } public static DataSource getDataSource(){ return ds; } public static Connection getConnection(){ Connection conn = null; try { conn= ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } }
4、druid连接池
工具包:
导包:druid-1....jar mysql-connection...
配置文件名称 druid.properties
import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DruidUtils { private static DataSource ds; private static Connection conn; static{ try { InputStream is = MyJDBC.class.getClassLoader().getResourceAsStream("druid.properties"); Properties prop = new Properties(); prop.load(is); ds = DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() { try { conn = ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static DataSource getDataSource() { return ds; } }
标签:out 载器 https tor stat lib set 设计 opened
原文地址:https://www.cnblogs.com/xfdhh/p/11372229.html