Couchbase 模板配置 Class

Couchbase Template Config Class

我有一个 Couchbase 的配置 class 如下:

@Configuration
@EnableCouchbaseRepositories
public class CouchbaseConfig extends AbstractCouchbaseConfiguration{

@Value("${couchbase.serverList:127.0.0.1}")
String IPS;
@Value("${couchbase.disabled}")
boolean disabled;

private static final Logger logger = LogManager.getLogger(CouchbaseConfig.class);
@Override
protected List<String> bootstrapHosts() {
    logger.info("Array List for Couch: " + IPS);
    return Arrays.asList(IPS.split(","));

}

为了使团队更友好,我想添加一个禁用参数,如果一个成员在他的本地没有 couchbase,它允许应用程序仍然 运行。

可以吗?

普通沙发底座配置中存在类似的内容。

@PostConstruct
public void init() {
    if (disabled)
        return;

    logger.info("Opening couchbase connection.");
    try {
        cluster = CouchbaseCluster.create(Arrays.asList(hosts.split(",")));

您可以在 Spring 4 中使用来自 @Conditional 系列的一组漂亮的注释。这允许您 Spring 只有在以下描述的条件下才考虑带注释的方法符合注释。

@Conditional 可以放在声明 @Bean 的方法上,甚至可以放在整个 @Configuration class 上。在后一种情况下,配置中的所有 bean 以及组件扫描注释都将受制于条件。

你用Spring Boot吗?

如果是,那么好消息! Spring Boot 打包了很多 @Conditional 口味。我认为有一个特别适合您的需求:@ConditionalOnProperty.

不要使用 Spring 引导?

(试一试 :p)

@Conditional annotation 位于 Spring 的核心,但您必须为其提供 Condition 实现 class,因此由您编写代码条件(不是太复杂的界面,但仍然)。

Spring 早于 4.x?

还有 Spring 3.1 中 @Profile annotation 的旧替代方案,您可以在其中 class 将您的配置配置到配置文件中并在运行时激活一个特定的配置文件,但它是不太灵活...

试试这个:

...
@ConditionalOnProperty(prefix = "couchbase", name = "enabled", matchIfMissing = true)
@Configuration
@EnableCouchbaseRepositories
public class CouchbaseConfig extends AbstractCouchbaseConfiguration{
    @Value("${couchbase.serverList:127.0.0.1}")
    String IPS; 

    @Override
    protected List<String> bootstrapHosts() {
        return Arrays.asList(IPS.split(","));

    }
    ...
}