用JNDI方式连接数据源

本文介绍了在JavaWeb项目中如何通过JNDI方式连接数据源,以实现数据源参数的外部配置。文章详细讲解了两种主要的数据源外置方法,包括将配置放在Spring配置文件的.properties文件中以及使用Tomcat的JNDI配置文件。重点讨论了JNDI文件的格式,提供了不同数据库(如sql server 2000, 2008, Oracle11)的驱动类和驱动包信息,并给出了在Spring中获取数据源的示例。" 124842360,9036138,C++后台开发:实现Reactor处理百万并发连接,"['C++后台开发', 'Linux服务器开发', '高并发处理', 'epoll', 'reactor模型']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)引言:

很多JavaWeb项目,都将数据源配置内容,写在了配置文件上,但实际开发中,为了解耦,一般会将数据源参数配置在外置文件中,以便实施人员,配置正式运行环境。

 

2)连接方式说明:

目前我了解到的主要有两种方式,可供数据源外置

2.1)第一种:spring配置文件的datasource中,但是最好不要将参数直接写在spring文件中,要配置在.properties格式的文件中

2.2)第二种:将数据源配置在JNDI配置文件中,JNDI文件放置在tomcat的这个路径下:apache-tomcat-\conf\Catalina\localhost 文件夹下,然后tomcat运行时,会读取这个路劲下的配置文件,并加载对应的项目。

那么,这里涉及到tomcat如何加载启动项目的问题,下面是使用例子:

2.2.1)tomcat文件

 

2.2.2)JNDI文件格式说明(不同数据库类型,连接方式,驱动包,驱动类都不一样)

例子:JNDI数据库文件格式如下,数据源以sql server2008为例子

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\Workspaces\P707-copy\WebRoot" path="/P707"
	reloadable="false" antiJARLocking="true">

    <!-- 这里可以添加多个数据源 -->
    
    <!-- 
        这里以sql server2008作为例子
        说明:name:是在JAVA程序中调用该数据源时,所用到的名称
             数据库名字,因为sqlserver中数据库中有多个小的数据库,所以要定位
             用户名,密码,IP地址,端口,基本就是跟连接数据库所用到的信息一样,没什么说的
    -->

    <Resource auth="Container" name="jdbc/JNDI数据库名字" type="javax.sql.DataSource"
		maxActive="50" maxIdle="30" maxWait="5000" username="用户名" password="密码"
		driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
     url="jdbc:sqlserver://IP地址:端口;DatabaseName=数据库名字;SelectMethod=cursor"
		validationQuery="select 0" />


</Context>

sql server2000方式:

驱动类:com.microsoft.jdbc.sqlserver.SQLServerDriver

驱动包:mssqlserver.jar(可能涉及到其他包,这里不考究)      

代码:

 

sql server2008方式:

驱动类:com.microsoft.sqlserver.jdbc.SQLServerDriver

驱动包:sqljdbc4.jar(可能涉及到其他包,这里不考究)   

代码:

<Resource auth="Container" name="jdbc/JNDI名称" type="javax.sql.DataSource"
		maxActive="50" maxIdle="30" maxWait="5000" username="用户名" password="密码"
		driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
		url="jdbc:sqlserver://IP地址:端口;DatabaseName=数据库名;SelectMethod=cursor"
		validationQuery="select 0" />

sql server方式(兼容2000和2008),这个兼容问题,之前遇到过,可看这文章:关于JDK6兼容sql server2016的兼容问题

驱动类:net.sourceforge.jtds.jdbc.Driver

驱动包: jtds-1.2.5.jar

代码:

<Resource name="jdbc/JNDI名称" auth="Container" type="javax.sql.DataSource" maxActive="30" 

maxIdle="20" maxWait="10000"  validationQuery="select 0" username="用户名" password="密码" 

driverClassName="net.sourceforge.jtds.jdbc.Driver"  

url="jdbc:jtds:sqlserver://IP地址:端口;DatabaseName=数据库名称;SelectMethod=cursor"/>

 

oracle11方式:

驱动类:oracle.jdbc.driver.OracleDriver

驱动包:ojdbc6.jar

代码:

<Resource name="jdbc/JNDI名称"
		auth="Container"
		type="javax.sql.DataSource"
        maxActive="100"
		maxIdle="30" 
		maxWait="10000"
        username="FTNHRP"
		password="FTNHRP" 
		driverClassName="oracle.jdbc.driver.OracleDriver"
		url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST =(ADDRESS=(PROTOCOL=TCP)(HOST=IP地址)(PORT=端口)))(CONNECT_DATA=(SERVICE_NAME=数据库名称)(SERVER=DEDICATED)))"
        validationQuery="select 0 from DUAL"
        removeAbandoned="true" 
		removeAbandonedTimeout="60"/>

然后在简单地,可以在spring中这样获取(也可以通过java原生的jndi方式获取)

java:comp/env/jdbc/JNDI名称,其中红色部分,我也不确定是什么

<bean id="datasource"
		class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="resourceRef">
			<value>false</value>
		</property>
		<property name="jndiName">
			<value>java:comp/env/jdbc/JNDI名称</value>
		</property>
	</bean>

其他数据源,暂无,待完善

若有问题,请帮忙指正,谢谢!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值