什么是数据库连接池
使用数据库连接池的好处是减少了连接的创建和关闭的开销,提高了数据库访问的性能和效率。
为什么我们要使用数据库连接池
我们使用数据库连接池的主要原因是为了提高应用程序访问数据库的性能和效率。使用数据库连接池的好处:
- 连接重用:连接池可以重复使用已经建立的连接,避免了频繁地创建和关闭连接的开销。这样可以节省连接建立的时间和资源消耗。
- 连接管理:连接池可以自动管理连接的状态和可用性。在应用程序使用连接之前,连接池会对连接进行验证和修复,确保连接的有效性,从而提高应用程序对数据库的可靠性。
- 连接的限制和控制:数据库连接池可以控制同时打开的连接数,防止过多的连接造成数据库的负担。这样可以避免数据库连接过载导致性能下降。
- 连接的高可用性:连接池可以实时监控连接的可用性,并在连接出现问题时进行故障转移和重试。这提高了应用程序对数据库的可用性和容错性。
- 提高数据库的吞吐量:由于连接池可以有效地管理和重用连接,减少了连接的创建和销毁开销,从而提高了数据库的吞吐量。
总之,使用数据库连接池可以优化数据库访问的性能、提高应用程序的可靠性与可用性,并减轻数据库负担,是一种常用的数据库连接管理技术。
数据库连接池的运行机制
(1) 程序初始化时创建连接池
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源
配置Tomcat的conf/context.xml
在Context节点之间加入
<Resource name="jdbc/sys" ///名称 auth="Container" ///容器 type="javax.sql.Datasource" ///类型 maxActive="100" ///最大连接数 maxIdle="30" ///最大空闲连接数 maxwait="10000" ///最大的等待时间 username="root" ///sql账号 password="123456" ///密码 driverClassName="com.mysql.cj.jdbc.Driver" ///加载 url="jdbc:mysql://localhost:3306/" ///数据库路径 />
使用JNDI获取连接对象
*BaseDao* public boolean getConnextion(){ try{ //初始化上下文 Context cxt=new InitialContext();//连接池的上下文对象 //获取与逻辑相关的数据源对象 Object obj=context.lookup("java:comp/env/jdbc/news"); DataSource ds=(DataSource)obj;//向下转型为数据源对象 conn=ds.getConnection(); return true; }catch(NamingException e){ e.printStackTrace(); return false; }catch(SQLExeption e){ e.printStackTrace(); return false; } }