我正在尝试将 postgresql 驱动程序与 tomcat 一起使用。 但是当我运行 tomcat 时,我收到 FileNotFound 异常(Class.forName(“org.postgresql.Driver”))。 tomEE 是否知道 Maven 依赖关系。 我该如何克服它
最佳答案
没有。 Tomcat/TomEE部署后不涉及Maven
如commented by Andreas ,您的 Maven 驱动的 Web 应用程序项目将生成 WAR 文件或 EAR 文件。该文件包含您可能在 POM 中配置的任何依赖项。
对于部署,您将将该 WAR 或 EAR 文件移动到 TomEE 服务器。到那时,不再有 Maven 参与。
上面的这些评论适用于您对 production 的最终部署。在开发过程中,您可能会使用 IDE例如可以调用外部的 IntelliJ/NetBeans/Eclipse web container例如 Tomcat 或 TomEE 来运行和调试您的 Web 应用程序。在这种特殊情况下,可能会涉及 Maven 设置,作为将 IDE 连接到外部 Web 容器的一部分。即使在这种特殊情况下,Tomcat/TomEE 也不知道 Maven 可能参与了其启动或配置。
JDBC 驱动程序很特殊
此外,由于类加载器问题和 JDBC 驱动程序注册过程,将 JDBC 驱动程序部署到 Tomcat、TomEE 或其他 Jakarta Servlet 容器是一件复杂的事情。一般来说,您不应该在 WAR/EAR 中捆绑 JDBC 驱动程序。
搜索 Stack Overflow 以了解更多信息。请记住TomEE建立在 Apache Tomcat 之上,因此您读到的有关 Tomcat 的大多数内容都适用。
参见:
- Where to put 3rd party libs when using Maven with Tomcat?
- To prevent a memory leak, the JDBC Driver has been forcibly unregistered
- How should I connect to JDBC database / datasource in a servlet based application?
顺便说一句,在具有 JDBC 驱动程序注册功能 ( DriverManager
) 的现代 Java 中,您 no longer need to call Class.forName
。那call is now legacy 。
数据源
提示:学习使用DataSource
由您的驱动程序提供实现。关于Postgres ,如果使用来自 jdbc.postgresql.org
的 JDBC 驱动程序,请参阅 this chapter .
PGSimpleDataSource pgDataSource = new PGSimpleDataSource();
pgDataSource.setDataSourceName("Acme Corp invoicing database");
pgDataSource.setServerName("localhost");
pgDataSource.setDatabaseName("test");
pgDataSource.setUser("testuser");
pgDataSource.setPassword("testpassword");
DataSource dataSource = pgDataSource ; // Perhaps save as an "attribute" on your web app's "context".
Ask the data source对于Connection
需要与数据库对话时对象。平时最好用try-with-resources语法。
try
(
Connection conn = dataSource.getConnection() ;
)
{
… do your database work
}
稍后您可以学习在代码库外部配置此 DataSource
信息。该配置是通过 JNDI 和命名服务器(例如 Tomcat 中内置的 LDAP 样式服务器)完成的。
关于java - tomEE 知道 Maven 依赖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59720613/