【问题标题】:jdbc connection on tomcat serverTomcat服务器上的jdbc连接
【发布时间】:2011-12-14 17:02:41
【问题描述】:

我会尽我所能制定。

首先,Web 应用程序(带有 Spring Jdbc 的 Spring MVC)运行良好,直到我开始使用 STS(基于 Eclipse 的 Spring Tool Suite)和 JDK+JRE7 的版本来获取 Java 7 的功能。

其次,当前的问题是 Apache Tomcat 6 或 7(我有两个,但由于我不记得的原因重新安装了)似乎正在影响与数据库的连接。直接说:获取jdbc连接失败

 org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: No suitable driver found for jdbc:postgresql:postgres

每当我尝试从我的网络应用程序对数据库执行任何操作时都会发生这种情况。

jdbc:postgresql:postgres 行是可以的,以防万一,因为它以前工作过,它有效地表示要连接到名为 postgres 的本地数据库(也因为以下几点)。

另一个重要的一点是,在 vFabric tc Server 下,一切都可以完美运行,没有任何问题。

第三,数据库是 PostgreSql 加上 Apache DBCP 池化。

第四,maven jdbc 驱动程序依赖项似乎运行良好,同样如果它们没有 vFabric tc Server 也会像 Apache Tomcat 一样失败,这让我想到 Apache Tomcat 本身就是罪魁祸首。

服务器启动过程中产生的一些信息:

     Dec 14, 2011 4:54:32 PM org.apache.catalina.core.AprLifecycleListener init
     INFO: The APR based Apache Tomcat Native library which allows optimal                       performance in production environments was not found on the java.library.path:           C:\ProgramFiles\Java\jdk1.7.0_02\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin;C:\Program Files\Apache Software Foundation\apache-maven-3.0.3\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\QuickTime\QTSystem\;.
     Dec 14, 2011 4:54:32 PM org.apache.coyote.AbstractProtocol init
     INFO: Initializing ProtocolHandler ["http-bio-8080"]
     Dec 14, 2011 4:54:32 PM org.apache.coyote.AbstractProtocol init
     INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
     Dec 14, 2011 4:54:32 PM org.apache.catalina.startup.Catalina load
     INFO: Initialization processed in 849 ms
     Dec 14, 2011 4:54:32 PM org.apache.catalina.core.StandardServicestartInternal
     INFO: Starting service Catalina
     Dec 14, 2011 4:54:32 PM org.apache.catalina.core.StandardEngine startInternal
     INFO: Starting Servlet Engine: Apache Tomcat/7.0.23
     Dec 14, 2011 4:54:33 PM org.apache.catalina.startup.HostConfig deployDescriptor
     INFO: Deploying configuration descriptor C:\Users\User\Documents\workspace-sts\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\Catalina\localhost\project.xml
     Dec 14, 2011 4:54:33 PM org.apache.catalina.startup.SetContextPropertiesRule begin
     WARNING: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:project' did not find a matching property.
     Dec 14, 2011 4:54:34 PM org.apache.catalina.core.ApplicationContext log
     INFO: Initializing Spring root WebApplicationContext

     Dec 14, 2011 4:54:37 PM org.apache.coyote.AbstractProtocol start
     INFO: Starting ProtocolHandler ["http-bio-8080"]
     Dec 14, 2011 4:54:37 PM org.apache.coyote.AbstractProtocol start
     INFO: Starting ProtocolHandler ["ajp-bio-8009"]
     Dec 14, 2011 4:54:37 PM org.apache.catalina.startup.Catalina start
     INFO: Server startup in 4664 ms

我真的很绝望,请帮忙。

更新:

仍然坐在前面看着悲伤的屏幕,所以我决定包含所有 .xml 配置。

<bean id="dataSource" class="org.apache.commons.dbcp.PoolingDataSource">
    <constructor-arg ref="connectionPool"/>
</bean>

<bean id ="connectionPool" class="org.apache.commons.pool.impl.GenericObjectPool">
<constructor-arg><null/></constructor-arg>
</bean>


<bean id="poolableConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory" >
<constructor-arg ref="connectionFactory"/>
<constructor-arg ref="connectionPool"/>
<constructor-arg><null/></constructor-arg>
<constructor-arg><null/></constructor-arg>
<constructor-arg value="false"/>
<constructor-arg value="true"/>
</bean>

    <bean id="connectionFactory" class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
    <constructor-arg value="jdbc:postgresql:postgres"/>
    <constructor-arg value="postgres"/>
    <constructor-arg value="myCorrectPassword"/>
</bean>

【问题讨论】:

  • 如何加载驱动程序?
  • spring配置文件中的接线,要我贴出来吗?
  • 检查 Eclipse 是否正在将 jar 复制到工作文件夹(在 .settings 文件夹下的某个位置)。如果真的需要进步,直接把jar放到common lib文件夹下,把依赖设置为provided
  • 我检查了目标文件夹和生成的 .war 文件。他们在里面包括了罐子。我再次说,如果这些是问题,那么 vFabric Server 也不会工作?也许我错了,我什么都不知道了。我知道如何编码,但设置总是我浪费时间的地方。

标签: apache tomcat jdbc connection


【解决方案1】:

在 grl 中,我会说 DB 驱动程序可能应该进入 Tomcat 上的公共 lib 文件夹。 通常这些驱动程序用于多个应用程序。

此外,如果您在 context.xml 中设置池,这是必需的。

【讨论】:

  • @Aubergine 我要支持这家伙所说的
  • 好吧,我已经按照你说的做了。 (虽然我个人不记得以前这样做过)但它仍然不起作用,我在 tomcat/lib 中包含与 maven 依赖项、相同 jar 完全相同的版本。哦,我越来越难过了。
  • 问题可能是Eclipse。尝试将条目添加到类路径(在 Tomcat conf 窗口中)。我刚试过,它奏效了。因此,应用程序上下文是可以的。您可以发布您的 postgresql 依赖项吗?我使用(Spring 3.0.6.RELEASE): commons-dbcpcommons-dbcp1.4postgresql postgresql9.1-901.jdbc4
  • 似乎是应用程序上下文中的问题,我真的不知道如何或为什么。但正如你所见,我没有在任何地方指出我加载了什么样的供应商驱动程序。在连接工厂中,我只有 URL 名称和通行证。另外,我尝试使用使用简单数据源的基本配置从其他在tomcat上工作的Spring MVC应用程序连接到db,并且它有效(甚至没有在maven中给出依赖关系)。我今天将发布我的解决方案。
  • 既然你把库放在tomcat/lib上,你就不需要依赖maven了。但是,在这种情况下,我建议将其设置为提供的。我认为你不需要指明司机。驱动程序正在以某种方式注册....使用您的上下文,我得到一个“连接被拒绝”(因为我没有 postgres)但是,我确实在堆栈跟踪中看到了正确的驱动程序/连接。最后一项检查可能是将解决方案打包并在 tomcat 上手动部署。只是为了 100% 确定这是不是日食问题。
猜你喜欢
  • 2020-02-08
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
相关资源
最近更新 更多