java - 管道中不尊重 Micronaut @Requires 注释
问题描述
我已经构建了一个 Micronaut 应用程序,到目前为止还没有任何 CI 管道。所有构建都可以在所有开发人员计算机上完美运行,但我一生都无法让它在管道中运行。
问题是我有一个用 注释的服务@Context
,这意味着我希望它在应用程序启动时启动:
@Context
@Requires(property = "broker.subscribe.exchanges", env = { "k8s", "local" })
@ExecuteOn(TaskExecutors.MESSAGE_CONSUMER)
public class SubscriberService {
private final BrokerSubscriber subscriber;
public SubscriberService(final BrokerSubscriber subscriber) {
this.subscriber = subscriber;
}
}
这只是开始订阅许多交易所。我已添加env
到注释中以确保在运行测试时这些不会启动。如果我env
从注释中删除该属性,我会得到一个失败的测试。
在管道中运行的代码在env
注解上设置了属性,但它不受尊重。当我在管道中运行时,在没有本地设置属性./gradlew clean test
的情况下失败的完全相同的测试失败。env
有问题的测试测试一个配置对象,并且没有用 注释@MicronautTest
,但是它确实开始了ApplicationContext
:
class BrokerConfigurationTest {
private ApplicationContext ctx;
@BeforeEach
void setUp() {
final Map<String, Object> items = new HashMap<>();
items.put(getKey("server.host"), HOST);
items.put(getKey("server.port"), PORT);
items.put(getKey("server.password"), PASSWORD);
items.put(getKey("server.user"), USER);
items.put(getKey("subscribe.exchanges"), Set.of(EXCHANGE));
// Explicitly not loading anything else.
ctx = ApplicationContext.builder().packages(BrokerConfigurationTest.class.getPackageName()).properties(items).start();
// Same result:
// ctx = ApplicationContext.builder().environments("asdf").properties(items).start();
// Same result:
// ctx = ApplicationContext.run(items);
}
}
实际上起作用的是删除以下行:
items.put(getKey("subscribe.exchanges"), Set.of(EXCHANGE));
这意味着@Requires
注释在以下方面未得到满足property
:
@Requires(property = "broker.subscribe.exchanges", env = { "k8s", "local" })
使用此设置,我什至可以删除env
注释中的属性并且它可以工作。但我需要测试这个属性的行为,所以这不是解决方案。
我尝试过的不起作用:
- 禁用环境扣除
./gradlew -Dmicronaut.env.deduction=false clean test
- 在管道构建中添加环境变量集,并添加
MICRONAUT_ENVIRONMENTS
-annotation 。ci
notEnv = { "ci" }
Requires
- 上述两者同时
- 明确告诉失败的测试不要扫描他们自己的包之外的任何东西
- 将环境显式设置为测试设置以外
k8s
的其他local
设置。
到目前为止,该框架的体验超级流畅,但这让我摸不着头脑。任何关于这里可能出现的问题的意见将不胜感激。
解决方案
推荐阅读
- python - KivyMD MDSwiper 使用 ScrollView 时出现动画问题
- discord.py - 我试图创建一个加入角色功能,但它不起作用
- sql-server - 如何将日期时间从 PowerShell 输出转换为 yyyy-MM-dd HH:mm:ss 格式
- python - pandas方法交叉表的使用
- python - 使用 Token 使用 Python 调用 API
- python - 一个对装饰器函数的调用抑制另一个
- reactjs - 在两个组件之间切换时如何避免闪烁?使用 Firebase 身份验证时
- c# - 使用 LINQ 搜索文件
- html - Tailwind CSS - 创建看板
- c# - ASP.NET cosmosDB,忽略额外的元素?