DataSourse、JNDI和连接池
1 DataSourse(数据源)
定义:
1、包含了连接数据库所需的信息,可以通过数据源获得数据库连接,有时由于某些连接数据库的信息会变更,所以经常使用包含数据库连接信息的数据源。
2、一个标准的数据库连接工厂,作为DriverManager的替代项,保存与数据库相关的信息,可以将数据库的连接信息放在一个共享的空间进行提取,不用在本地安装。支持JNDI的绑定,支持连接池,支持分布式服务,用getConnection方法可获得与数据库的连接。数据源应该由管理员创建(目的是为了保证数据库的安全)。所以数据源对象一般放在JNDI服务器中。
通过JNDI获得绑定的资源
public static Object lookup(String context) throws NamingException {Properties pro = new Properties();// Weblogic的JNDI服务器参数pro.put(InitialContext.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");pro.put(InitialContext.PROVIDER_URL, "t3://localhost:7001");Context ctx = new InitialContext(pro);return ctx.lookup(context);// 通过指定的字符串获得先前绑定的资源。}
?
2 JNDI(命名目录服务器)
定义:是Java的命名目录服务器。而JDBC是Java的数据库访问接口。
跟JDBC是平级的关系,是两个独立的JNDI;JDBC存储的数据都是以二维表的接口来大规模存储数据。而JNDI存储的是差异性比较大的Java对象。JDBC取数据时用Sql语言访问数据。JDBC API依赖于驱动程序,而JNDI依赖于服务提供者。JDBC一般把数据存储到关系型数据库,而JNDI一般把数据存储到小型数据库、文件、甚至是注册表中。JNDI相当于一个电话本。允许程序将一个对象和一个命名绑定到目录树上。
(JNDI的方法是在javax.naming包下,接口是Context,实现类是InitialContext)
?
bind(String name, Object obj) 将名称绑定到对象资源,建立指定的字符串和对象资源的关联
lookup(String name) ,通过指定的字符串获得先前绑定的资源
以下是将资源和JNDI命名绑定的方法
?
public static void bind(String context, Object obj) throws NamingException {Properties pro = new Properties();// Weblogic的JNDI服务器参数pro.put(InitialContext.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");pro.put(InitialContext.PROVIDER_URL, "t3://localhost:7001");Context ctx = new InitialContext(pro);ctx.bind(context, obj);// 建立指定的字符串和对象资源的关联}
?3 连接池
在内存中用来保存一个个数据库连接的对象。
访问数据库时,建立连接和拆连接需要花费较长时间,通过以连接池直连的方式获取连接,不需要注册驱动程序,可以大量的节省销毁和创建连接的资源消耗提高访问数据库的效率。
注:通过连接池获得的Connection,当执行con.close()时,不是关闭连接,而是表示将连接释放回连接池。连接池是一个很复杂的软件,所以是由服务器厂商实现。