【问题标题】:Maven tomcat:run plugin and datasource configuration via JNDIMaven tomcat:通过 JNDI 运行插件和数据源配置
【发布时间】:2015-03-02 06:07:30
【问题描述】:

我正在尝试使用 Spring JndiObjectFactoryBean 配置 DB DataSource,因此,我有用于本地测试目的的 tomcat:run 插件和位于 src/test/resources/maven-tomcat-plugin/ 中的 context.xml 文件

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <contextFile>${basedir}/src/test/resources/maven-tomcat-plugin/context.xml</contextFile>
  </configuration>
</plugin>

上下文.xml

<?xml version='1.0' encoding='utf-8'?>
<Context>
<ResourceLink name="jdbc/MyLocalDB" global="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" />
<Resource name="jdbc/MyDB" global="jdbc/MyDB" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc" username="" password="" maxActive="100" maxIdle="20" minIdle="5"
    maxWait="10000" />
</Context>

但我有:名称 [jdbc/TestDB] 未绑定在此上下文中

看起来 contextPath 什么也没提供。

有没有人知道如何解决它?

【问题讨论】:

  • 我不知道怎么做,但我删除了 ResourceLink 并使用了 jndi 名称 jdbc/MyDB 并且它可以工作。

标签: spring maven tomcat datasource jndi


【解决方案1】:

您可以尝试以下配置(不要忘记添加依赖项):

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <port>9090</port>
        <path>/myapp</path>
        <contextFile>${basedir}/tomcat7-maven-plugin/context.xml</contextFile>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
    </dependencies>
</plugin>

还有 context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context debug="true" reloadable="true" crossContext="true"
    antiJARLocking="true">  
    <Resource name="jdbc/myDS" auth="Container"
      type="javax.sql.DataSource" maxActive="100" maxIdle="30"
      maxWait="10000" validationQuery="select sysdate from dual"
      username="userdb" password="pass123"
      driverClassName="oracle.jdbc.driver.OracleDriver"
      url="jdbc:oracle:thin:@server:1521:sid" />
</Context>

有关更多信息,您可以查看 Apache Tomcat 网页 https://tomcat.apache.org/maven-plugin-2.2/tomcat7-maven-plugin/run-mojo.html

【讨论】:

    【解决方案2】:

    &lt;ResourceLink&gt; 元素旨在构造一个指向 全局 资源的链接,该资源应在您的 server.xml 文件下声明,如下所示:

    <GlobalNamingResources>
      <Resource name="jdbc/DatabaseName" auth="Container" type="javax.sql.DataSource"
              username="dbUsername" password="dbPasswd"
              url="jdbc:postgresql://localhost/dbname"
              driverClassName="org.postgresql.Driver"
              initialSize="5" maxWait="5000"
              maxActive="120" maxIdle="5"
              validationQuery="select 1"
              poolPreparedStatements="true"/>
    </GlobalNamingResources/>
    

    请注意,name 属性必须与 ResourceLink 元素的 global 属性匹配。

    所以要么声明一个匹配的全局资源,要么像你一样删除资源链接并使用声明的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多