如何模拟 JNDI 对象以便单元测试呢?首先需要加入 tomcat-juli.jar,这个包位于 tomcat/bin 目录下,需要手动复制到 Classpath 中;然后生成初始化上下文对象 InitialContext ,下面就封装了一个方法 JdbcConnection.initIc() ;最后绑定实际数据源对象 DataSource ,源码如下。
private static InitialContext initIc() {
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming");
try {
InitialContext ic = new InitialContext();
ic.createSubcontext("java:");
ic.createSubcontext("java:/comp");
ic.createSubcontext("java:/comp/env");
ic.createSubcontext("java:/comp/env/jdbc");
return ic;
} catch (NamingException e) {
LOGGER.warning(e);
return null;
}
}
// 绑定数据源
/**
* 根据 JDBC Url 创建 MySQL 数据库 JDNI 数据源
*
* @param url 像 "jdbc:mysql://localhost:3306/databaseName"
* @param user 用户名
* @param password 密码
*/
pub