数据库连接池有哪些属性,2简述Struts中连接池的使用 详解 谢谢
来源:整理 编辑:黑码技术 2024-06-20 06:37:41
本文目录一览
1,2简述Struts中连接池的使用 详解 谢谢
Struts 1.1 struts-config.xml其它N多Driver , 初始化信息,用户名和密码相关配置!使用jsp页 为例DataSource ds = (DataSource)application.getAttribute("mysqlDs");Struts 数据源〔链接池〕:在设置只后会自动成为ServletContext一个属性.必须在Servlet API中通过ServletContext来访问.这也是它的严重缺陷.相比容器通过JNDI管理数据源它是鸡肋.实际用处不大!没事,可以拿来玩一下........struts2跟连接池不搭架,连接池数服务在数据层的,配置连接池很简单,现在流行的连接池有dbcp c3p0等,这个配置起来都很简单,一般是通过xml解析的,可以单独吧配置信息放在一个xml文件中。 ===============================兄弟,你要跟数据库打交道了,你用jsp+struts,肯定要用到jdbc了,这是数据层的,说了跟struts2和jsp不搭架的啦
2,什么是C3PO连接池
使用c3po连接池程序使用c3po连接池程序hibernate.c3p0.min_size 3hibernate.c3p0.max_size 15hibernate.c3p0.timeout 5000 获取连接的等待时间hibernate.c3p0.max_statements 100hibernate.c3p0.idle_test_period 3000 每隔3000s测试连接是否可以正常使用hibernate.c3p0.acquire_increment 2hibernate.c3p0.validate false 每次连接验证连接是否可用使用c3p0连接池设置,你将就有数据库异常状态恢复功能,但哪并不以为着你将再也不用看到一个异常了。一个数据库会话中的失效的连接将被中断,如:假如要取出一个已经被取出的连接,或者假如他们在从池中取出时连接测试不正常,那么这个连接将被中断,并且你将在抛出的异常中看到被中断的连接。使用c3p0 使获得一个无效的连接的可能性非常小。避免获得无效连接最有效的方法是设置hibernate.c3p0.validate属性为true(在hibernate应用中所以那些使用c3p0的应用将使用c3p0-native属性c3p0.testconnectiononcheckout)。假如你设置hibernate.c3p0.validate属性为true,c3p0在获得连接时优先测试连接,在数据库重启后你的应用决不会获得一个无效的连接,除非在数据库关闭时你已经获得有连接。有一个减少可靠性,提示性能的方法,但啦有能付出巨大代价,方法是设置c3p0.testconnectionsoncheckin和hibernate.c3p0.idle_test_period(c3p0-native c3p0.idleconnectiontestperiod)为一个较小的值,在这种方案中所有连接测试是异步的,你必须保证那些在你设置的idle_test_period的时间段类没有能够被测试的连接不能被取出。因此,假如在一个非常短的时间内连接被取出,那么你从连接池中获得的连接不一定是有效的。还有一个方案,我推荐设置 c3p0属性文件中的缺省连接测试为"c3p0.preferredtestquery" 或 "c3p0.automatictesttable",但它通常比较慢
3,如何实现连接池
package menu.menu;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class Resut String sDBDriver; String sConnStr; String user; String pass; Connection conn; ResultSet rs; String DriverClasses; String dburl; String users; String password; // static String urlpath=tongcan.root; public Resut() throws IOException File file = new File("/workspace4/WebRoot/WEB-INF/Myproj.properties"); //这个是获取数据库配置文件里面的信息 FileInputStream fin = new FileInputStream(file); Properties pro = new Properties(); pro.load(fin); DriverClasses = pro.getProperty("DriverClasses"); dburl = pro.getProperty("dburl"); users = pro.getProperty("user"); password = pro.getProperty("password"); sDBDriver = DriverClasses; sConnStr = dburl; user = users; pass = password; conn = null; rs = null; try Class.forName(sDBDriver); fin.close(); } catch (ClassNotFoundException classnotfoundexception) System.err.println("rs(): " + classnotfoundexception.getMessage()); fin.close(); } }public ResultSet executeQuery(String s) rs = null; try conn = DriverManager.getConnection(sConnStr, user, pass); Statement statement = conn.createStatement(1004, 1008); rs = statement.executeQuery(s); } catch (SQLException sqlexception) System.err.println("rs.executeQuery: " + sqlexception.getMessage() + "sConnStr=" + sConnStr); } return rs; }}这个是Myproj.properties 里面的配置内容DriverClasses = com.microsoft.jdbc.sqlserver.SQLServerDriverdburl = jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=数据库名称user = sapassword = 1连接数据库 常用的有两种。1.数据源 ODBC控制面板->管理工具->odbc数据源管理器->用户DNS选项卡->添加2.JDBC 连接字串(举例:MSSQL驱动JTDS)dbURL = "jdbc:jtds:sqlserver://172.16.X.X:1433/databaseName"; con = DriverManager.getConnection(dbURL, userName, userPwd); //userName,userPwd 为数据库所允许的登录用户要实现连接池,一般要首先在web服务器上配置一个数据源dataSource,这个数据源中对数据库连接池连接的数据库、数据库连接驱动、连接池中最大的连接数、开始默认的连接数等各项进行设置,这样配置好以后我们就可以在项目中通过此数据源的名字进行调用。在项目中调用连接池时,要让我们的项目跟数据源进行关联,就要在web.xml中对数据源进行注册,然后在我们的代码中就可以调用了,在调用时基于JNDI(java命名服务)来获取数据源,也就是通过查找我们配置的数据源名称找到我们配置好的数据源,数据源就能为我们提供它所表示的物理数据源的连接。连接池的作用就是预先和数据库建立好若干的连接并存储在连接池中,在使用的时候程序直接调用这些连接池中的连接而不是和数据库在发生连接建立的过程。在一个程序中建立和销毁连接是很耗费资源的一件事情,所以连接池最主要的作用就是为了提高程序的运行效率。根据上面的说法我们可以得出连接池实现的方法:1.必须有一个容器来存储一些已有的连接,这样我们最容易想到的就是数组或者一些JAVA容器。2.连接池的特性是取出或者放回去一个连接,所以最符合这种特性的容器应该是栈特性,所以我们一般使用LinkedList来当做连接池的容器。3.连接池中间应该有一些预先建立好的连接来供程序使用,所以我们在初始化我们自己的连接池的时候应该有一个属性来设置我们连接池中的初始的链接数量。4.既然连接池是用来建立连接的,所以在我们的程序使用完成连接以后就不能直接关闭连接而应该将使用完毕的连接放回连接池中间。这样来说的话:我们的一个连接池必须有如下的几个特点:1.必须有一个合适的方便存取的容器来放置很多的连接。2.连接池必须提供弹出连接和取回连接的方法。3.真实的数据库连接应该是连接池实现的而不是程序。这样实现的程序我们就可以称之为一个最简单的连接池。其他优化:很简单了,比如说连接池的最小连接数,最大连接数,还有连接保持的最大时间,如果连接不够用的时候新建连接的数量,如何更好的维护这些连接等等。以上就是连接池的实现原理了,不知道你懂了没有。
文章TAG:
数据 数据库 数据库连接 数据库连接池 数据库连接池有哪些属性 详解 谢谢