【发布时间】:2018-06-13 23:20:17
【问题描述】:
我有一个带有 spring.datasource.jndi-name=java:/foo 属性的 Spring Boot 应用程序,它在 WildFly 下运行良好。
我想使用嵌入式容器运行相同的应用程序,即mvn spring-boot:run,但是虽然 WildFly 在其配置中配置了 JNDI 数据源,但嵌入式容器没有,即我得到:
org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException:
Failed to look up JNDI DataSource with name 'java:/foo'
我想我必须在某处包含一个 XML 文件来为嵌入式容器配置 JNDI 数据源,但我找不到关于此的文档。我刚刚找到了有关如何在 Java 源代码中创建 JNDI 数据源的教程,但我想避免这种情况,以便同一个应用程序可以在外部和嵌入式容器中运行。
我怎样才能做到这一点?
EDIT This answer 展示了如何在 Tomcat 中创建 JNDI 上下文,这种方式会破坏在其他容器(例如 WildFly)中运行相同的应用程序。我正在寻找一个答案,它可以让应用程序在不同容器中使用相同的源运行,例如只需使用 WildFly 中配置的相同 JNDI 资源配置嵌入式容器。
【问题讨论】:
-
请注意,我正在寻找仅配置解决方案,例如不涉及修改源(如果可能的话)。
-
将
@Profile注释添加到 TomcatEmbeddedServletContainerFactory bean 定义中,然后在通过 jvm 参数运行时启用该配置文件。这可确保当您在其他容器中部署时不会发生任何变化。嵌入式 tomcat 在运行时直接从 tomcat jars 运行,因此没有任何配置文件用于定义资源。
标签: java maven spring-boot spring-data jndi