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

s_t*_*v_e 2 java jpa web-applications jdbc

javadoc的说:"加载my.sql.Driver类中,META-INF /服务/ 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"例外.

Bal*_*usC 8

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

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

my.sql.Driver
Run Code Online (Sandbox Code Playgroud)

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

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