首页 > 解决方案 > 与外部程序共享数据库连接

问题描述

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

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

通过简单的实现,我需要将Bar与Foo分开配置对数据库的访问。

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

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

标签: javajakarta-eejdbcwildfly

解决方案


实际上还有其他两种选择(比 JNDI 轻得多)

  1. 您可以使用 Wildfly 的管理 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”,连接到运行 WF 服务器的进程,然后查找数据源的属性。=> 找到“ConnectionUrl”、“userName”和“password”属性。然后编写您的应用程序以读取这 3 个属性。

祝你好运 !

在此处输入图像描述


推荐阅读