我有一个项目中有两个不同的运行时(一个是lambda,一个是fargate)。我有两个不同的配置,但只希望运行一个。
如何排除和包含配置类?这似乎不起作用:
@SpringBootApplication(exclude = DynamoConfig.class)
而且由于它们位于相同的“路径”中,因此我不能仅排除软件包
com.cat.lakitu.runner
因为“持久”包也将被排除。
我会在两个配置上使用@ConditonalOnProperty注释,并在其中一个运行时的主运行中添加属性,以lambda为例(因为你说每次运行都使用不同的)
public static void main(String[] args) {
SpringApplication application = new SpringApplication(DemoApplication.class);
Properties properties = new Properties();
properties.put("lambda.application", "true");
application.setDefaultProperties(properties);
application.run(args);
}
然后,在运行时为 lambda 时所需的配置上,您可以这样注释 Bean
@ConditionalOnProperty(
value="lambda.application",
havingValue = "true")
public class DyanmoConfig {
然后,另一个bean可以具有以下条件属性
@ConditionalOnProperty(
value="lambda.application",
havingValue = "false",
matchIfMissing= true)
public class PersistConfig {
这样,您只需要在两个主窗口中的一个窗口中以编程方式设置属性
有不同的解决方法。您选择哪一个取决于您的特定用例和需求。
使用配置文件:https://www.baeldung.com/spring-profiles
例子:
@Component
@Profile("runtime1")
public class DynamoConfig
使用条件 bean(多种可能性):https://reflectoring.io/spring-boot-conditionals/
@Component
@ConditionalOnProperty(
value="module.enabled",
havingValue = "true",
matchIfMissing = true)
public class DynamoConfig