gpt4 book ai didi

java - Spring Jndi 配置,Server.xml

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:45 25 4
gpt4 key购买 nike

我在使用 Spring 为 JNDI 设置配置时遇到问题。我检查了其他帖子,但无法解决我的问题。我使用 Tomcat 6 作为我的容器。据我了解,我需要在服务器上设置一个资源。所以在我的 server.xml 文件中我有这个:

<GlobalNamingResources>
<Resource auth="Container" driverClassName="org.postgresql.Driver"
maxActive="100" maxIdle="5" maxWait="10000"
minEvictableIdleTimeMillis="60000" name="jdbc/myTomcatPool"
password="password" testOnBorrow="true" testWhileIdle="true"
timeBetweenEvictionRunsMillis="10000" type="javax.sql.DataSource"
url="jdbc:postgresql://localhost:5432/postgis" username="postgres"
validationQuery="SELECT 1"/>
</GlobalNamingResources>

我的 spring-context.xml 中有以下内容(在类路径中):

<jee:jndi-lookup id="geoCodeData" jndi-name="java:comp/env/jdbc/myTomcatPool" />

<bean id="geoCodeService" class="com.sample.SampleImpl">
<property name="dataSource" ref="geoCodeData"/>
</bean>

然后我在文件 META-INF/context.xml 中有这个:

<Context path="/myApp" reloadable="true" cacheMaxSize="51200"
cacheObjectMaxSize="2560">
<ResourceLink global="jdbc/myTomcatPool" name="jdbc/myTomcatPool"
type="javax.sql.DataSource"/>
</Context>

我的服务器启动时没有错误。

当我尝试运行以下测试时(在我添加 JNDI 代码之前有效):

public class Test {
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("spring-context.xml");
}
}

我收到以下错误:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'geoCodeData': Invocation of init method failed;

nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial

是我的配置错误还是我尝试运行测试的方式不正确?

最佳答案

当您运行测试用例时,您将希望使用 JDBC 而不是 JNDI 查找。原因很简单,因为您通常不会从应用程序服务器运行测试用例。因此,JNDI 查找将失败。

我这边所做的是将数据源放在一个单独的文件中。我有一个使用 JNDI 的生产文件:-

project-datasource.xml

<jee:jndi-lookup id="geoCodeData" jndi-name="java:comp/env/jdbc/myTomcatPool"></jee:jndi-lookup>

... 另一个使用 JDBC 的单元测试文件:-

项目数据源测试.xml

// use the same bean name "geoCodeData"
<bean id="geoCodeData" class="...">
<property name="driverClassName" value="..." />
<property name="url" value="..." />
<property name="username" value="..." />
<property name="password" value="..." />
</bean>

Web 应用程序将使用 project-datasource.xml 而单元测试将使用 project-datasource-test.xml

关于java - Spring Jndi 配置,Server.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197236/

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