如何在没有app服务器的情况下欺骗数据源的jndi查找

Wis*_*szh 7 java jndi datasource

我想测试一些内部Web应用程序的新功能.此新代码使用通常由应用程序服务器(tomcat)提供的数据库连接.

我不想在我的本地计算机上重新创建整个Web应用程序来测试新代码,因为我只需要运行一个函数.

有没有人知道如何"欺骗"上下文或数据源来检索数据库配置,而无需在服务器上实际创建Web应用程序实例?

Lau*_*nen 4

在 Spring SimpleNamingContextBuilder和 Apache BasicDataSource的帮助下,您可以执行以下操作(我通常将其放在需要 JNDI 的测试类的静态块中):

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(db_driver_name);
dataSource.setUrl(db_connection_url);
dataSource.setUsername(db_username);
dataSource.setPassword(db_password);
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind(jndi_name, dataSource);
builder.activate();
Run Code Online (Sandbox Code Playgroud)

的值jndi_name可能如下所示:java:comp/env/jdbc/my-db

设置完成后,通常通过 JNDI 查找数据库连接的代码应该可以工作。例如,上面的代码适用于以下 Spring 配置:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/my-db"/>
</bean>
Run Code Online (Sandbox Code Playgroud)