我构建了一个应用程序,它有一个独立的“核心”层,也用于构建一个 webapp(它是一个 Maven 多模块项目,有一个“核心”模块和一个“webapp”模块,它有对“核心”模块的依赖)。
它使用 MySQL 数据库。我尝试实现一个 DataSource
,它在两种上下文中都适用(在独立上下文中只有 1 个连接就足够了)。
在阅读了很多关于 DataSources 的文档之后,我不得不说我有点迷茫了。我得出的结论是,也许我应该使用 Tomcat JDBC Connection Pool .我的问题是:
1) 在独立上下文中,我应该如何提供使用数据源的配置,知道此配置将由 Tomcat 在 webapp 上下文中提供(因此独立配置不应覆盖 Tomcat 配置)?
我应该做类似 in this other question 的事情吗?在仅在独立上下文中调用的方法中?但是如何在 webapp 上下文中看到 Tomcat 已经提供了 DataSource?
或者我应该使用 bean 定义吗?但是这个 bean 怎么不会在 webapp 上下文中使用呢?
2) 其他池化数据源实现呢?
我不应该只使用 MySQL DataSource 吗? ?
我读到在 Java EE 7 中,数据源更易于使用 (https://blogs.oracle.com/arungupta/entry/default_datasource_in_java_ee)。那么,Java 7有什么突破吗?我绝对应该在 Java 7 中使用的新数据源提供程序?
结论: 是的,我迷路了,我不知道 DataSource 使用的“黄金标准”是什么。感谢您的帮助。
最佳答案
您可以在核心模块中查找数据源。您需要创建 JNDI Datasource in Tomcat对于 webapp 模块和 Standalone JNDI support用于独立模块。
例如从数据源获取 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>
standalone 中的资源名称必须与 standalone 中的 ctx.lookup
调用相同:
Properties prop = new Properties();
prop.put("java:comp/env/jdbc/MySQLDB", ds1);
独立模块中的InitialContextFactory
必须独立于核心模块创建。
关于 com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
参见 this . Tomcat 使用 Apache 软件基金会的 DBCP 库,您也可以在自己的非 Java EE 代码中使用这些库:http://jakarta.apache.org/commons/dbcp/
关于java - 应用程序的哪个数据源同时用于独立和 webapp 上下文(Java 7、Tomcat 7)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212600/