当前位置: 首页 > 面试题库 >

spring如何使用Tomcat提供的JNDI数据源?

百里鸿祯
2023-03-14
问题内容

据说,在有关DriverManagerDataSource类的Spring javadoc文章中,该类非常简单,建议使用

使用容器提供的JNDI数据源。这样DataSource可以通过DataSourceSpring ApplicationContext中的bean
形式公开。JndiObjectFactoryBean

问题是: 我该如何完成?

例如,如果我希望让DataSourcebean访问我的自定义MySQL数据库,那我需要什么?我应该在上下文配置等中写些什么?


问题答案:

如果使用基于Spring XML架构的配置,请在Spring上下文中进行如下设置:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
...
<jee:jndi-lookup id="dbDataSource"
   jndi-name="jdbc/DatabaseName"
   expected-type="javax.sql.DataSource" />

或者,使用以下简单的bean配置进行设置:

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

您可以使用以下类似方法在tomcat的server.xml中声明JNDI资源:

<GlobalNamingResources>
    <Resource name="jdbc/DatabaseName"
              auth="Container"
              type="javax.sql.DataSource"
              username="dbUser"
              password="dbPassword"
              url="jdbc:postgresql://localhost/dbname"
              driverClassName="org.postgresql.Driver"
              initialSize="20"
              maxWaitMillis="15000"
              maxTotal="75"
              maxIdle="20"
              maxAge="7200000"
              testOnBorrow="true"
              validationQuery="select 1"
              />
</GlobalNamingResources>

并从Tomcat的web context.xml中引用JNDI资源,如下所示:

  <ResourceLink name="jdbc/DatabaseName"
   global="jdbc/DatabaseName"
   type="javax.sql.DataSource"/>

参考文档:

  • Tomcat 8 JNDI数据源HOW-TO
  • Tomcat 8上下文资源链接参考
  • Spring 4 JEE JNDI查找XML模式参考
  • spring4 JndiObjectFactoryBean Javadoc

编辑:此答案已针对Tomcat 8和Spring 4进行了更新。对于Tomcat的 默认 数据源资源池设置,有一些属性名称更改。



 类似资料:
  • 问题内容: 在有关类的Spring javadoc文章中,该类非常简单,建议使用 使用容器提供的JNDI数据源。这样DataSource可以通过DataSourceSpring ApplicationContext中的bean 形式公开。 问题是:我该如何完成? 例如,如果我希望让访问我的自定义MySQL数据库,那我需要什么?我应该在上下文配置等中写些什么? 问题答案: 如果使用基于Spring

  • 我想用Spring Boot配置JNDI数据源 我知道可以在application.properties.中使用以下内容创建jndi。我在纠结的是如何将其与JBoss WildFly联系起来? a.我需要在WildFly的standalone.xml下添加/更改什么和b. Spring Boot主应用程序类ProjectPocApiApplication下需要的任何更改 谢谢

  • 问题内容: 我对Spring还是很陌生,想知道如何创建使用模拟数据源的JUnit测试以及如何在其中使用JNDI上下文?当前,我的应用程序使用来自tomcat的JNDI上下文来检索连接,并通过该连接从数据库中检索数据。所以我想我需要模拟JNDI调用和数据检索。关于解决此问题的最佳方法的任何很好的指示都是很棒的!非常感谢! 问题答案: 我通常在单独的文件中定义我的JNDI依赖项,例如: 这样,在测试资

  • 我在使用Spring ApplicationContext.xml文件中的JNDI配置dataSource bean时遇到了困难。 我的applicationContext.xml条目如下所示: 通过这些配置,我在Tomcat控制台上不断得到这样的错误: 由:javax.naming.NameNotFoundException:Name[jdbc/myapp]在此上下文中没有绑定。找不到[jdbc

  • 问题内容: 我有一个从命令行运行的Java项目。它正在使用Spring。目前,我的项目是mySQL。使用可以从下面的config.xml中看到 我的公司要求我将项目从使用MySQL更改为使用JNDI数据源。 下面是我的Java代码,可以看到正在使用jdbcTemplate: 有人可以告诉我如何更改它以使用JNDI数据源。我还需要在某个地方进行数据库池的JNDI服务吗?我们有带有数据源的JBoss

  • 我试图创建一个Spring Boot应用程序,它连接两个数据源。我可以通过遵循Spring文档来实现这一点,但我面临的挑战是实现以下目标 null 是否有任何方法可以使用Spring Boot的自动配置功能来实现这一点,或者我必须基于概要文件创建不同的数据源bean。

  • null 目前,我已经为运行应用程序配置了postgres,并通过在和中使用不同的配置了用于测试的h2 对于这些场景,更改数据库连接信息的最简单方法是什么?

  • 问题内容: 我正在用Spring开发一个网站,并试图提供不是.jsp文件(例如.html)的资源。 现在我已经注释掉了我的servlet配置的这一部分 并尝试从控制器返回资源的完整路径。 该文件夹中存在index.html文件。 注意:当我将index.html更改为index.jsp时,我的服务器现在可以正确服务该页面。 谢谢。 问题答案: 最初的问题是配置中指定了一个属性,因此实现类将添加到从