使用 JNDI 将外部 tomcat 的 driverClassName 获取到 spring 启动应用程序

Getting driverClassName with external tomcat using JNDI into spring boot application

我有一个 spring 启动应用程序,其数据源配置在外部 tomcat, 如何将外部 tomcat 配置的数据源的 driverClassName 获取到我的 spring 引导应用程序中。

我试着写了一些代码

PoolProperties poolProps = new PoolProperties();
Properties dbProperties = poolProps.getDbProperties();
String databaseUrl = dbProperties.getProperty("databaseUrl");

但上面代码returns中的databaseUrl为null。谁能建议我如何将 driverClassName 放入我的 java 代码中?

为什么不使用 JNDI 名称?

spring.datasource.jndi-name=<the name configured in tomcat>

您可以通过反射检索数据源的 JavaBean 属性。只需使用众多有助于内省的工具之一。

因为您已经有 spring-beans 作为依赖项,您可以使用:

final BeanWrapper accessor = PropertyAccessorFactory.forBeanPropertyAccess(dataSource);
final String url = String.valueOf(accessor.getPropertyValue("url"));

你也可以直接使用反射,但是很容易变得难以阅读:

try {
    final String value = String.valueOf(dataSource.getClass().getMethod("getUrl").invoke(dataSource));
} catch (ReflectiveOperationException e) {
    ...
}