Elasticsearch8.15 springboot配置类简单解释

Elasticsearch8.15 springboot配置类简单解释

0、配置类代码

java 复制代码
@Configuration
public class ElasticsearchConfig {

    // 从配置文件中读取 Elasticsearch 服务器的 URL
    @Value("${spring.elasticsearch.rest.uris}")
    private String serverUrl;

    // 从配置文件中读取用户名
    @Value("${spring.elasticsearch.rest.username}")
    private String username;

    // 从配置文件中读取密码
    @Value("${spring.elasticsearch.rest.password}")
    private String password;

    // 定义一个 Spring Bean,用于创建 ElasticsearchClient 实例
    @Bean
    public ElasticsearchClient esClient() throws IOException {

        // 创建基本身份验证,用于设置用户名和密码
        BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

        // 创建 RestClient,用于与 Elasticsearch 进行低级别通信
        RestClient restClient = RestClient.builder(HttpHost.create(serverUrl))
                .setHttpClientConfigCallback(httpClientBuilder -> {
                    // 将 BasicCredentialsProvider 配置到 HttpClient 中
                    return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                }).build();

        // 创建传输层,用于将 RestClient 与 Jackson JSON 解析器结合使用
        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());

        // 返回 ElasticsearchClient 实例
        return new ElasticsearchClient(transport);
    }
}

在 Spring 框架中,@Bean 注解用于告诉 Spring 这个方法会返回一个对象,该对象将被注册为 Spring 容器中的一个 Bean。

1. 什么是 @Bean

@Bean 注解通常用在配置类(通常带有 @Configuration 注解的类)中的方法上,用于将该方法返回的对象注册到 Spring 容器中。这样,Spring 就会自动管理这个对象的生命周期,并可以在应用的其他地方通过依赖注入(@Autowired@Inject)来使用这个对象。

2. 方法作为一个 Bean?

是的,方法也可以作为一个 Bean。在 @Configuration 类中,带有 @Bean 注解的方法会告诉 Spring 框架,这个方法返回的实例将作为一个 Bean 注册到应用程序上下文中。每次调用这个方法时,Spring 会管理这个方法返回的对象。

3. 配置类解读

上面的 ElasticsearchConfig 类是一个配置类,它使用 @Bean 注解将 esClient() 方法定义为一个 Spring Bean。这样做的结果是,Spring 会将 esClient() 方法的返回值(即 ElasticsearchClient 实例)注册为一个 Bean。随后,这个 ElasticsearchClient 对象可以通过依赖注入来被其他类使用。

4. 作用

当 Spring Boot 启动时,它会扫描带有 @Configuration 注解的类,并调用带有 @Bean 注解的方法。返回的对象会被注册到 Spring 的上下文中,随后你可以通过 @Autowired 注解将这个 Bean 注入到其他组件中。

java 复制代码
@Service
public class SomeService {

    @Autowired
    private ElasticsearchClient elasticsearchClient;

    // 这里可以使用注入的 ElasticsearchClient 进行操作
}

这样,当你需要 ElasticsearchClient 实例时,Spring 会自动创建并注入该实例,而你不需要在代码中手动实例化和管理它。

5. 总结

@Bean 注解用于注册 Spring 管理的 Bean,方法可以作为一个 Bean,这种方式常用于需要复杂初始化逻辑的对象。例如,配置第三方库的客户端(如 ElasticsearchClient)并将其注册为 Spring Bean,确保可以在其他类中复用。

相关推荐
Bear on Toilet11 分钟前
接入OpenAI无法发送请求,响应为空?Bug: C++ 接入 OpenAI 中转 API
后端·ai·bug
大橙子打游戏15 分钟前
Tokmon -- 监控 Claude Code 自己的 Token 消耗
后端
gaozhiyong081328 分钟前
深度技术拆解:豆包2 Pro vs Gemini 3—国产工程派与海外原生派的巅峰对决
前端·spring boot·mysql
Flittly40 分钟前
【SpringAIAlibaba新手村系列】(3)ChatModel 与 ChatClient 的深度对比
java·人工智能·spring boot·spring
小码哥_常40 分钟前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
后端
不能放弃治疗2 小时前
详解大模型对话 API,messages 角色 system 、user、assistant、tool
后端
hutengyi2 小时前
go测试问题记录
开发语言·后端·golang
青槿吖2 小时前
第二篇:Spring Boot进阶:整合异常处理、测试、多环境与日志,开发稳得一批!
java·spring boot·后端·spring·面试·sqlserver·状态模式
武子康2 小时前
大数据-254 离线数仓 - Airflow 任务调度与工作流管理实战
大数据·后端·apache hive
pip install USART2 小时前
容器化场景常用kubectl命令
后端·容器·kubernetes