当前位置: 首页 > 知识库问答 >
问题:

在测试期间,我如何访问Spring启动执行器

屠和洽
2023-03-14

我想在Spring Boot测试期间记录有关我的应用程序的启动信息。我已配置启动执行器并在Spring Boot“bootrun”模式下工作。但是,当我在使用TestRestTemplate进行测试期间尝试访问该执行器时,我收到404错误。

我已经编写了一个示例程序来演示这个问题。问题不在于针灸师,因为我的指标和健康执行器在同一个测试中工作。只有启动执行器。

示例代码在GitHub上

共有1个答案

容飞掣
2023-03-14

我有一个解决方案,所以我想我会张贴它。有关完整的详细信息,请参阅GitHub中的原始回购协议,并查看解决方案分支。

在Spring Boot测试期间启用应用程序启动数据收集的一种可能方法是创建ContextCustomizer。这允许您尽早进入测试环境,以记录您正在查找的所有数据。ContextCustomizer应该有一个静态BufferingApplicationStartup,将其注册为测试上下文的bean工厂中的单例bean。它还需要设置bean工厂的ApplicationStartup,因为它将在运行之前传递给SpringApplication。

以下是保存密钥的自定义程序的片段:

@Override
public void customizeContext(ConfigurableApplicationContext context, MergedContextConfiguration mergedConfig) {
    ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();

    Object possibleSingleton = beanFactory.getSingleton(BEAN_NAME);

    // The only way it wouldn't be an instance of a BufferingApplicationStartup is if it is null or we haven't
    // run yet (and it is the DefaultApplicationStartup).  In either case, jam our BufferingApplicationStartup
    // in here.
    if(!(possibleSingleton instanceof BufferingApplicationStartup)) {
        beanFactory.registerSingleton(BEAN_NAME, APPLICATION_STARTUP);
        beanFactory.setApplicationStartup(APPLICATION_STARTUP);
    }
}

当您这样做时,请确保您为您的定制器实现了良好的equals和hashCode,否则您将破坏测试上下文缓存,并且您将使用每个测试类刷新您的测试上下文。由于定制器的唯一相关部分是静态BufferingApplication ationStartup,因此我选择返回其hashcode。

最后,不要忘记将ContextCustomizerFactory添加到src/test/Resources/META-INF/spring.factories,否则其余的Spring Boot测试支持将看不到您的自定义程序。

完成所有设置后,您可以像访问任何其他执行器一样访问启动执行器endpoint。

 类似资料:
  • 我无法使用maven运行spring boot应用程序的测试。我看过很多关于这个的帖子,他们的大多数解决方案是: 将junit版本与maven surefire插件或 确保junit版本不是由预定义的 我的项目不使用父级,也不使用专家-sure-fire插件。否则,根据pom文件,我没有看到任何明显的冲突。我确实看到了 ,但这是向后兼容性的纯复古依赖性的一部分。 是什么导致了这种情况? 砰的一声

  • 所以,我的问题是,我正在尝试为我的应用程序进行单元测试。我有两个服务,我们叫它们Foo和Bar,Foo只是Bar的代理。 因此,Foo服务的路由器如下所示: 向Bar服务发出请求的处理程序如下所示: 当我这样写测试时: 它永远冻结了......嗯,我想这是因为它周围的一些协程魔法,但是因为我在这方面还是新手,我不明白这里到底发生了什么。有什么帮助吗?

  • 只是试用具有Spring功能的微纳特,并且无法访问我的/执行器endpointSpring启动v2.3.0版本和微纳特2.0.0.M3 我使用一个基本的微纳特项目- lang groovy。 然后,我添加了Spring依赖项和微纳Spring以及相关的注释处理器。 我的构建.gradle 现在如下所示 我调整了一个HelloController,如下所示 并将应用程序类标记为spring boot

  • 这并不是关于如何在Spring MVC或任何东西中处理异常。我特别需要处理spring启动时可能发生的异常,即在初始化整个应用程序上下文之前。 作为一个背景,所讨论的应用程序是一个物联网节点,允许远程访问电子设备。它内置了一个小h2数据库来保存一些数据。这些数据有时很好,但对应用程序的工作来说并不是真正必要的。 很可能应用程序运行的设备每隔一段时间就会断电一次,如果在对数据库进行写入操作时发生这种

  • 问题内容: 运行PHPUnit测试时,我希望能够转储输出,以便可以调试一两个东西。 我已经尝试了以下内容(类似于PHPUnit Manual示例 ); 结果如下: 请注意,没有预期的输出。 截至2011年9月19日,我使用的是git版本的HEAD版本。 输出: 我做错了什么吗,还是潜在的PHPUnit错误? 问题答案: 更新 刚刚意识到实现此目的的另一种方法比命令行选项要好得多: 这样,您可以随时

  • 我希望在启动Spring boot应用程序时始终运行SQL脚本。我添加了这个液化酶配置: application.yml db。变更日志主机。亚马尔 变更日志。亚马尔 data.yaml data.sql 数据库表应该填充测试数据,但事实并非如此。我看不到日志data.sql文件执行。 你知道问题出在哪里吗?