Spring Boot在Log4j2初始化之前加载bean



使用这些技术。。。

  • 弹簧启动装置2.7.0
  • 弹簧启动启动器数据jpa 2.7.0
  • spring-bot-starter-log4j2.7.0

我正试图在加载log4j2-spring.xml文件之前加载@Service或@Component(以可行的为准(,但不知道如何使事件顺序发生。

我们有一个数据库,用于存储应用程序的自定义配置。我们有一个@Service,它使用JpaRepository、@Entity等访问基于数据库的数据。

我们的一些Log4j2配置依赖于存储在数据库配置中的值。因此,我们编写了一个自定义的Log4j2查找插件,希望使用我们的@Autowired@服务来查询数据库。这允许我们在log4j2XML文件中放置占位符,如下所示:

<Kafka name="LogToKafka"
topic="${spring:spring.profiles.active}-${ourprefix:${spring:ourapp.kafka.region}}-${ourprefix:${spring:ourapp.server.id}}">

在application.properties文件中,我们添加UUID作为属性值,我们的@Service使用这些值在数据库中查找配置。

spring.application.name=OurApp
ourapp.kafka.region=35a5792d-5218-44cd-87fa-052097c65b92
ourapp.server.id=9f58c5bb-e564-45d9-ae2a-0c1a082a8ac1

在我们的数据库中,这些UUID将评估为运行时值(由Log4J2和我们的应用程序中的其他组件使用(,如";美国西部";以及";dev-server-10";。

问题是,当调用Log4j2 Lookup插件的方法时,我们的@Service没有实例化,所以我们不能以这种方式查询数据库。

有没有办法确保在Log4j2初始化开始之前实例化我们的@Service?

我已经读了几十篇关于Spring Boot事件、上下文、监听器等的文章,但仍然无法找到如何做到这一点的神奇组合。

我通过代码步进发现,Log4j2初始化在Spring上下文准备好之前就开始了。所以,没有可用的豆子。听起来我需要让它初始化,然后在Spring上下文准备好后以编程方式重新初始化它。祝我好运。。。可能会变得一团糟:-(

最新更新