springboot es索引@Document通过动态加载bean实现动态改变

这篇具有很好参考价值的文章主要介绍了springboot es索引@Document通过动态加载bean实现动态改变。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:elasticsearch中,每天的数据放在当天的索引中,如2022.08.23。现有一个服务,定时从es中将数据拉取到mysql数据库中存储。

更新:可以通过SPEL进行动态注入

//es实体
@Document(indexName = "#{ T(com.xxx包名.xxx.xxx类名).xxx方法() }")

=========================================================================

考虑的点:java中es映射实体需要@Document注解指定连接的elasticsearch索引,需要动态修改@Document中indexName字段来指定索引。可以通过注入bean的方式实现,通过以下代码来获取索引名。

//es实体
@Document(indexName = "#{@esIndex}")
//通过配置类,注入bean

@Configuration
public class EsIndexConfig {


    /**
     * es 索引
     * @return
     */
    @Bean(name = "esIndex")
    public static String index(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        String date = sdf.format(new Date());
        System.out.println(date);
        return "prod_" + date;
    }
}

问题:bean默认只有在服务启动时加载一次,即服务一旦启动,第二天从这个bean中取的仍然是昨天启动时的内容。现需要在第二天时,我们从bean中获取的是当天的时间,如何实现?

实现:通过bean的销毁与重载实现。

    @Scheduled(cron = "0 0/1 * * * ?")
    public void pullNetLog(){
        /**
         * 由于索引每天都会改变,可以通过注入bean的方式在es映射实体的@document中获取索引
         * 但是bean默认只有在服务启动时加载
         * 若需动态改变bean,设置定时任务,销毁这个bean之后再重新加载
         */
        //获取上下文
        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
        //销毁指定实例 esIndex是bean实例名称 name="esIndex"
        defaultListableBeanFactory.destroySingleton("esIndex");
        //按照旧有的逻辑重新获取实例,EsIndexConfig是我自己逻辑中的类
        String index = EsIndexConfig.index();
        //重新注册同名实例,这样在其他地方注入的实例还是同一个名称,但是实例内容已经重新加载
        defaultListableBeanFactory.registerSingleton("esIndex",index);

springboot定时任务,销毁bean后再重新加载文章来源地址https://www.toymoban.com/news/detail-550263.html

到了这里,关于springboot es索引@Document通过动态加载bean实现动态改变的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射

    目录 准备工作 添加相关依赖 在yml中配置elasticsearch 主要内容 实体类 ElasticSearch配置类 测试 确认当前没有counter索引 启动spring 再次查询counter索引​ 在测试类中输出counter索引的映射 官方文档 要注意版本对应关系 spring官方文档中有版本对照表 目前我使用的都是最新的版本,

    2024年02月03日
    浏览(64)
  • SpringBoot+Elasticsearch按日期实现动态创建索引(分表)

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: SpringBoot+Elasticsearch按日期实现动态创建索引(分表) ⏱️ @ 创作时间: 2023年02月19日 SpringBoot+Elasticsearch,通过 @Document 注解,利用EL表达式指定到配置文件,实现动态生成

    2023年04月08日
    浏览(37)
  • SpringBoot如何让业务Bean优先于其他Bean加载

    本博客原文地址:https://ntopic.cn/p/2023090901/ 源代码先行: Gitee本文介绍的完整仓库:https://gitee.com/obullxl/ntopic-boot GitHub本文介绍的完整仓库:https://github.com/obullxl/ntopic-boot 今天走读一个应用程序代码,发现一个有趣的现象:有多个不同的业务Bean中均依赖了一个参数工具类Para

    2024年02月09日
    浏览(62)
  • springBoot bean的多种加载方式

    1、通过xml 2、通过注解@Component及其衍生注解@Controller、@Service、@Repository定义bean     例子:         @Component        public void Car{        } 3、使用@Configuration定义成一个配置类      @Configuration       public void Car{        } 4、实现FactoryBean        例子:         5、加载

    2024年02月06日
    浏览(44)
  • 通过es索引生命周期策略删除日志索引

    在es 7.x版本之后,多了个索引生命周期的概念,可以一系列的设置,给新生成的索引绑定生命周期策略,到期后,索引自动删除。 也可以通过linux定时任务实现,请查看另一篇文章《通过linux定时任务删除es日志索引》 创建索引生命周期策略 创建索引模板,与生命周期策略绑

    2024年02月09日
    浏览(49)
  • ES实战:通过kibana配置滚动索引

    步骤在官网有明确的描述,按照步骤一步一步操作,就可以实现。 官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-index-lifecycle-management.html 英语溜的直接看官网哈。 下面我们按照官网的配置指南一步步操作。 1、创建生命周期策略 点击创建进入生命周

    2024年01月22日
    浏览(37)
  • 通过linux定时任务删除es日志索引

    项目用上了elk,产生的日志索引要定时,其一个方法,通过linux定时任务,调用es接口删除索引。 es 7.x后版本,可能设置索引生命周期策略,来实现自动删除索引,不受于索引名称格式,参考《通过es索引生命周期策略删除日志索引》

    2024年02月09日
    浏览(49)
  • SpringBoot3.0整合RocketMQ时出现未能加载bean文件

    问题 APPLICATION FAILED TO START Description: Field rocketMQTemplate in com.spt.message.service.MqProducerService required a bean of type ‘org.apache.rocketmq.spring.core.RocketMQTemplate’ that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider

    2024年02月12日
    浏览(39)
  • springboot整合ES索引引擎

    1.创建springboot工程并导入相关的依赖 2.3.12.RELEASE 2.创建一个配置类,返回 RestHighLevelClient 修改一下版本 创建路径config包下的ESconfig类 3.测试 在Test中测试 结果: 判断索引是否存在 结果: 删除索引 结果: 在索引中添加文档 在entity包创建celebrity实体类 结果: 根据id查询文档内容 结

    2024年02月11日
    浏览(41)
  • es elasticsearch 九 索引index 定制分词器 type结构后期弃用原因 定制动态映射 动态映射模板 零停机重建索引

    目录 索引index 定制分词器 Type底层结构及弃用原因 定制 dynamic mapping 定制dynamic mapping template 动态映射模板 零停机重建索引 生产环境应该度别名数据 索引index Put /index Stings 分片 Mapping 映射 Aliases 别名 增加 Put my_index2 {        \\\"settings\\\":{           \\\"number_of_shards\\\":3,      

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包