package com.aol.micro.server.async.data.writer;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import cyclops.collections.ListX;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.aol.micro.server.manifest.ManifestComparator;
import com.google.common.eventbus.EventBus;
@Configuration
public class ConfigureDataWriter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired(required = false)
private List<ManifestComparator> defaultComparators = ListX.empty();
@Value("${async.data.writer.threads:1}")
private int writerThreads = 1;
@Value("${async.data.writer.multi:false}")
private boolean multiWriterOn = false;
@Autowired
private EventBus bus;
@Bean
public AsyncDataWriter<?> defaultDataWriter() {
if (defaultComparators.size() > 0) {
System.err.println("Warning :: multiple ManifestComparators configured as Spring bean, using the first configured bean for the Default AsyncDataWriter, recommended approach is to configure your own DataWriters as needed.");
logger.warn("Warning :: multiple ManifestComparators configured as Spring bean, using the first configured bean for the Default AsyncDataWriter, recommended approach is to configure your own DataWriters as needed.");
}
return new AsyncDataWriter(
asyncDataWriterThreadPool(), defaultComparators.get(0), bus);
}
@Bean
public MultiDataWriter<?> defaultMultiDataWriter() {
if (multiWriterOn)
return new MultiDataWriter(
ListX.fromIterable(defaultComparators)
.map(mc -> new AsyncDataWriter(
asyncDataWriterThreadPool(), mc, bus)));
return new MultiDataWriter(
ListX.empty());
}
@Bean
public Executor asyncDataWriterThreadPool() {
return Executors.newFixedThreadPool(writerThreads);
}
}