1. 是什么
JNDI 是 Java 命名与目录接口(Java Naming and Directory Interface),在 J2EE 规范中是重要的规范之一。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组件在运行时间接地查找其他组件、资源或服务的通用机制。在多数情况下,提供 JNDI 供应者的容器可以充当有限的数据存储,这样管理员就可以设置应用程序的执行属性,并让其他应用程序引用这些属性(Java 管理扩展(Java Management Extensions,JMX)也可以用作这个目的)。JNDI 在 J2EE 应用程序中的主要角色就是提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。
2. 为何用
程序员可以不用关心“具体的数据库后台是什么?JDBC 驱动程序是什么?访问数据库的用户名和口令是什么?”等等这些问题,而是把这些问题交给 J2EE 容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。
3. 怎么用
3.1 整体思路
- 在在 J2EE 容器如 Tomcat 中配置一个数据源,给这个数据源设置一个名称;
- 在项目程序中,通过数据源名称引用这个数据源从而访问后台数据库
3.2 示例
下面在 Tomcat7.0+spring+springMVC+hibernate 项目中演示用法。
Tomcat
在 context.xml 的根节点 Context 里加入 Resource 配置
<Resource
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
maxActive="20"
maxIdle="10"
maxWait="10000"
minEvictableIdleTimeMillis="10000"
name="jdbc/testing"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="8000"
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/easycare_zhongze?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
username="root"
password="root"
validationQuery="select 1" />
Spring
<beans profile="testing">
<context:property-placeholder ignore-resource-not-found="true"
location="classpath:properties/testing.properties"/>
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/demoDatasource" />
<property name="resourceRef" value="true" />
</bean>
<bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
<property name="targetDataSource" ref="dataSource"/>
</bean>
</beans>
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于