据说在Spring javadoc关于DriverManagerDataSource个类的文章中,这个类非常简单,并且推荐

使用容器提供的JNDI数据源.这样的DataSource可以通过JndiObjectFactoryBean在Spring ApplicationContext中作为DataSource bean公开

问题是:how do I accomplish this?

例如,如果我希望有DataSource个bean来访问我的自定义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上下文中引用JNDI资源.xml如下所示:

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

参考文档:

编辑:此答案已针对Tomcat8和Spring4进行了更新.Tomcatdefault数据源资源池设置有一些属性名称更改.

Java相关问答推荐

如何让TaskView总是添加特定的列来进行排序?

找到允许的最大底片

我无法将附件发送到NetBeans之外

AssertJ Java:多条件断言

SpringBoot Kafka自动配置-适用于SASL_PLAYTEXT的SSLBundle 包,带SCRAM-SHA-512

如何将Java文档配置为在指定的项目根目录中生成?

将JSON字符串转换为Java类

Android应用程序为错误的显示类型 Select 尺寸文件

组合连接以从两个表返回数据

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

如何在ApacheHttpClient 5中为单个请求设置代理?

为什么项目名称出现在我的GET请求中?

将BlockingQueue+守护程序线程替换为执行器

Java KeyListener不工作或被添加

我该如何为我的类编写getter和setter方法?

在权限列表中找不到我的应用程序

TinyDB问题,无法解析符号';上下文&

H2数据库仅支持%1个结果集?

using case default on switch语句返回;预览特征切换中的模式匹配仅在源级别20及以上的情况下可用;

窗口启动后不久,从java.awt.Graphics disapear创建的矩形