项目经验——jboss 配置数据库连接池

数据库的连接和关闭是非常消耗系统资源的,在多层结构的应用环境中,这种资源消耗又直接的反映到系统性能上来。在项目实际应用中,最常用的解决方案便是建立数据库连接池。

一、数据库连接池基本原理

当程序启动时,系统主动建立出足够的数据库连接,并将这些连接组成一个连接池。每次应用程序请求数据库连接时,无需重新建立,直接从链接池中获取已建立连接。使用完毕后,无需关闭,直接归还给数据库连接池,以备其他程序调用。通过连接池,大大提高了程序运行效率。

二 、数据库连接池常用参数

连接池初始连接数

连接池最大连接数

连接池最小连接数

连接池每次增加的容量

三、使用jboss管理数据库连接池

以ITOO为例,配置mysql数据库连接池:

首先加入mysql-driver 的jar包到jboss lib目录下,在JBoss的standalone.xml配置文件<datasources></datasources>节点中配置数据源,如下:

[html] view plain copy print?

  1. <!--数据源的JNDI名-->
  2. <datasource jta="true" jndi-name="java:jboss/datasources/CloudMysqlDS" pool-name="CloudMysqlDS" enabled="true" use-java-context="true">
  3. <!--连接数据库的URL-->
  4. <connection-url>jdbc:mysql://192.168.22.246:3306/itoo_cloudroot?useUnicode=true&characterEncoding=UTF-8</connection-url>
  5. <driver>mysql</driver>
  6. <pool>
  7. <prefill>false</prefill>
  8. <use-strict-min>false</use-strict-min>
  9. <flush-strategy>FailingConnectionOnly</flush-strategy>
  10. </pool>
  11. <!--连接数据库的用户名和密码-->
  12. <security>
  13. <user-name>root</user-name>
  14. <password>root</password>
  15. </security>
  16. </datasource>
  <!--数据源的JNDI名-->
                <datasource jta="true" jndi-name="java:jboss/datasources/CloudMysqlDS" pool-name="CloudMysqlDS" enabled="true" use-java-context="true">
                     <!--连接数据库的URL-->
                    <connection-url>jdbc:mysql://192.168.22.246:3306/itoo_cloudroot?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>root</password>
                    </security>
                </datasource>

通过程序首次创建数据库连接:

[java] view plain copy print?

  1. public Connection getConnection{
  2. Connection conn=null;
  3. PreparedStatement pstmt=null;
  4. try{
  5. Context ctx=new InitialContext();
  6. //通过JNDI查找DataSource
  7. //JBoss中,实际JNDI的名字必须在配置的JNDI-name前加上java:/前缀
  8. DataSource ds=(DataSource)ctx.lookup("java:jboss/datasources/PjMysqlDS");
  9. //获取数据库连接
  10. conn=ds.getConnection();
  11. }catch(Exception e){
  12. e.printStackTrace();
  13. }
  14. return conn;
  15. }
public Connection getConnection{
		Connection conn=null;
		PreparedStatement pstmt=null;
	    try{
			Context ctx=new InitialContext();
			//通过JNDI查找DataSource
                        //JBoss中,实际JNDI的名字必须在配置的JNDI-name前加上java:/前缀
			DataSource ds=(DataSource)ctx.lookup("java:jboss/datasources/PjMysqlDS");
                        //获取数据库连接
			conn=ds.getConnection();
	    }catch(Exception e){
	    	e.printStackTrace();
	    }
	    return conn;
	}

四、Bonus之JNDI

在配置数据库连接池中我们看到了一个熟悉的名字:JNDI【java naming directory interface】,J2EE13规范之一.。

JNDI主要包含了一些标准API,通过这些API来访问目录,通过目录,获取目录所指的对象。就是将名字和计算机系统内的一个对象建立关联,从而允许应用程序通过改名字来访问该对象。JNDI就起到这么一个作用。

五、JNDI项目运用:

通过JNDI来访问对象一般步骤:

1、创建Context对象

2、调用lookup方法根据JNDI名查找对象

3、关闭Context对象

由于Context只是一个接口,一般通过它的实现类InitialContext来创建实例。

如上通过jboss配置数据库连接池,在程序建立数据库连接时,首先通过InitialContext类创建Context对象,再调用对象的lookup方法,通过JNDI名字获取数据库连接对象,最后创建连接。

在ITOO项目中EJB远程调用通过bean.lookupRemoteBean方法,通过url地址,远程访问bean方法,通过代码追踪不难发现,lookupRemoteBean同样也通过JNDI使用路径查找对象,不过加入的不是java:/前缀,而是ejb:/异曲同工。

[java] view plain copy print?

  1. /**
  2. * 查找远程ejb公共方法
  3. *
  4. * @version 1.0.0 , 2015年2月9日 下午2:55:14
  5. * @param ejbaddress:ejb地址,ear包名+core包名+实现名+接口名
  6. *                   例如:itoo-basic-ear/itoo-basic-core-0.0.1-SNAPSHOT/StudentBeanImpl!com.tgb.itoo.basic.service.StudentBean
  7. * @return
  8. * @throws NamingException
  9. */
  10. public Object lookupRemoteBean(String ejbaddress) throws NamingException {
  11. final Hashtable jndiProperties = new Hashtable();
  12. jndiProperties.put(Context.URL_PKG_PREFIXES,
  13. "org.jboss.ejb.client.naming");
  14. final Context context = new InitialContext(jndiProperties);
  15. return context.lookup("ejb:" + ejbaddress);
  16. }
/**
     * 查找远程ejb公共方法
     *
     * @version 1.0.0 , 2015年2月9日 下午2:55:14
     * @param ejbaddress:ejb地址,ear包名+core包名+实现名+接口名
     *                   例如:itoo-basic-ear/itoo-basic-core-0.0.1-SNAPSHOT/StudentBeanImpl!com.tgb.itoo.basic.service.StudentBean
     * @return
     * @throws NamingException
     */
    public Object lookupRemoteBean(String ejbaddress) throws NamingException {
        final Hashtable jndiProperties = new Hashtable();
        jndiProperties.put(Context.URL_PKG_PREFIXES,
                "org.jboss.ejb.client.naming");
        final Context context = new InitialContext(jndiProperties);
        return context.lookup("ejb:" + ejbaddress);
    }  

通过jboss配置数据库连接池,一小段代码,不但了解了连接池的配置,同时也熟悉了J2EE13规范之一的JNDI的使用。处处是代码,无处不编程,不是技术少,代码枯燥,少的是发现的眼睛和钻研的决心。

时间: 2024-07-29 20:23:02

项目经验——jboss 配置数据库连接池的相关文章

项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

作者:泥沙砖瓦浆木匠 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 如果我的帮到了你,是否乐意捐助一下或请一杯啤酒也好呢?有你支持,干的更好~ 点这参与众筹 我的支付宝:13958686678 一. 前言 泥瓦匠又和大家见面了,最近两天我在Code Review ,顺便代码小小的Refactoring(重构)下.先了解这个项目吧,这次解决的是数据源配置优化.因为这web项目中配置数据源的地方很多.例如JDBC要配置数据源,Mybatis要配置数据源,Quartz定时任务要配

springboot配置数据库连接池druid、整合mybatis、整合pagehelper

springboot配置数据库连接池druid druid所需pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>o

Tomcat配置数据库连接池

上篇博文中记录了使用数据库连接池的重要性和如何用java代码自己写一个连接池,网上查了一番 发现原来像tomcat这种服务器自带了连接池,可以通过配置文件直接使用,下面来介绍一下使用方法. 本例为myeclipse+tomcat7.0+sqlserver2008配置数据库连接池 具体步骤: 1. 在server.xml中设置数据源,以sql server 2008数据库为例,如下: 在<GlobalNamingResources> </GlobalNamingResources>节

配置数据库连接池的技巧

对于对性能要求较高的企业级应用来说用JDBC连接数据库的方式一般满足不了要求,这时就要用到数据库连接池了.对于连接池应该并不陌生吧,你可以学习JAVA基础教程了解. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 配置数据库连接池的两种方法 Tomcat服务器配置步骤: 1.把下面这段代码粘贴D:\apa

JBoss配置连接池

什么是数据库连接池? 配置连接池为的是解决效率问题.因为每创建一个连接都是很耗时的,有了连接池,就可以提前放一些连接进去.以后我们再用连接就去连接池里面取而不是每次都创建.但是我们知道连接池是有上限的,如果只允许我们放10个,那么当这10个连接都被占用的时候,下一个用户再来请求连接将不能得到,只好等待,如果等的时间太长了就会抛出timeout的异常.使用完连接后要释放,否则会一直占着资源,当连接全部被占用而得不到释放时,就会出现错误... JBoss实现了J2EE的13个规范包括JNDI,JND

一次项目实践中DBCP数据库连接池性能优化

关于数据库连接池DBCP的关注源于刚刚结束的一轮测试,测试内容是衡量某Webserver服务创建用户接口的性能.这是一款典型的tomcat应用,使用的测试工具是Grinder.DBCP作为tomcat服务器常用的数据库连接池,其性能表现直接关乎应用的性能. 1.遇到的问题 当并发量增加到100时,该接口出现瓶颈,此时TPS接近400,如下图.但是服务端CPU和内存等资源并未达到瓶颈,服务器CPU使用率仅为30%,内存使用率为40%.监控到的javaMethod慢方法为incrAppAccount

Spring配置-数据库连接池proxool[转]

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 数据库连接池在初始化时将创建一定数量的数据库连接放

Spring配置数据库连接池Druid

连接池原理 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象.使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用.而连接的建立.断开都由连接池自身来管理.同时,还可以通过设置连接池的参数来控制连接池中的初始连接数.连接的上下限数以及每个连接的最大使用次数.最大空闲时间等等,也可以通过其自身的管理机制来监视数据库连接的数量.使用情况等. 常用数据库连接池及特

tomcat 7-dhcp配置数据库连接池

原理 关于连接池,大家都晓得用来限定对数据库的连接.基本的原理是预先在缓冲池中放入一定的空闲连接,当程序需要和数据库来交互时,不是直接新建数据库连接而是在连接池中直接取,使用完成后再放回到连接池中.为什么要这样牺牲一个缓冲来存放这些原本就会使用的连接呢?在上面讲了一个好处就是可以限定连接数,这样不会造成N多的数据库连接最后宕机:额外有了这样一个连接池,也可以来监听这些连接和便于管理. 配置 1.拷贝相关的jar 要知道连接池不是用来直接操作数据库的,最终进行相关操作的还是相关的jdbc驱动.如果