我有一个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(","));
}
为了使其更加团队友好我想添加一个参数禁用,如果一个成员没有在他的本地使用couchbase,则允许应用程序仍然运行。
有可能吗?
这样的东西存在于普通沙发基础配置中。
@PostConstruct
public void init() {
if (disabled)
return;
logger.info("Opening couchbase connection.");
try {
cluster = CouchbaseCluster.create(Arrays.asList(hosts.split(",")));
答案 0 :(得分:0)
您可以在Spring 4中使用来自@Conditional
系列的一小组注释。这样,只有在满足注释描述的条件时,Spring才会考虑带注释的方法。
@Conditional
可以放在声明@Bean
的方法上,甚至可以放在整个@Configuration
类上。在后一种情况下,配置中的所有bean以及组件扫描注释都将受条件限制。
Spring Boot
吗?如果是,那么好消息! Spring Boot包含了很多@Conditional
种口味。我认为一个特别适合您的需求:@ConditionalOnProperty
。
(试一试:p)
@Conditional
annotation是Spring的核心,但你必须为它提供一个Condition
实现类,所以由你来编码Condition(不是太复杂的接口,但仍然)。
还有来自Spring 3.1的@Profile
annotation的旧版本,您可以将配置分类为配置文件并在运行时激活一个特定的配置文件,但它不太灵活......
答案 1 :(得分: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(","));
}
...
}