JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展。两者之间的关键差别是目录服务中对象不但可以有名称还可以有属性(例如,用户有email地址),而命名服务中对象没有属性。
JNDI是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。
JNDI这个概念之前没有接触过,因为学习一个新的项目,发现它是将与数据库连接的信息写在tomcat目录下context.xml中的,然后在spring中配置来获取数据库连接信息。
在context.xml中添加Resource节点
<Resource auth="Container" description="DB Connection" name="jdbc/xxx" driverClass="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://192.168.1.1:3306/www" user="root" password="password" maxPoolSize="10" minPoolSize="1" acquireIncrement="1" idleConnectionTestPeriod="60" preferredTestQuery="select 1" factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource" />
在spring配置文件中设置
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/xxx" /> <!-- java:comp/env/是一个J2EE环境的定义,jdbc/xxx是上面Resource定义的name --> </bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
通常情况下,还是在项目中写配置文件,然后去读。使用JNDI的情况:如果在tomcat中部署了很多应用,应用都需要使用同一个数据库。
参考