`
qqdwll
  • 浏览: 131604 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DataSource概念及简单的一些配置实例

阅读更多
首先, 让我们先了解下DriverManager.
管理一组 JDBC 驱动程序的基本服务。
注:DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。

作为初始化的一部分,DriverManager 类会尝试加载在 "jdbc.drivers" 系统属性中引用的驱动程序类。这允许用户定制由他们的应用程序使用的 JDBC Driver。例如,在 ~/.hotjava/properties 文件中,用户可以指定:

jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件需要包含下面的条目:

my.sql.Driver
应用程序不再需要使用 Class.forName() 显式地加载 JDBC 驱动程序。当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将在不作修改的情况下继续工作。

在调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。

从 Java 2 SDK 标准版本 1.3 版开始,只有当已授予适当权限时设置日志流。通常这将使用工具 PolicyTool 完成,该工具可用于授予 permission java.sql.SQLPermission "setLog" 权限。


再来了解下DataSource
该工厂用于提供到此 DataSource 对象所表示的物理数据源的连接。作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。实现 DataSource 接口的对象通常在基于 JavaTM Naming and Directory Interface (JNDI) API 的命名服务中注册。

DataSource 接口由驱动程序供应商实现。共有三种类型的实现:

基本实现 - 生成标准的 Connection 对象
连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。
分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。
DataSource 对象的属性在必要时可以修改。例如,如果将数据源移动到另一个服务器,则可更改与服务器相关的属性。其优点在于,由于可以更改数据源的属性,所以任何访问该数据源的代码都无需更改。

通过 DataSource 对象访问的驱动程序本身不会向 DriverManager 注册。通过查找操作获取 DataSource 对象,然后使用该对象创建 Connection 对象。使用基本的实现,通过 DataSource 对象获取的连接与通过 DriverManager 设施获取的连接相同。


看看下面的一些简单配置:
1. 在Jboss 下面。 其实可以可以参考 $JBOSS/docs/examples/jca/ **-ds.xml

2. 在Tomcat下 : (从网上找来的, 但看得很清楚。 我怕以后忘记, 就转载了。 原文作者是: http://www.iteye.com/topic/245596. 如果作者不想转载的话, 可以给我留言我删除。)
1.把DataSource设置到我们的WEB项目中,下面详细的介绍下:
第一步:在我们的WEB项目中的META-INF文件夹下建立一个context.xml
Xml代码
<?xml version='1.0' encoding='utf-8'?> 
 
<Context> 
 
    <Resource name="jdbc/mysql"     
       auth="Container"     
       type="javax.sql.DataSource"     
       driverClassName="com.mysql.jdbc.Driver"     
       url="jdbc:mysql://localhost/bbs"     
       username="root"     
       password="root"     
       maxActive="50"     
       maxIdle="20"     
       maxWait="10000" />     
 
</Context> 

<?xml version='1.0' encoding='utf-8'?>

<Context>

    <Resource name="jdbc/mysql"  
       auth="Container"  
       type="javax.sql.DataSource"  
       driverClassName="com.mysql.jdbc.Driver"  
       url="jdbc:mysql://localhost/bbs"  
       username="root"  
       password="root"  
       maxActive="50"  
       maxIdle="20"  
       maxWait="10000" />  

</Context>

第二步:在我们的WEB项目下的WEB-INF文件夹下建立一个web.xml(如果存在了就不用了,直接修改就行了)
(这几天测试了一下,不做这步也可以,O(∩_∩)O哈哈~省事了)
Xml代码
<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/mysql</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/mysql</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

第三步:我们就可以用代码来获取Connection对象了
Java代码
package xushun.util;  
 
import java.sql.*;  
import javax.sql.*;  
import javax.naming.*;  
 
public class DBHelper {  
      
    public static Connection getConnection() throws SQLException,NamingException  
    {  
        // 初始化查找命名空间  
        Context initContext = new InitialContext();  
        Context envContext = (Context)initContext.lookup("java:/comp/env");  
        // 找到DataSource  
        DataSource ds = (DataSource)envContext.lookup("jdbc/mysql");  
        return ds.getConnection();  
    }  


package xushun.util;

import java.sql.*;
import javax.sql.*;
import javax.naming.*;

public class DBHelper {
   
    public static Connection getConnection() throws SQLException,NamingException
    {
        // 初始化查找命名空间
        Context initContext = new InitialContext();
        Context envContext = (Context)initContext.lookup("java:/comp/env");
        // 找到DataSource
        DataSource ds = (DataSource)envContext.lookup("jdbc/mysql");
        return ds.getConnection();
    }
}

2.把DataSource设置到我们的Tomcat中,下面详细的介绍下(测试用的JAVA代码和上面的一样就不帖出了):
这里我查到的设置方法就有了一点区别了。有的人把DataSource设置在Tomcat的server.xml文件的GlobalNamingResources下面,然后在context.xml中去映射。有的直接就写在context.xml中了
先说下在server.xml添加DataSource
第一步:在Tomcat的conf中的server.xml文件中找到Xml代码
<GlobalNamingResources> 
  <!-- Editable user database that can also be used by  
       UserDatabaseRealm to authenticate users  
  --> 
  <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> 

  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <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>修改为Xml代码
<GlobalNamingResources> 
  <!-- Editable user database that can also be used by  
       UserDatabaseRealm to authenticate users  
  --> 
  <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" /> 
  <Resource name="jdbc/bbs"       
         auth="Container" type="javax.sql.DataSource" 
         driverClassName="com.mysql.jdbc.Driver" 
         maxIdle="20" 
         maxWait="5000" 
         username="root" 
         password="admin" 
         url="jdbc:mysql://localhost:3306/bbs"       
         maxActive="100"   
         removeAbandoned="true" 
         removeAbandonedTimeout="60" 
         logAbandoned="true"/> 
</GlobalNamingResources> 

  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <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" />
    <Resource name="jdbc/bbs"    
          auth="Container" type="javax.sql.DataSource"
          driverClassName="com.mysql.jdbc.Driver"
          maxIdle="20"
          maxWait="5000"
          username="root"
          password="admin"
          url="jdbc:mysql://localhost:3306/bbs"    
          maxActive="100"
          removeAbandoned="true"
          removeAbandonedTimeout="60"
          logAbandoned="true"/>
  </GlobalNamingResources>
第二步:在Tomcat的conf文件夹下的context.xml中加入
Xml代码
<ResourceLink name="jdbc/bbs" global="jdbc/bbs" type="javax.sql.DataSource"/> 

<ResourceLink name="jdbc/bbs" global="jdbc/bbs" type="javax.sql.DataSource"/>
第三步:就是在WEB项目的WEB-INF中的web.xml添加Xml代码
<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/mysql</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/mysql</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

还有就是在Tomcat文档中提到的方法,直接修改context.xml文件了
在Tomcat的conf文件夹下的context.xml中加入Xml代码
<Resource name="jdbc/bbs"       
              auth="Container" type="javax.sql.DataSource" 
              driverClassName="com.mysql.jdbc.Driver" 
              maxIdle="20" 
              maxWait="5000" 
              username="root" 
              password="admin" 
              url="jdbc:mysql://localhost:3306/bbs"       
              maxActive="100"   
              removeAbandoned="true" 
              removeAbandonedTimeout="60" 
              logAbandoned="true"/> 

<Resource name="jdbc/bbs"    
          auth="Container" type="javax.sql.DataSource"
          driverClassName="com.mysql.jdbc.Driver"
          maxIdle="20"
          maxWait="5000"
          username="root"
          password="admin"
          url="jdbc:mysql://localhost:3306/bbs"    
          maxActive="100"
          removeAbandoned="true"
          removeAbandonedTimeout="60"
          logAbandoned="true"/>然后就是在WEB项目的WEB-INF中的web.xml添加Xml代码
<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/mysql</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/mysql</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

就是这些了,如果有什么不太清楚的就留言,一起研究下。等以后我在搜集下资料整理出上面用到的XML文件中各个标签的属性及其代表的意思。有兴趣的也可以自己先查下。:-)

<td>JNDI 查找名称</td>       <td>关联的引用</td>

<td>java:comp/env</td>      <td>应用程序环境条目</td>

<td>java:comp/env/jdbc</td> <td>JDBC 数据源资源管理器连接工厂</td>

<td>java:comp/env/ejb</td>  <td>EJB 引用</td>

<td>java:comp/UserTransaction</td><td>UserTransaction 引用</td>

<td>java:comp/env/mail</td> <td>JavaMail 会话连接工厂</td>

<td>java:comp/env/url</td>  <td>URL 连接工厂</td>

<td>java:comp/env/jms</td>  <td>JMS 连接工厂和目标</td>

<td>java:comp/ORB</td>      <td>应用程序组件之间共享的 ORB 实例</td>


3. 不用容器的话, 可以用Spring配置。 如下面清单1
清单1 (c3p0)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <!-- defined the multi-datasource for funtion test  -->
<bean id="dataSource_test" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="oracle.jdbc.OracleDriver" />
<property name="jdbcUrl"
value="jdbc:oracle:thin:@ip:1521:schema" />
<property name="user" value="user" />
<property name="password" value="password" />
</bean>

<!-- Transaction manager for a single JDBC DataSource -->
  <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource_test" />
</bean>

</beans>

清单2: 代码

BeanFactory facotry = new XMLBeanFactory (new ClassPathResource(spring.xml));
...
分享到:
评论

相关推荐

    Spring MVC 入门实例

    首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...

    Spring的学习笔记

    第五课:IOC(DI)配置及应用 9 一、 什么是IOC、DI 9 二、 编辑xml文件时,没有提示 9 三、 注入类型(Injecting dependencies) 9 (一) setter注入类型Setter Injection 9 (二) 构造方法Constructor Injection 10 四、...

    spring2.5 学习笔记

    第五课:IOC(DI)配置及应用 9 一、 什么是IOC、DI 9 二、 编辑xml文件时,没有提示 9 三、 注入类型(Injecting dependencies) 9 (一) setter注入类型Setter Injection 9 (二) 构造方法Constructor Injection 10 四、...

    spring.doc

    3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3初始化(创建)bean时机 15 Lazy-init初始化bean的时机拓展: 15 3.4 Bean的作用域 16 Scope单例多例作用域拓展: 16 3.4.1 singleton(默认值) 16 3.4.2 prototype...

    java面试宝典

    73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() 和 wait() 有什么区别? 18 75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述...

    Spring 2.0 开发参考手册

    2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 ...

    spring chm文档

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. ...

    Java数据编程指南

    一些Java细节 设计性事务处理 铭记要点 小结 第21章 开发EJB客户机 引言 EJBs的客户机 小结 第22章 开发可扩缩的EJB应用程序 引言 Enterprise JavaBeans的优点 EJB的广阔开放空间...

    Activiti6.0教程例子下载

    以上部分对工作流、BPMN、Activiti的概念做了一个简单的介绍,目的是了解Activiti究竟是什么,能做些什么…及在学习Activiti之前需要了解的知识与技术。其中大部分文字来自Copy网上的各种资料与文档,通过总结而来的...

    Spring中文帮助文档

    2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 ...

    Spring API

    2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 ...

    千方百计笔试题大全

    73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() 和 wait() 有什么区别? 18 75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述...

    jpivot学习总结.doc

    1. jpivot加入其它应用中 解压jpivot.war 文件,在你的应用...在一个 JSP 页面当中,如果要使用 JPivot 标签库,除了要配置相关的配置文件外,我们需要在 JSP 头的位置声明对 JPivot 标签库的引用,引用方法如下: ...

Global site tag (gtag.js) - Google Analytics