java - Spring Boot 2.0 JNDI 属性值未从应用程序测试属性文件加载

标签 java spring spring-boot jndi spring-boot-test

我正在尝试运行在 application-test.properties 文件中配置的测试用例和 jndi 属性

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { App.class }, webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration
@TestPropertySource("classpath:/application-test.properties")
public class CheckingServiceTest {

属性文件中的一个配置

java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory
java.naming.provider.url=remote://xyz:4447,remote://xyz:4447
java.naming.security.principal=qaappmq
java.naming.security.credentials=xyz123
jms.username=qaappmq
jms.password=ixyz123
jboss.naming.client.ejb.context=true

在Xml配置文件中

<bean id="JNDITemplate" class="org.springframework.jndi.JndiTemplate">
        <constructor-arg name="environment">
            <props>
                <prop key="java.naming.factory.initial">${java.naming.factory.initial}</prop>
                <prop key="java.naming.provider.url">${java.naming.provider.url}</prop>
                <prop key="java.naming.security.principal">${java.naming.security.principal}</prop>
                <prop key="java.naming.security.credentials">${java.naming.security.credentials}</prop>
                <prop key="jboss.naming.client.ejb.context">${jboss.naming.client.ejb.context}</prop>
            </props>
        </constructor-arg>
    </bean>

在运行测试用例时抛出

Caused by: java.lang.ClassNotFoundException: ${java.naming.factory.initial}
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:72)
    at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:61)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:672)
    ... 92 common frames omitted

尝试直接将静态值放入 bean 初始化中,它工作正常,甚至应用程序也可以使用 application.properties 中提到的默认配置正常工作。

问题:属性值未在 XML 配置文件中初始化

最佳答案

添加@ActiveProfiles("test")到你的测试类

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { App.class }, webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration
@TestPropertySource("classpath:/application-test.properties")
@ActiveProfiles("test")
public class CheckingServiceTest {

关于java - Spring Boot 2.0 JNDI 属性值未从应用程序测试属性文件加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52761153/

相关文章:

java - Java 中的 awk 命令

java - 从SCDF启动任务时出现异常 "java.lang.IllegalArgumentException: Invalid TaskExecution, ID 3"如何解决?

java - 可以通过指标 :9443 port 访问 8080 端口中的 Spring WebFlux 端点

java - spring中使用xml注入(inject)依赖为什么需要setter?

java - Spring引导休息 Controller 。返回对象,包括继承属性和异常处理

spring - 如何在cloudbees上运行可执行jar文件(例如spring-boot)

Java 小程序适用于 appletviewer、Safari 和 Firefox,但不适用于 Chrome

java - 使用 Platform.runLater 禁用折叠 JavaFX 中的 Accordion

java - IntelliJ 空检查警告

java - 如何在 BDD 中创建良好的可重复日期测试?