0

我有一个 Couchbase 的 Config 类,如下所示:

@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(","));

}

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

是否可以?

普通沙发底座配置中存在类似的东西。

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

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

2 回答 2

0

您可以在 Spring 4 中使用该系列中的一组漂亮的注释。@Conditional这使您可以让 Spring 仅在满足注释描述的条件时才考虑带注释的方法。

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

你用Spring Boot吗?

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

不使用 Spring Boot?

(试一试:p)

@Conditional注释在 Spring的核心中,但您必须为它提供一个Condition实现类,因此您可以对 Condition 进行编码(接口不太复杂,但仍然如此)。

Spring 早于 4.x?

还有一种较旧的Spring 3.1@Profile注释替代方案,您可以将配置分类为配置文件并在运行时激活一个特定的配置文件,但它不太灵活......

于 2015-12-22T09:53:31.070 回答
0

试试这个:

...
@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(","));

    }
    ...
}
于 2015-12-22T11:09:45.390 回答