Spring Boot Test不使用jmx属性

时间:2018-02-23 15:09:31

标签: java spring spring-boot jmx

我有

的测试文章
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class Foo{
    ...
}

应该按照以下定义启动常规应用程序上下文:

@SpringBootApplication(scanBasePackages = {"de.foo", "de.bar"})
public class Application {
    ...
}

这可以按预期工作。此外,我有一个application.yml,它在两种情况下都被加载但是在运行测试时,JMX(spring.jmx.enabled)的属性没有加载或者没有被使用。

我尝试了不同的属性文件(application.yml,application-test.yml),但唯一有效的是通过

设置属性
@TestPropertySource(properties = "spring.jmx.enabled:true")

该属性在常规应用程序上下文中默认为 true

几个问题:

  1. 为什么测试类中的默认值不同?
  2. 当从application.yml加载属性时,为什么不会加载或识别属性(yml的其余部分可以工作,因此它会被加载)。
  3. 这似乎是一种已知行为,如Spring Boot Sample Data Tests中的评论所示。有没有关于这种行为的文件?

1 个答案:

答案 0 :(得分:3)

我最近遇到了同样的情况,并已打开spring-projects/spring-boot#13008来记录此行为。因此,在即将发布的1.5.13.RELEASE2.0.2.RELEASE中将添加以下对参考手册的补充:

  

当测试上下文框架缓存上下文时,默认情况下禁用JMX以防止相同的组件在同一域上注册。如果此类测试需要访问MBeanServer,请考虑将其标记为脏:

@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.jmx.enabled=true")
@DirtiesContext
public class SampleJmxTests {

    @Autowired
    private MBeanServer mBeanServer;

    @Test
    public void exampleTest() {
        // ...
    }

}