SpringBoot 注解值使用指定Bean方法配置

     本人在使用 spring-data-elasticsearch 需要根据环境变量来动态设置索引的,不从配置中心获取,所以这个配置是需要代码逻辑来定义的。同样业务需要通过代码逻辑获取配置,然后指定给注解使用时,可以采用这种方式实现,下面以 ElasticSearch 示例代码:

1、定义获取配置的逻辑代码类。

public class IndexNameProvider {
	private final String prefix;
	private int idx = -1;
	private String indexName;

	public IndexNameProvider() {
		this("index-default");
	}

	public IndexNameProvider(String prefix) {
		this.prefix = prefix;
		increment();
	}

	public void increment() {
		indexName = prefix + '-' + ++idx;
	}

	public String indexName() {
		return indexName;
	}

	/**
	 * @since 4.4
	 */
	public String getPrefix() {
		return prefix;
	}
}

2、将获取配置的类定义好 Bean 交给 SpringBoot 管理

@Bean
pubilc IndexNameProvider indexNameProvider() {
    return new IndexNameProvider();
}

3、在注解中使用配置类的方法

   	@Document(indexName = "#{@indexNameProvider.indexName()}")
	@Setting(shards = 1, replicas = 0, refreshInterval = "-1")
	static class SampleEntity {
		@Nullable
		@Id private String id;
		@Nullable
		@Field(type = Text, store = true, fielddata = true) private String type;
		@Nullable
		@Field(type = Text, store = true, fielddata = true) private String message;
		@Nullable private int rate;
		@Nullable
		@ScriptedField private Double scriptedRate;
		@Nullable private boolean available;
		@Nullable private GeoPoint location;
		@Nullable
		@Version private Long version;

        // ... 省略代码
    }

从这个类指定 @Document 的 index 调用 indexNameProvider.indexName() 方法获取。

你可能感兴趣的:(springboot,java,spring,boot,elasticsearch,java)