Tomcat6.0 JNDI配置

代码和外部资源之间的紧密耦合是潜在的问题,JNDI(Java Naming and Directory Interface)可以帮助解耦两者的关系,这里以JDBC数据源为例

一、配置context.xml

在conf/context.xml文件里的<context></context>节点增加如下代码

	<Resource name="jdbc/quartz" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost/quartz"/>
 

Tomcat标准数据源资源工厂配置项如下:

  • driverClassName - 所使用的JDBC驱动类全称。
  • maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
  • maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
  • maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
  • password - 传给JDBC驱动的数据库密码。
  • url - 传给JDBC驱动的连接URL。
  • user - 传给JDBC驱动的数据库用户名。
  • validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。
  • 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。

二、获取数据源

Context initContext;
try {
    Context context= new InitialContext();
    Context envContext  = (Context)context.lookup("java:/comp/env");
    DataSource ds = (DataSource)envContext.lookup("jdbc/quartz");
    Connection conn = ds.getConnection();
    Statement stmt = conn.createStatement();
    ResultSet set = stmt.executeQuery("SELECT job_name,job_group FROM qrtz_job_details");
    while(set.next()){
        out.println(set.getString("job_name"));
    }
} catch (NamingException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
}
 

以上方式属于硬编码方式,正式环境我们会用到spring的配置方式,如下

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/quartz"/>
</bean>
 

猜你喜欢

转载自dsbjoe.iteye.com/blog/1093995