gpt4 book ai didi

java - 决定在运行时加载哪个 JavaConfig 类

转载 作者:行者123 更新时间:2023-11-29 03:23:31 27 4
gpt4 key购买 nike

有多个用@Configuration 注释的类,我想在顶级配置组件中决定在上下文中注册哪一个。

@Configuration
public class FileSystemDataStoreConfiguration {
public @Bean DataStore getDataStore() {
return new FileSystemDataStore(withSomeConfigProperties);
}
}

@Configuration
public class DatabaseDataStoreConfiguration {
public @Bean DataStore getDataStore() {
return new DatabaseDataStore(withSomeConfigProperties);
}
}

@Configuration
public class DataStoreConfiguration {

// Some arbitrary logic to decide whether I want to load
// FileSystem or Database configuration.

}

我知道我可以使用@Profile 在多个配置类中进行选择。但是,我已经使用配置文件来区分环境。配置类的选择与环境无关。

如何在运行时选择要加载的配置类?

我可以拥有多个 Activity 配置文件,例如“Production, WithDatabase”吗?

如果是这样,我如何添加基于属性的配置文件?

最佳答案

Spring,所以有很多方法可以做事!

如果您保留所有注释,您可以使用@ActiveProfiles 注释来启用您想要的整个配置文件集:

@ActiveProfiles(profiles = ProfileDefinitions.MY_ENABLED_PROFILE)
@ContextConfiguration(as usual from here...)

您会看到“配置文件”允许设置许多配置文件。您也不需要将配置文件存储为常量,但您可能会发现这很有用:

public class ProfileDefinitions {

public static final String MY_ENABLED_PROFILE = "some-profile-enabled";

// you can even make profiles derived from others:
public static final String ACTIVE_WHEN_MY_IS_NOT = "!" + MY_ENABLED_PROFILE;
}

使用以上所有内容,您可以根据配置文件的动态设置有选择地启用各种配置:

@Profile(ProfileDefinitions.MY_ENABLED_PROFILE)
@Configuration
@Import({these will only be imported if the profile is active!})
public class DatabaseDataStoreConfiguration {
}

@Profile(ProfileDefinitions.ACTIVE_WHEN_MY_IS_NOT)
@Configuration
@Import({if any are necessary})
public class DataStoreConfiguration {
}

关于java - 决定在运行时加载哪个 JavaConfig 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22313707/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com