Java Spring Boot 2.0 JNDI属性值未从应用程序测试属性文件加载
我正在尝试运行在application-test.properties文件中配置的测试用例和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.
@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}