在网络应用程序中放置META-INF / services / java.sql.Driver的位置

时间:2012-04-29 04:30:42

标签: java web-applications jpa jdbc

javadoc说“要加载my.sql.Driver类,META-INF / services / java.sql.Driver文件将包含条目:my.sql.Driver”。

Web应用程序通常没有META-INF文件夹作为WEB-INF的兄弟吗?但是,JPA规范正在WEB-INF / classes / META-INF /.

中寻找persistence.xml

对于services / java.sql.Driver,哪个地方正确?

顺便说一句,我在两个地方都遇到了"No suitable Driver"例外情况。

1 个答案:

答案 0 :(得分:8)

你不应该自己提供。 JDBC驱动程序JAR文件应该已包含它。至少,如果它是JDBC 4.0兼容的驱动程序。 javadoc of DriverManager中也明确提到了这一点:

  

DriverManager方法getConnectiongetDrivers已得到增强,可支持Java标准版Service Provider机制。 JDBC 4.0驱动程序必须包含文件META-INF/services/java.sql.Driver。此文件包含java.sql.Driver的JDBC驱动程序实现的名称。例如,要加载my.sql.Driver类,META-INF/services/java.sql.Driver文件将包含条目:

     
my.sql.Driver
     

应用程序不再需要使用Class.forName()明确加载JDBC驱动程序。当前使用Class.forName()加载JDBC驱动程序的现有程序将继续工作而无需修改。

如果你没有,那么它显然不是JDBC 4.0兼容的驱动程序。您需要自己显式加载驱动程序,或升级到符合JDBC 4.0的驱动程序,或者只使用托管DataSource的容器(它还提供更多优势,例如连接池)。