当前位置: 首页 > 知识库问答 >
问题:

为什么错误:找不到适合jdbc的驱动程序:h2

卫烨烁
2023-03-14

当我调试我的Mule应用程序时,我有错误:

org.springframework.dao.DataAccessResourceFailureException: Error retrieving database metadata; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: No suitable driver found for jdbc:h2:~/test

我的java代码

SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate.getDataSource()).withProcedureName("my_procedure_name").withSchemaName("my_schema");
...
call.execute(in)

我的aaplicationContext:

<bean id="dataSource2"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${db2.driver}" />
        <property name="url" value="${db2.url}" />
        <property name="username" value="${db2.user}" />
        <property name="password" value="${db2.password}" />
</bean>

我的app_name.properties:

db2.url=jdbc:h2:~/test
db2.driver=org.h2.Driver
db2.user=sa
db2.password=

我的pom:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

我的类路径:

<classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.4.200/h2-1.4.200.jar"/>

运行应用程序后的日志信息:

INFO  org.springframework.jdbc.datasource.DriverManagerDataSource - Loaded JDBC driver: org.h2.Driver

我还把h2-1.4.200.jar(当我从Anypoint Studio启动我的应用程序)到:

c:\...\plugins\org.mule.tooling.server.3.9.0_6.4.0.201908221250\mule\lib\user\ 
and:
c:\...\plugins\org.mule.tooling.server.3.9.0_6.4.0.201908221250\mule\lib\boot\ 
and:
c:\...\plugins\org.mule.tooling.server.3.9.0_6.4.0.201908221250\mule\lib\mule\ 

当我从mule服务器h2-1.4.200运行应用程序时。jar,我放在这里:

..\mule-standalone-3.9.0\lib\boot
and
..\mule-standalone-3.9.0\lib\user
and:
..\mule-standalone-3.9.0\lib\mule

为什么找不到应用程序驱动程序h2?有什么问题?

谢谢

共有1个答案

益稳
2023-03-14

您混合了3种不同的方法来管理JDBC驱动程序依赖关系,并在运行时复制了库。这也使得理解问题和部署应用程序更加困难。

让我们从Maven开始。看起来您在pom中使用了正确的依赖项,只要它在节中。

如果项目使用的是Maven,则不需要进行任何调查,除非它与Maven不同步。您不应该手动更改类路径,也不应该在Anypoint Studio中编辑生成路径。这些是Studio/Eclipse的一部分。类路径文件,应该单独保留。请确保更新项目,以便Studio重新生成类路径。

关于MULE\u HOME\lib\boot、MULE\u HOME\lib\user、MULE\u HOME\lib\MULE(在Studio或单机版中),不应将库放在其中。Maven依赖性已经足够了,您正在复制版本。即使您可以在lib\user中共享库,也不建议这样做。这使得sanely部署的复制更加困难,而且也不需要JDBC驱动程序。您不应该在lib\boot、lib\mule或lib的其他子目录中放置任何内容。这些是为运行时保留的。

首先尝试删除所有这些附加功能,看看干净的部署会发生什么。

更新时间:

清理完库后,请考虑Spring类本身可能存在一些类加载问题。使用数据源池实现几乎总是更好的。有几种可供选择,如c3p0、dbcp和其他。

c3p0的一个示例:

<spring:bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <spring:property name="driverClass" value="${JDBC.driver}"/>
  <spring:property name="jdbcUrl" value="${JDBC.URL}"/>
  <spring:property name="user" value="${JDBC.user}"/>
  <spring:property name="password" value="${JDBC.password}"/>
  <spring:property name="minPoolSize" value="5"/>
  <spring:property name="maxPoolSize" value="20"/>
</spring:bean>

看见https://help.mulesoft.com/s/article/Spring-based-datasources更多示例

 类似资料:
  • 问题内容: 我正在尝试编写一个程序以在eclipse中连接到MySQL数据库,但出现错误 “ java.sql.SQLException:找不到合适的驱动程序” 。 Java代码是: } 控制台选项卡中的输出为: 我已经使用了MySQL Connector / J。将其解压缩到MySQL安装目录中,并将jar文件添加到CLASSPATH中。 另请参阅此图像。有一个 !在项目根目录上标记。image

  • java。sql。SQLException:找不到适合jdbc的驱动程序:h2:tcp://localhost/当我尝试使用java web应用程序连接到h2数据库时,抛出了~/ZadatakDB。 我可以使用H2控制台没有任何问题,ping是成功的。 我还将h2-1.3.176 jar文件添加到库和WEB-INF/lib中。 下面是我用来连接的Java方法: 我会错过什么? 我还将添加Stack

  • 我的一些代码有问题,我已经搜索并尝试了我所知道的一切,但没有任何运气。 场景: > 应用程序检查JDBC驱动程序是否存在,在本例中是H2驱动程序(org.H2.driver) 如果不存在,应用程序将下载JDBC驱动程序并将其添加到类加载器中,如下所示:(注意:storageDataManager是我用于SQL方法的一个类) 当Storage ageDataManager运行第一个查询时,它会尝试与

  • 问题内容: 这是错误: 怎么了 问题答案: 您需要将驱动程序加载到某个地方。 您将在程序的类路径中需要postgresql驱动程序.jar文件。

  • 我已经检查了这个问题的所有消息,但它是一样的,它不起作用。我必须用java连接到sql服务器2008数据库,我已经添加了sqljdbc4.jar但什么也没有。 我做的不好,如果你还需要什么,请告诉我。 我收到这条消息: Java语言sql。SQLException:未找到适合jdbc的驱动程序:sqlserver://xxx.xxx.xxx.xxx:1433;databaseName=ccis;用

  • 我使用的是用于MariaDB的连接器,但它不起作用。 下面是连接代码: 我得到: 除了将其作为外部jar添加到库之外,我还将其作为驱动程序添加到NetBeans(服务)中的数据库中。此外,如果我删除,它也不能正常工作。