一 在tomcat下jndi有多种配置方式:
(1)全局配置:
在tomcat的conf目录下的context.xml文件中加入如下配置:
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="60" wait_timeout="18800" timeBetweenEvictionRunsMillis="300000" minEvictableIdleTimeMillis="600000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/family?comautoReconnect=true&failOverReadOnly=false" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
配置项意义:
- * driverClassName - 所使用的JDBC驱动类全称。
- * maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
- * maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
- * maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
- * password - 传给JDBC驱动的数据库密码。
- * url - 传给JDBC驱动的连接URL。
- * user - 传给JDBC驱动的数据库用户名。
- * validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句
(2)局部配置:
在应用服务的META-INFO下创建context.xml并且内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" password="root" username="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/family?comautoReconnect=true&failOverReadOnly=false" maxIdle="30" maxWait="5000" maxActive="100" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" /> </Context>
(3) 还有一种方式是修改tomcat的server.xml,此方式不推荐,所以在此处就不在叙述
针对以上配置需要在应用的web.xml添加如下配置:
<resource-ref> <description>JNDI DataSource</description> <res-ref-name>jdbc/mysql</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref>
针对以上web.xml中的配置,网上很多描述要配置,本人把(1),(2)两种情况在不配置web.xml的情况下均能正常使用数据源
二 在web项目中配置好了数据源,可以做如下使用
(1) 直接使用数据源,操作如下代码:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
System.out.println(ds.getClass().getSimpleName());
Connection conn = ds.getConnection();
注意:此段代码不能使用application运行,不然会报错(数据源配置在tomcat或web容器上) (2)在spring中使用,有如下两种配置方式
<jee:jndi-lookup id="dataSource" jndi-name="java:/comp/env/jdbc/sqlserver"/> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:/comp/env/jdbc/sqlserver"></property> </bean>