本文基于 Spring 的 JdbcTemplate
来介绍使用 JNDI 数据源。
JNDI 有两种配置方式:
- 全局 JNDI 配置 - 在
<tomcat>/conf/server.xml
里配置,所有项目都能使用 - 局部 JNDI 配置 - 有两种方式,只有配置此 JNDI 的项目自己能使用
- 在
META-INF/context.xml
里配置 - 在
<tomcat>/conf/Catalina/localhost/<projectRelated>.xml
里配置
- 在
全局 JNDI 配置
在 <tomcat>/conf/server.xml
中的 <GlobalNamingResources>
下添加 <Resource>
如下配置 JNDI 数据源:
1 | <GlobalNamingResources> |
局部 JNDI 配置
在 META-INF/context.xml
中如下配置 JNDI 数据源:
1 |
|
在 <tomcat>/conf/Catalina/localhost/<projectRelated>.xml
里配置:
1 |
|
使用 JNDI 数据源
按上面的说明选择一种适合项目的方式配置好 JNDI 的数据源
把 MySQL 的 connector 如 mysql-connector-java-5.1.21.jar 放到
<tomcat>/lib
下在 Spring 的配置文件里配置好 DataSource 如文件命名为 database.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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.xsd">
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/xtuerDB</value>
</property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans><value>java:comp/env/jdbc/xtuerDB</value>
java:comp/env/
是固定的前缀jdbc/xtuerDB
是 JNDI 数据源的名字在 web.xml 中加载 database.xml
1
2
3
4
5
6
7
8
9
10
11
12<!-- Context Param -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/database.xml
</param-value>
</context-param>
<!-- Listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>在 Controller 里使用 jdbcTemplate 访问数据库
1
2
3
4
5
6
7
8
public String getUsers() {
String sql = "SELECT * from user";
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
return rows.toString();
}
Gretty 需要启用 JNDI
Gretty 的嵌入式 Tomcat 和 Jetty 默认没有启用 JNDI 和指定 context.xml
,需要在配置中启用
1 | gretty { |
serverConfigFile 配置 Tomcat 的 server.xml
contextConfigFile 配置 context.xml
请参考 http://akhikhl.github.io/gretty-doc/Gretty-configuration.html