JNDI与数据库连接池
在javaweb程序中,最消耗资源的就是与数据库的交互,所以在与数据库交互上有很多方式进行优化
这次说的是通过减少建立连接与销毁连接来优化的连接池。
数据库连接池负责分配、管理和释放连接,让程序重复使用同一个连接,而不是每次都要创建新连接
数据库连接池在初始化时创建一定数量的数据库连接放到连接池中, 这个数量是设定的最小连接数,连接池都将一直保证至少拥有这么多的连接
当程序向连接池请求的连接数超过设置的最大连接数量时,这些请求将被加入到等待队列中.
下列是tomcat的数据源配置,通过JNDI去连接数据源
在tomcat目录中conf/context.xml,我的数据库是mysql8
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resource name="jdbc/zhangshuo" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="root" password="123456" driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/zhangshuo?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"
/>
</Context>
name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一个jdbc的关于oracle的命名服务。
auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
type:此名称所代表的类型,现在为javax.sql.DataSource
maxActive:表示一个数据库在此服务器上所能打开的最大连接数
maxIdle:表示一个数据库在此服务器上维持的最小连接数
maxWait:最大等待时间。10000毫秒
username:数据库连接的用户名
password:数据库连接的密码
driverClassName:数据库连接的驱动程序
url:数据库连接的地址
在项目的web.xml中连接数据源
<web-app>
<resource-ref>
<description>news DataSource</description>
<res-ref-name>jdbc/zhangshuo</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
完成以上步骤就可以编写代码了
以前需要实例化的连接对象现在可以用数据源实例化
Context context=new InitialContext();
DateSource ds=()context.lookup("java:comp/env/jdbc/zhangshuo");
Connection con=ds,getConnection();
在连接后就不用关闭连接了,交给连接池管理
本文地址:https://blog.csdn.net/DT_Zhangshuo/article/details/85951340