应用程序的哪个DataSource在独立和webapp上下文(Java 7,Tomcat 7)中都使用了?

FBB*_*FBB 5 java jndi datasource desktop-application jdbc

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

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

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

  • 我是否应该在仅在独立上下文中调用的方法中执行此问题中的其他问题?但是我如何在webapp上下文中看到Tomcat已经提供了DataSource?

  • 或者我应该使用bean定义吗?但是如何在webapp上下文中使用这个bean呢?

2)其他池化DataSource实现怎么样?

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

Pau*_*gas 2

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

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

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

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

<Context>
<Resource name="jdbc/MySQLDB" ... />
</Context>
Run Code Online (Sandbox Code Playgroud)

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

Properties prop = new Properties();
prop.put("java:comp/env/jdbc/MySQLDB", ds1);
Run Code Online (Sandbox Code Playgroud)

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

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

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