与外部程序共享数据库连接

Sharing database connection with an external program

我们在 Web 容器 (WildFly 14) 中启动了应用程序 Foo。它通过 JNDI 以标准方式获取数据库连接。因此,连接不是在应用程序内部配置的,而是在 WildFly 中配置的。

现在,Foo 在同一台机器上启动外部程序 Bar。这个外部程序完全独立于主应用程序,但需要访问同一个数据库。 Bar 也通过管道连接到 Foo,因此将可序列化对象从一个传递到另一个不是问题。

通过直接实施,我需要配置 BarFoo.

分开的数据库访问权限

是否可以通过某种方式自动将必要的数据库连接参数从 Foo 传递到 Bar?由于我们使用两种不同类型的数据库,这也将包括 JDBC 驱动程序(Foo 从 WildFly 部署中获取它 "for free" )。加上 JDBC URL,用户名和密码。甚至自动确定其中的一些也会有所帮助。

我们控制并可以更改此设置中的几乎所有内容(FooBar 来源,WildFly 配置)。

实际上还有另外两个选择(比 JNDI 轻量级多)

  1. 您可以使用 Wildfly 的 admin REST api 读取服务器上定义的数据源设置(在 /configuration/standalone-***.xml).您的应用程序可以因此发出一个简单的(经过身份验证的)http GET 请求并解析获得的 xml.

http://localhost:9990/management/subsystem/datasources/data-source/ExampleDS?operation=resource&recursive=true&json.pretty=1

  1. 同样这些设置也被 Wildfly 在 JMX 中公开。您只需阅读它们,要么使用 JDK 的 JMX api,要么使用众多简化 JMX 查询的开源库之一。 只需 运行 一个 "jconsole",连接到进程 运行ning 您的 WF 服务器,并查找数据源的属性。 => 找到 "ConnectionUrl"、"userName" 和 "password" 属性。然后编写您的应用程序以读取这 3 个属性。

祝你好运!