【问题标题】:Couchbase Template Config ClassCouchbase 模板配置类
【发布时间】:2015-12-22 07:53:27
【问题描述】:

我有一个 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(",")));

【问题讨论】:

    标签: spring couchbase spring-data-couchbase couchbase-java-api


    【解决方案1】:

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

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

    你使用Spring Boot吗?

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

    不使用 Spring Boot?

    (试一试:p)

    @Conditional annotation 在 Spring 的核心中,但您必须为它提供一个 Condition 实现类,因此由您来编写 Condition(不是太复杂的接口,但仍然如此)。

    Spring 早于 4.x?

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

    【讨论】:

    • 我只能使用@Profile 我做了一些研究,但无法找到修复解决方案。你能帮忙吗?
    • 尝试使用 @Profile("couchbase") 来注释你的配置类。要激活配置文件,您必须从该物业走不同的路线(请参阅stackoverflow.com/questions/18614849/…)。请注意,您必须想出一个策略,说明不启用 Couchbase 不会破坏应用程序的其余部分(例如,如果您有 @Inject 存储库的服务怎么办?)
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2018-12-14
      相关资源
      最近更新 更多