标签:
什么是数据库连接池?
配置连接池为的是解决效率问题.因为每创建一个连接都是很耗时的,有了连接池,就可以提前放一些连接进去.以后我们再用连接就去连接池里面取而不是每次都创建.但是我们知道连接池是有上限的,如果只允许我们放10个,那么当这10个连接都被占用的时候,下一个用户再来请求连接将不能得到,只好等待,如果等的时间太长了就会抛出timeout的异常.使用完连接后要释放,否则会一直占着资源,当连接全部被占用而得不到释放时,就会出现错误...
JBoss实现了J2EE的13个规范包括JNDI,JNDI采用树形结构管理我们的对象,tomcat和JBoss等服务器对JNDI做了实现,实现它之后可以管理对象.
采用JNDI可以使我们的应用和实际实现解耦,如,我们的应用中只管从连接池中取连接,而不用管使用的是哪个连接池实现,连接池的实现对我们是透明的.也就是说,我们使用连接池时,根本没有写dbcp(dbcp实现了DataSource接口),我们也不知道它是dbcp.我们只管使用连接不需要考虑连接是如何被创建的.对于我们来说这就像是一个工厂,隐藏了创建的细节.所以,这就是面向接口编程.我们拿到DataSource接口就OK了.
下面我们看看数据源是如何在JBoss注册的,我们又是如何从连接池取连接的?
在JBoss的standalone.xml配置文件<datasources></datasources>节点中配置数据源,代码如下:
<datasource jta="true" jndi-name="java:jboss/datasources/PjMysqlDS" pool-name="PjMysqlDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://192.168.24.118:3306/itoo_assess?useUnicode=true&characterEncoding=UTF-8</connection-url> <driver>mysql</driver> <pool> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> </pool> <security> <user-name>root</user-name> <password>888888</password> </security> </datasource>
public Connection getConnection{ Connection conn=null; PreparedStatement pstmt=null; try{ Context ctx=new InitialContext(); //通过JNDI查找DataSource DataSource ds=(DataSource)ctx.lookup("java:jboss/datasources/PjMysqlDS"); conn=ds.getConnection(); }catch(Exception e){ e.printStackTrace(); } return conn; }
JNDI还有一个典型的应用,即分布式对象的访问.如EJB. 把对象注册到这棵树上,起个名,远程lookup这个服务,只要知道这个服务所处机器的IP和端口号,就可以将这个服务传到客户端的本地.
知识都是连通的,当我们能够熟练地从一个跳到另一个就说明我们会学了.
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zhuanzhe117/article/details/46700975