将 @ConfigurationProperties 绑定到用于创建 bean 的构建器
Binding @ConfigurationProperties to builder used to create bean
我正在创建多个 Caffeine 缓存,例如:
@Bean
public Cache<String, Customer> customerCache() {
return Caffeine.newBuilder()
.maximumSize(10_000)
// other config settings
.build(..);
}
现在我想使用类似 @ConfigurationProperties(prefix = "cache.customer")
的东西来设置构建器配置选项。
存在应用程序 属性 cache.customer.maximum-size: 1000
。
我可以做些什么来将 @ConfigurationProperties
映射到 Caffeine 生成器?
您可以在 CacheConfig
class(A 配置 class)之上使用 @ConfigurationProperties(prefix = "cache.customer")
,您可以在其中轻松地将应用程序属性绑定到缓存 class 通过使用 @EnableConfigurationProperties(CacheConfig.class)
。
所以现在您可以将 CacheConfig class 自动连接到您的缓存 class 并将其作为私有属性保存在您的缓存 class 中。然后你可以通过像
这样的构建器来使用这些配置
@Bean
public Cache<String, Customer> customerCache() {
return Caffeine.newBuilder()
.maximumSize(cacheConfig.getMaximumSize())
// other config settings
.build(..);
}
您可以执行类似于引导团队对 DataSourceProperties 执行的操作:
您将您的属性绑定到 属性 class,然后在该属性上使用方法 class 来创建您的构建器。
这是一个不同的示例,我们将属性和数据源绑定到同一个根:
@Bean
@ConfigurationProperties("datasource.task")
public DataSourceProperties taskDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = {"taskDataSource"}, destroyMethod="")
@ConfigurationProperties("datasource.task")
@ConditionalOnMissingBean(name="taskDataSource")
public DataSource taskDataSource() {
return taskDataSourceProperties().initializeDataSourceBuilder().build();
}
对于未来的读者,这里是我用来使用 Spring Boot 的 @ConfigurationProperties
配置 Caffeine 缓存的代码:
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
/**
* Base class for configuration of a Caffeine {@link Cache}
*/
public class CaffeineCacheProperties {
private Integer maximumSize;
// TODO: Add additional properties + getters and setters.
public Integer getMaximumSize() {
return maximumSize;
}
public void setMaximumSize(final Integer maximumSize) {
this.maximumSize = maximumSize;
}
public Caffeine initializeCacheBuilder() {
Caffeine cacheBuilder = Caffeine.newBuilder();
if (maximumSize != null) {
cacheBuilder.maximumSize(maximumSize);
}
// TODO: Configure additional properties.
return cacheBuilder;
}
}
.
import com.github.benmanes.caffeine.cache.Cache;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* The cache {@link Configuration} class.
*/
@Configuration
public class CacheConfig {
@Bean
@ConfigurationProperties("cache.customer")
public CaffeineCacheProperties customerCacheProperties() {
return new CacheProperties();
}
@Bean
public Cache<String, Customer> customerCache() {
return customerCacheProperties().initializeCacheBuilder().build();
}
// TODO: Add other caches.
}
然后添加应用程序 属性 如:
cache.customer.maximum-size: 1000
我正在创建多个 Caffeine 缓存,例如:
@Bean
public Cache<String, Customer> customerCache() {
return Caffeine.newBuilder()
.maximumSize(10_000)
// other config settings
.build(..);
}
现在我想使用类似 @ConfigurationProperties(prefix = "cache.customer")
的东西来设置构建器配置选项。
存在应用程序 属性 cache.customer.maximum-size: 1000
。
我可以做些什么来将 @ConfigurationProperties
映射到 Caffeine 生成器?
您可以在 CacheConfig
class(A 配置 class)之上使用 @ConfigurationProperties(prefix = "cache.customer")
,您可以在其中轻松地将应用程序属性绑定到缓存 class 通过使用 @EnableConfigurationProperties(CacheConfig.class)
。
所以现在您可以将 CacheConfig class 自动连接到您的缓存 class 并将其作为私有属性保存在您的缓存 class 中。然后你可以通过像
@Bean
public Cache<String, Customer> customerCache() {
return Caffeine.newBuilder()
.maximumSize(cacheConfig.getMaximumSize())
// other config settings
.build(..);
}
您可以执行类似于引导团队对 DataSourceProperties 执行的操作:
您将您的属性绑定到 属性 class,然后在该属性上使用方法 class 来创建您的构建器。
这是一个不同的示例,我们将属性和数据源绑定到同一个根:
@Bean
@ConfigurationProperties("datasource.task")
public DataSourceProperties taskDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = {"taskDataSource"}, destroyMethod="")
@ConfigurationProperties("datasource.task")
@ConditionalOnMissingBean(name="taskDataSource")
public DataSource taskDataSource() {
return taskDataSourceProperties().initializeDataSourceBuilder().build();
}
对于未来的读者,这里是我用来使用 Spring Boot 的 @ConfigurationProperties
配置 Caffeine 缓存的代码:
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
/**
* Base class for configuration of a Caffeine {@link Cache}
*/
public class CaffeineCacheProperties {
private Integer maximumSize;
// TODO: Add additional properties + getters and setters.
public Integer getMaximumSize() {
return maximumSize;
}
public void setMaximumSize(final Integer maximumSize) {
this.maximumSize = maximumSize;
}
public Caffeine initializeCacheBuilder() {
Caffeine cacheBuilder = Caffeine.newBuilder();
if (maximumSize != null) {
cacheBuilder.maximumSize(maximumSize);
}
// TODO: Configure additional properties.
return cacheBuilder;
}
}
.
import com.github.benmanes.caffeine.cache.Cache;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* The cache {@link Configuration} class.
*/
@Configuration
public class CacheConfig {
@Bean
@ConfigurationProperties("cache.customer")
public CaffeineCacheProperties customerCacheProperties() {
return new CacheProperties();
}
@Bean
public Cache<String, Customer> customerCache() {
return customerCacheProperties().initializeCacheBuilder().build();
}
// TODO: Add other caches.
}
然后添加应用程序 属性 如:
cache.customer.maximum-size: 1000