使用Maven在带有数据源的嵌入式Tomcat上进行部署

Jen*_*der 7 tomcat maven-2 datasource embeddedwebserver

我有一个多模块maven web应用程序,它使用hibernate.

我使用tomcat:run目标,以便在maven的嵌入式tomcat服务器上运行它.到目前为止一切正常.

但是现在我需要从hibernate.properties中的explicite jdbc配置切换到数据源.我做了以下事情:

  • 改变了hibernate.properties

从

hibernate.connection.driver_class=oracle.jdbc.OracleDriver
hibernate.connection.url=jdbc:somejdbcurl
hibernate.connection.username=aUser
hibernate.connection.password=aPassword
Run Code Online (Sandbox Code Playgroud)

至

hibernate.connection.datasource=java:comp/env/jdbc/datasourcename
Run Code Online (Sandbox Code Playgroud)
  • 在web.xml中我添加了
<resource-ref>
    <res-ref-name>jdbc/datasourcename</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
  • 在web.xml旁边添加了一个context.xml,其中包含以下内容:
<Context>
  <Resource name="jdbc/datasourcename"
         auth="Container"
         type="javax.sql.DataSource"
         username="aUser" password="aPassword"
         driverClassName="oracle.jdbc.OracleDriver"
         url="jdbc:somejdbcurl"
         maxActive="2" maxIdle="2"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

这是行不通的,这是预料之中的,因为我没有找到提供包含Oracle jdbc驱动程序的jar文件的方法.我期待一个ClassNotFound Exception或类似的东西,但我得到了一个

org.hibernate.exception.GenericJDBCException: Cannot open connection
Run Code Online (Sandbox Code Playgroud)

在堆栈中有根本原因:

Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
Run Code Online (Sandbox Code Playgroud)

Soooooo的问题是:

  • 为什么tomcat不知道我希望它使用Oracle驱动程序?
  • 如何告诉tomcat包含驱动程序的jar文件?

Pas*_*ent 11

您需要在插件声明中添加JDBC驱动程序:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>
  <version>1.0</version>
  <configuration>
    ...
  </configuration>
  <dependencies>
    <dependency>
      <groupId>...</groupId>
      <artifactId>...</artifactId>
      <version>...</version>
    </dependency>
  </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,对于默认值contextFile是src/main/webapp/META-INF/context.xml.