这可能是一个有点奇怪的问题,但我不确定如何以另一种方式做到这一点。基本上,我在两个 Maven 项目之间共享连接代码。一个是 Maven Web 应用程序,另一个是常规 Maven 项目。
为了设置数据库连接上下文,我在 Maven Web 应用程序中使用 META_INF/context.xml。
但是,常规的Maven项目不会使用此文件,因此当运行获取数据源的代码时:
Context envCtx = (Context) new InitialContext().lookup("java:comp/env");
dbPool = (DataSource) envCtx.lookup("jdbc/MyAppUCP");
当然会抛出 NamingException。如何在常规 Maven java 应用程序中重用这种获取数据库连接的方法?将 META_INF/目录复制到项目中不起作用。
最佳答案
带有默认构造函数的InitialContext仅适用于托管环境(j2EE容器)。如果需要从 Java SE 进程查找 JNDI,则需要将属性对象作为参数传递给重载的构造函数。
每个应用程序/网络服务器都有自己的一组属性,需要在属性对象中设置。请参阅应用服务器的文档 ( http://docs.oracle.com/javase/jndi/tutorial/beyond/env/source.html )。
同样,从外部进程查找 JNDI 条目时会存在安全限制。
关于java - 如何在 Java SE 项目中使用 InitialContext 数据库信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660511/