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

Java Spring Boot 2.0 JNDI属性值未从应用程序测试属性文件加载,java,spring,spring-boot,jndi,spring-boot-test,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.

我正在尝试运行在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>
尝试直接将静态值放入bean初始化中,它工作正常,甚至应用程序在application.properties中提到的默认配置下也工作正常


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

请尝试将TestPropertySource注释更改为:

<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>
@TestPropertySource(locations=“classpath:application test.properties”)
@ActiveProfiles(“test”)
添加到测试类中

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

从项目中删除XML配置,并尝试创建每个bean注释驱动

使用@value为每个变量赋值,或使用@value创建单独的类

 @Configuration
 public class TestConfiguration {

@Bean(name = "publishJNDITemplate")
public JndiTemplate publishJNDITemplate() {
    final Properties environment = new Properties();
    environment.put(Context.INITIAL_CONTEXT_FACTORY, factoryIntial);
    environment.put(Context.PROVIDER_URL, providerUrl);
    environment.put(Context.SECURITY_PRINCIPAL, securityPrincipal);
    environment.put(Context.SECURITY_CREDENTIALS, securityCredentials);
    environment.put(narfeedTopics, destination);
    return new JndiTemplate(environment);
}

}

你到底打算做什么?如果您想在测试中使用相同的主应用程序属性,您不需要任何更改(正如您在文章中所观察到的)。xml的用途是什么?您是否仅为测试而尝试添加/重写属性?我想从属性文件初始化xml文件中的属性值您已经有了属性文件。为什么要初始化和使用xml?如果需要测试属性,请使用应用程序测试属性。抱歉,我不理解您的要求。我正在使用application-test.properties文件。实际上,仅此JNDI属性初始化存在问题,其他属性加载良好。您能给我一个示例吗?已经提到此代码,此注释将用于初始化用@Value annotationAlready注释的值。尝试将此作为解决方案,但特定的此属性仅未初始化。其他XML属性正在初始化。请尝试删除
@ContextConfiguration
@TestPropertySource
注释和
classes={App.class}