Tomcat数据库连接池的配置方法总结
数据库🐸连接是一种关键的有【jiàn de yǒu】限的昂贵的资源【yuán】,这在多用户网【yòng hù wǎng】🌍页应用【yè yīng yòng】🛀程序中体现的✌尤为突【yóu wéi tū】🎭出【chū】.对数据📘库连接的管理能显著影响到🎟整个应用程序【yòng chéng xù】的伸缩👥性和健壮性【zhuàng xìng】,影响到🎟程序的【chéng xù de】性能指【xìng néng zhǐ】标【biāo】📨,数据库🐸连接池🦔正是针对这个问题提💦出【chū】的.
数据库【shù jù kù】⬜连接【lián jiē】🏥池负责分💔配【pèi】,管理和【guǎn lǐ hé】🧦释放数🏛据库连🔰接🏥,它允许应用程序重复使用一个👊现有的数据【de shù jù】库⬜连接【lián jiē】🏥,而不是【ér bú shì】再重新建立一【jiàn lì yī】个👊;释放空【shì fàng kōng】闲时间🍗超过最🚫大空闲【dà kōng xián】时间🍗的数据【de shù jù】库⬜连接【lián jiē】🏥来避免【lái bì miǎn】因为没有释放数🏛据库连🔰接🏥而引起的数据【de shù jù】库⬜连接【lián jiē】🏥遗漏,这样可🥒以明显【yǐ míng xiǎn】提高对【tí gāo duì】数据库【shù jù kù】⬜操作的【cāo zuò de】性能✴.
数【shù】据库连【jù kù lián】🏏接池在初始化【chū shǐ huà】的时将创建一【chuàng jiàn yī】定数【shù】🏩量的数【shù】据库连【jù kù lián】🏏接放到【jiē fàng dào】连接池🍮中【zhōng】,这些数【shù】据库连【jù kù lián】🏏接的数【shù】♋量是又【liàng shì yòu】最小数【shù】据库连【jù kù lián】🏏接数【shù】🚔来设定【lái shè dìng】的,无论这些数【shù】据库连【jù kù lián】🏏接是否被🍴使用,连接池🍮都将一🛃直保证至少拥🏡有这么【yǒu zhè me】多的连【duō de lián】接数【shù】🛅,当应用😿程序向😧连接池🍮请求的【qǐng qiú de】连接数【lián jiē shù】🛅超过最🐎大连接数【lián jiē shù】🛅量时,这些请【zhè xiē qǐng】求将被【qiú jiāng bèi】🕎加入到等待队列中【liè zhōng】📗.
数据库🛃连接池【lián jiē chí】的最小🐌连接数👎和最大【hé zuì dà】连接数👎的设置要考虑【yào kǎo lǜ】到下列【dào xià liè】几个因素:
1.最小连接数是🤝连接池【lián jiē chí】一直保🕝持的数据库【shù jù kù】连接,所以如【suǒ yǐ rú】🥍果应用【guǒ yīng yòng】程序对♉数据库【shù jù kù】连接的【lián jiē de】🦖使用量不大,将会有🚟大量的数据库【shù jù kù】连接资源被浪【yuán bèi làng】费.
2.最大连🏢接数是【jiē shù shì】🔞连接池申请的【shēn qǐng de】最大连🏢接数【jiē shù】📱,如果数【shù】🚬据库连【jù kù lián】🌘接请求超过次【chāo guò cì】😧数【shù】🚬,后面的数【shù】🚬据库连【jù kù lián】🌘接请求将被加入到等待对了中🦗,这回影【zhè huí yǐng】响之后的数【shù】🚬据库操作
如果最【rú guǒ zuì】小连接【xiǎo lián jiē】🏺数与最📸大连接【lián jiē】🐅数相差【shù xiàng chà】太大🤢,那么最🚳先的连接【lián jiē】🏺请求将【qǐng qiú jiāng】会获利【huì huò lì】,之后超过最小连接【xiǎo lián jiē】🏺数量的【shù liàng de】连🗿接【jiē】请求等价于建立一个新的🍗数据库连接【lián jiē】🏺,不过📘,这些小【zhè xiē xiǎo】于最小【yú zuì xiǎo】连接【lián jiē】🏺数的数据👻库连接【lián jiē】🏺在使用🗯完不会【wán bú huì】⤴马上被🎚释放,它将被放到连【fàng dào lián】接【jiē】🏺池中等待重复使用或是空闲超时被释放.
实例使用的Tomcat版本为6.0
方法一: 在Tomcat的【de】conf/context.xml中配置【pèi zhì】🎀
在Tomcat\apache-tomcat-6.0.33\conf目录下【xià】🔢的【de】context.xml文件中配置【pèi zhì】🎀默认值如【rú】🤭下【xià】🔢:
<?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> </Context>
配置连【pèi zhì lián】🤭接池:
<?xml version='1.0' encoding='utf-8'?>
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!--配置🚉oracle数据库【shù jù kù】的【de】连接池【lián jiē chí】🚃--> <Resource name="jdbc/oracleds" author="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="scott" password="tiger" driverClassName="oracle.jdbc.dirver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" /> <!--配置🚉mysql数据库【shù jù kù】的【de】连接池【lián jiē chí】🚃, 需要做【xū yào zuò】的【de】额外🍴步骤🛺是将【shì jiāng】🕣mysql的【de】Java驱动类放到😢tomcat的【de】lib目🙄录下【lù xià】 maxIdle 连接池【lián jiē chí】🚃中最多可空闲maxIdle个连接 minIdle 连接池【lián jiē chí】🚃中最少🛣空闲maxIdle个连接 initialSize 初始化连接数【lián jiē shù】目🙄 maxWait 连接池【lián jiē chí】🚃中连接【zhōng lián jiē】用完时,新的【de】请求等待🚾时间🤫,毫秒 username 数据库【shù jù kù】用户名🗿 password 数据库【shù jù kù】密码 --> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </Context>
配置🚉好后需【hǎo hòu xū】要【yào】🤣注意的【de】两个步【liǎng gè bù】骤🛺
1.将对应【jiāng duì yīng】🍊数据库的【de】🏆驱动类放到🛵tomcat的【de】🏆lib目录西安【ān】
2.重新启【chóng xīn qǐ】🙋动tomcat服务器,让配置生效【shēng xiào】😚
在【zài】🏣web应用程序的web.xml中设置数据源【shù jù yuán】参考💓,如下【rú xià】🛺:
在【zài】🏻<web-app></web-app>节点中🔧加入下【jiā rù xià】面内容
<resource-ref>
<description>mysql数据库🍝连接池</description> <!-- 参考数据源名【jù yuán míng】字,同【tóng】💆Tomcat中配置💙的⛸Resource节点中⛔name属性值【shǔ xìng zhí】"jdbc/mysqlds"一致 --> <res-ref-name>jdbc/mysqlds</res-ref-name> <!-- 资源类【zī yuán lèi】型 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
错误解决【jué】:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) at javax.naming.InitialContext.lookup(InitialContext.java:392) at com.iblog.util.DBPoolUtil.<clinit>(DBPoolUtil.java:34)
解决方😯案【àn】:
上面的【shàng miàn de】⌛异常信息是配置文件中【zhōng】JNDI没有初【méi yǒu chū】🥨始化造🍻成的
如果下面的问题都不存在
1.要去检【yào qù jiǎn】查下配置文件🍋中【zhōng】连接🙁数据库的URL参数是【cān shù shì】🈵否正确⛷2.以及是【yǐ jí shì】🧠否导入【fǒu dǎo rù】了正常的包3.检查在📲Tomcat中【zhōng】conf/server.xml文件,检查是【jiǎn chá shì】否设置useNaming="false",如果是,去掉
2.那就是【nà jiù shì】通过main方法测试的💽,这个数据源不【jù yuán bú】支持这⏺样的测试方法🎧,程序要运行在Tomcat中才能找到相【zhǎo dào xiàng】🌄应的数【yīng de shù】🧟据源【jù yuán】.[我在测试时犯【shì shí fàn】这样的👀错导致【cuò dǎo zhì】上面错👴误出现]
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*" %> <%@ page import="javax.naming.*" %> <%@ page import="javax.sql.DataSource" %> <html> <head> <title>Tomcat6.0 JNDI!</title> </head> <body> Tomcat连接池【lián jiē chí】测试,获取数据源 <br> <% try { //初始化查找命名空间【míng kōng jiān】 Context ctx = new InitialContext(); //参数【cān shù】🚬java:/comp/env为固定【wéi gù dìng】路径🌩 Context envContext = (Context)ctx.lookup("java:/comp/env"); //参数【cān shù】🚬jdbc/mysqlds为数据源和⛲JNDI绑定的名字 DataSource ds = (DataSource)envContext.lookup("jdbc/mysqlds"); Connection conn = ds.getConnection(); conn.close(); out.println("<span style='color:red;'>JNDI测试成【cè shì chéng】🏳功【gōng】<span>"); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } %> </body> </html>
运行效🚋果✖:
方法二⬛:在【zài】Tomcat的【de】conf/server.xml中配置💗
打开tomcat的⚽conf/server.xml文件🔍,找到<GlobalNamingResources></GlobalNamingResources>节点【jiē diǎn】,默认的【mò rèn de】⚽内容如【nèi róng rú】🚑下
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources>
在该节【zài gāi jiē】点中加入相关的池配置信息【zhì xìn xī】🥔,如下🕢
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> <!--配置【pèi zhì】💙mysql数据库【shù jù kù】👬的【de】连接🔠池【chí】, 需要做的【de】额外步骤是将mysql的【de】Java驱动类放到🐭tomcat的【de】lib目录下 --> <Reso
关键词:Tomcat,数据库【shù jù kù】👬
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 0
- 0
- 0
- 0
- 0