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

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”例外。

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

DriverManager方法getConnectiongetDrivers已得到增强,可支持Java Standard Edition 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 (它提供了更多优势,例如连接池)。