Класс конфигурации шаблона Couchbase

У меня есть класс конфигурации для Couchbase следующим образом:

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

}

Чтобы сделать его более дружелюбным к команде, я хочу добавить отключенный параметр, который позволяет приложению по-прежнему работать, если у одного члена нет места для сидения на его локальном компьютере.

Является ли это возможным?

Нечто подобное присутствует в стандартной конфигурации дивана.

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

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

person Ishan Malhotra    schedule 22.12.2015    source источник


Ответы (2)


Вы можете использовать изящный небольшой набор аннотаций из семейства @Conditional в Spring 4. Это позволяет Spring рассматривать аннотированный метод только в том случае, если выполняется условие, описанное аннотацией.

@Conditional можно поместить в метод, объявляющий @Bean, или даже на весь класс @Configuration. В последнем случае все bean-компоненты в конфигурации, а также аннотации сканирования компонентов будут подчиняться условию.

Вы используете Spring Boot?

Если да, то хорошие новости! В Spring Boot входит множество вариантов @Conditional. Я думаю, что вам, в частности, подойдет один из них: @ConditionalOnProperty.

Не использовать Spring Boot?

(попробуй :p)

@Conditional аннотация находится в ядре Spring, но вы должны предоставить ему класс реализации Condition, поэтому вам решать кодировать условие (не слишком сложный интерфейс, но все же).

Весна старше 4.x?

Существует также более старая альтернатива @Profile аннотация из Spring 3.1, где вы должны классифицировать свою конфигурацию по профилям и активировать один конкретный профиль во время выполнения, но это менее гибко...

person Simon Baslé    schedule 22.12.2015
comment
Я бы мог использовать только @Profile. Я провел некоторое исследование и не смог найти решение Fix. Можете ли вы помочь в этом. - person Ishan Malhotra; 22.12.2015
comment
попробуйте аннотировать свой класс конфигурации, например, @Profile("couchbase"). чтобы активировать профиль, вам придется пойти другим путем от свойства (см. properties-in-spring" title="как настроить профиль с помощью свойств приложения весной"> stackoverflow.com/questions/18614849/). Обратите внимание, что вы должны придумать стратегию того, как отсутствие включенного Couchbase не сломает остальную часть вашего приложения (что, если у вас есть сервисы, например, @Inject в репозиторий?) - person Simon Baslé; 22.12.2015

попробуй это:

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

    }
    ...
}
person Guy Bouallet    schedule 22.12.2015