JavaWeb配置数据源

xiaoxiao2021-02-28  102

1.数据源和JNDI资源

  由于DataSource对象是由Tomcat提供的,因此不能够在程序中创建一个DataSource对象,而要采用JNDI技术来获得DataSource对象的引用。

  可以简单的把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑定,外部程序可以通过名字来获得某个对象的引用。在javax.naming包中提供了Context接口,该接口提供了将对象和名字绑定,以及通过名字检索对象的方法。

Context接口方法

方 法 描 述 bind(String name,Object obj) 将对象与一个名字绑定 lookup(String name) 返回与指定的名字绑定的对象

  Tomcat把DataSource作为一种可配置的JNDI资源来处理。生成DataSource对象的工厂org.apache.commons.dbcp.BasicDataSourceFactory。

2.配置数据源

  数据源的配置涉及修改server.xml和web.xml文件

  (1)在server.xml中加入<Resource>元素

    <Resource>元素用来定义JNDI Resource。例如:

<Context reloadable="true" >      <Resource           name="jdbc/ DBname "          auth="Container"           type="javax.sql.DataSource"          maxActive="100" maxIdle="30" maxWait="10000"          username="root" password="123"           driverClassName="com.mysql.jdbc.Driver"          url="jdbc:mysql://localhost:3306/ DBname?autoReconnect=true"      />  </Context> 

<Resource>元素的属性说明: 

Name:指定Resource资源的JNDI名称;

auth:可选填Container或Application,指定Resource的管理者;

type:指定Resource资源的Java类名;

maxActive:设置数据库连接池中活动状态连接的最大数目,为0则不受限制;

maxIdle:设置数据库连接池中空闲状态连接的最大数目,为0则不受限制;

maxWait:设置数据库连接池中空闲状态连接的最长等待时间,超时则抛出异常,为-1则可无限等待;

username:指定数据库的用户名;

password:指定连接数据库的密码;

driverClassName:指定数据库的JDBC驱动器的Driver实现类名字(这里为MySQL数据库连接);

url:连接数据库的url。

注:可在<CATALINA_HOME>/conf/server.xml 文件中的对应<Host>元素中如上配置<Resource>子元素以供Tomcat容器内的多个Web应用使用。

 

配置JNDI资源引用web.xml: 

Java Web应用中要使用JNDI资源,必须在web.xml中配置对该JNDI资源的引用<resource-ref>元素。内容如下:

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

 

<resource-ref>元素的子元素说明: 

description:对所引用JNDI资源的描述;

res-ref-name:引用的JNDI资源的名称,与上面<Resource>元素中的name属性一致;

res-type:引用的JNDI资源的类名称,与上面<Resource>元素中的type属性一致;

res-auth:引用资源的管理者,上面<Resource>元素中的auth属性一致;

使用相对简单些的JNDI资源访问方式lookup方法,如下:

Context sourceCtx = new InitialContext(); DataSource ds =  (DataSource) sourceCtx.lookup("java:comp/env/jdbc/ DBname "); conn = ds.getConnection(); 

转载请注明原文地址: https://www.6miu.com/read-47613.html

最新回复(0)