5

我构建了一个具有独立“核心”层的应用程序,该层也用于构建 webapp(它是一个 Maven 多模块项目,具有一个“核心”模块和一个“webapp”模块,它依赖于“核心”模块)。它使用 MySQL 数据库。我尝试实现一个DataSource在两种上下文中都可以的(在独立上下文中只有 1 个连接就足够了)。

在阅读了很多关于 DataSources 的文档之后,我不得不说我有点迷茫。我得出的结论是,也许我应该使用Tomcat JDBC Connection Pool。我的问题是:

1)在独立上下文中,我应该如何提供使用 DataSource 的配置,知道此配置将由 Tomcat 在 webapp 上下文中提供(独立配置不应覆盖 Tomcat 配置)?

  • 我应该在仅在独立上下文中调用的方法中执行其他问题中的类似操作吗?但是如何在 webapp 上下文中看到 Tomcat 已经提供了数据源?

  • 还是我应该使用 bean 定义?但是这个 bean 怎么不会在 webapp 上下文中使用呢?

2) 其他池化 DataSource 实现呢?

结论:是的,我迷路了,我不知道 DataSource 使用的“黄金标准”是什么。谢谢您的帮助。

4

1 回答 1

2

您可以在核心模块中查找数据源。您需要在 Tomcat中为 webapp 模块创建 JNDI 数据源,并为独立模块创建独立 JNDI 支持

例如,Connection从数据源获取数据在两种情况下都是相同的:

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB");
Connection conn = ds.getConnection();

但是数据源的配置是不同的。在 Tomcat 中,您将在链接中的示例中看到类似的内容。

<Context>
<Resource name="jdbc/MySQLDB" ... />
</Context>

独立中的资源名称必须与独立中的ctx.lookup调用相同:

Properties prop = new Properties();
prop.put("java:comp/env/jdbc/MySQLDB", ds1);

独立模块中的InitialContextFactory必须独立于核心模块创建。

关于com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource看到这个。Tomcat 使用 Apache Software Foundation 的 DBCP 库,您也可以在自己的非 Java EE 代码中使用它:http: //jakarta.apache.org/commons/dbcp/

对于 Tomcat 中的 JDBC 连接池,请参阅,对于 Apache DBCP 池,请参阅

于 2013-03-04T23:33:26.580 回答