Spring boot 使用JNDI在spring引导应用程序中使用外部tomcat获取driverClassName

Spring boot 使用JNDI在spring引导应用程序中使用外部tomcat获取driverClassName,spring-boot,datasource,jndi,tomcat9,Spring Boot,Datasource,Jndi,Tomcat9,我有一个spring启动应用程序,在外部tomcat上配置了数据源, 如何将外部tomcat配置的数据源的driverClassName获取到spring引导应用程序中 我试着写一些代码作为参考 PoolProperties poolProps = new PoolProperties(); Properties dbProperties = poolProps.getDbProperties(); String databaseUrl = dbProperties.getProperty(&q

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

我试着写一些代码作为参考

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

但是上面代码中的数据库URL返回null。有谁能建议我如何将driverClassName添加到java代码中吗?

为什么不使用JNDI名称

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

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

由于您已经将
Springbeans
作为依赖项,因此可以使用:

final BeanWrapper accessor=PropertyAccessorFactory.forbanpropertyaccess(数据源);
最终字符串url=String.valueOf(accessor.getPropertyValue(“url”);
您也可以直接使用反射,但很容易阅读:

试试看{
最终字符串值=String.valueOf(dataSource.getClass().getMethod(“getUrl”).invoke(dataSource));
}捕捉(反射操作异常e){
...
}

是的,我确实使用它在spring boot应用程序中配置了JNDI,但如何以编程方式获取数据源属性,如driverClassName等。您不能。那是不可能的,我怎么才能得到数据源属性,就像我说的那样。为什么要这样做?我需要创建一个显示数据源信息的healthcheck REST端点