gpt4 book ai didi

Spring 测试框架 - JNDI 资源

转载 作者:行者123 更新时间:2023-12-04 07:25:45 24 4
gpt4 key购买 nike

我正在玩弄 Spring 测试框架,但我有一个问题。通常,当应用程序部署在 Tomcat 上时,我们有

<Resource
name="jdbc/sqliteDS"
auth="Container"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="x"
maxWait="5000"
driverClassName="org.sqlite.JDBC"
password="x"
url="jdbc:sqlite:/home/xxx/db.sqlite"/>

</Context>

在 Tomcat context.xml 中,
<resource-ref>
<description>sqlite DataSource</description>
<res-ref-name>jdbc/sqliteDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

在 web.xml 和
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/comp/env/jdbc/sqliteDS" />
</bean>

在 data-context.xml 中
用于获取数据源,但是我如何为 Spring 测试框架模拟 JNDI 资源,因为现在在初始化期间我收到了找不到数据源的错误,他是对的。

此外,如果无需编写另一个 .xml 文件就可以做到这一点,那就太好了。

最佳答案

前段时间我不得不处理这个问题,但我没有找到合适的解决方案,而是一个暗示另一个 xml 文件的解决方法:

首先,您创建一个定义 JNDI 信息 (jndi.xml) 的 Spring 配置文件:

<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-3.0.xsd">

<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@server:port:instance" />
<property name="username" value="user" />
<property name="password" value="pwd" />
</bean>
</beans>

然后是一个静态类来绑定(bind)你的 JNDI 变量:
public class Initialize {
public static void initializeJndi() throws Exception {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jndi.xml");
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind("java:comp/env/jdbc/foo", applicationContext.getBean("dataSource"));
builder.activate();
}
}

然后在您的测试类中,添加以下内容:
    @BeforeClass
public static void initJndi() throws Exception {
Initialize.initializeJndi();
}

因此,当您加载 Spring 主配置文件时,可以访问 JNDI 资源。

也许这不是最好的方法,但它确实有效。

顺便说一句,拥有一个特定的配置文件似乎是个好主意,因为您可能不想在最终数据库上运行单元测试。这样做更多地被认为是集成测试而不是单元测试。

希望能帮助到你,

穆瓦

关于Spring 测试框架 - JNDI 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12058098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com