你好 Stackoverflow :),
为了提供一些背景信息,我主要是独自开发一个应用程序,该应用程序使用 Cucumber 和 TestNG 运行测试。整个应用程序通过 spring boot 运行,我特别小心地允许到处并行。我现在想使用一个非常简单且易于维护的前端来扩展应用程序,该前端允许通过 GUI 执行测试运行。
带有 GUI 的 Spring 应用程序是一个单独的 @SpringBootConfiguration,它将生成另一个单独的 @SpringBootConfiguration 用于通过 GUI 启动的执行。所以我有 3 个配置:
3. 配置的执行发生在 POST 控制器方法内,看起来像这样:
CompleteableFuture.runAsync(() -> new SpringApplicationBuilder().OMITTED.run(..., ..., ...));
3. 配置当前在从 JAR 内部执行时不起作用,仅当通过 IntelliJ 执行时才起作用。当 @EnableAutoConfiguration 被激活时,它会提示找不到 spring.factories 文件。没有它根本找不到合适的来源。
这种方法可能/可行吗?或者对于我的用例是否有更好的方法?请注意,我想尽可能降低复杂性,并且实际上只需要一个简单的前端。如果我的 @ConfigurationProperties 保持不可变,我也更喜欢它。
您面临的问题可能与 Spring Boot 如何处理
classpath
以及从 JAR 文件运行与从 IntelliJ/vscode 等 IDE 运行时的资源加载有关
手动指定配置的方法:-
CompletableFuture.runAsync(() -> new SpringApplicationBuilder()
.sources(MyConfigurationClass.class)
.properties("spring.config.name=myapp")
.run(args));
如果问题仍然存在,您可能需要查看与 spring.factories 相关的确切错误消息以及资源在 JAR 中捆绑的方式(您可以使用 jar tf .jar 等工具检查 JAR 结构)。
如果不起作用尝试添加日志记录或调试语句以验证 spring.factories 文件和其他资源是否正确加载:)