Spring Boot 如何application.properties在@Scope和@Collection注解中传递来自www.example.com的值?

14ifxucb  于 2022-12-23  发布在  Spring
关注(0)|答案(1)|浏览(170)

我想为从Couchbase 6.X到7.X的迁移做准备。为此,我想为我的集群配置范围和集合。在spring-data-couchbase的文档中,我看到我只需要在我的存储库中添加@Scope和@Collection。

package xxx.couchbase;

import xxx.MyDocument;
import org.springframework.data.couchbase.repository.Collection;
import org.springframework.data.couchbase.repository.CouchbaseRepository;
import org.springframework.data.couchbase.repository.Scope;
import org.springframework.stereotype.Repository;

@Repository
@Scope("_default")
@Collection("_default")
public interface MyDocumentRepository extends CouchbaseRepository<MyDocument, String> {
}

我想做的是:

package xxx.couchbase;

import xxx.MyDocument;
import org.springframework.data.couchbase.repository.Collection;
import org.springframework.data.couchbase.repository.CouchbaseRepository;
import org.springframework.data.couchbase.repository.Scope;
import org.springframework.stereotype.Repository;

@Repository
@Scope("${couchbase.scope}")
@Collection("${couchbase.collection}")
public interface MyDocumentRepository extends CouchbaseRepository<MyDocument, String> {
}

application.properties:

couchbase.scope=_default
couchbase.collection=_default

后一种配置不起作用,因为注解中的字符串值没有被解析,而是照字面理解的。我使用的是Sping Boot 2.7.3版,spring-boot-starter-data-couchbase 2.7.3版。
是否有其他方法将值从www.example.com传递application.properties到注解?

6ju8rftf

6ju8rftf1#

我看不出spring Boot 有什么方法可以用application.properties中的值填充注解的参数。
但是您可以从www.example.com中的值填充变量application.properties,如下所示:

@Value("${scopeName}")
private String scopeName;

@Value("${collectionName}")
private String collectionName;

然后定义存储库以扩展DynamicProxyable

public interface AirportRepository extends CouchbaseRepository<Airport, String>, DynamicProxyable<AirportRepository>{...}

然后获取一个存储库对象,将该范围和集合作为默认值:

List<Airport> airports = airportRepository.withScope(scopeName).withCollection(collectionName).findByName(iata);

参见https://docs.spring.io/spring-data/couchbase/docs/4.4.6/reference/html/#couchbase.collections

相关问题