spring 引导 boostrap bean 覆盖
spring boot boostrap bean override
在我的spring.factories
中有这样一个定义:
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
MyBootstrapConfiguration
在 MyBootstrapConfiguration
我有 :
@Configuration
public class MyBootstrapConfiguration {
@Bean
@ConditionalOnMissingBean
public ApiClient apiClient() {
return someClient;
}
}
现在在我的测试中(junit-5
和 @SpringBootTest
),我想覆盖这个 bean。请注意 @ConditionalOnMissingBean
... 如果我能以某种方式挂钩到我的 bootstrap 启动的“之前”,以提供 ApiClient
,显然不会调用该方法 apiClient
我会很高兴。
请注意 MyBootstrapConfiguration
不是我可以控制的东西 - 它对我来说是不变的。对于非 bootstrap 配置,这很容易做到,但是对于 bootstrap?
有没有办法做到这一点?
给定一个测试配置 class:
@Configuration
public class TestBootstrapConfiguration implements Ordered {
@Bean
public ApiClient testApiClient() {
return testApiClient;
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
在src/test/resources/META-INF/spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
TestBootstrapConfiguration
在我的spring.factories
中有这样一个定义:
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
MyBootstrapConfiguration
在 MyBootstrapConfiguration
我有 :
@Configuration
public class MyBootstrapConfiguration {
@Bean
@ConditionalOnMissingBean
public ApiClient apiClient() {
return someClient;
}
}
现在在我的测试中(junit-5
和 @SpringBootTest
),我想覆盖这个 bean。请注意 @ConditionalOnMissingBean
... 如果我能以某种方式挂钩到我的 bootstrap 启动的“之前”,以提供 ApiClient
,显然不会调用该方法 apiClient
我会很高兴。
请注意 MyBootstrapConfiguration
不是我可以控制的东西 - 它对我来说是不变的。对于非 bootstrap 配置,这很容易做到,但是对于 bootstrap?
给定一个测试配置 class:
@Configuration
public class TestBootstrapConfiguration implements Ordered {
@Bean
public ApiClient testApiClient() {
return testApiClient;
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
在src/test/resources/META-INF/spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
TestBootstrapConfiguration