【问题标题】:Spring Boot: Inject bean before another from librarySpring Boot:在库中的另一个之前注入 bean
【发布时间】:2021-11-06 18:06:21
【问题描述】:

我有一个 Spring Boot 应用程序,公司在其中开发了一个以最糟糕的方式开发的库(但我无法控制)。该库使用环境变量进行配置,因此必须声明这些环境变量以使应用程序在本地运行很烦人,假设它一直是这样的:

这是一个网络过滤器:

private void checkEnvironmentVariables() {
    if (StringUtils.isBlank(System.getProperty(LibraryEnvConfNames.ENV_1)))             
        throw new Exception(System.getProperty(LibraryEnvConfNames.ENV_1));
    if (StringUtils.isBlank(System.getProperty(LibraryEnvConfNames.ENV_2)))
        throw new Exception(System.getProperty(LibraryEnvConfNames.ENV_2));
}

对于devqa 环境没有问题,因为这些环境变量注入了一个已经配置的配置映射,但对于新开发人员和普通人来说,要在本地运行它非常烦人必须声明所有IntelliJ、Eclipse 等中的这些环境变量。

我试图在每个应用程序中创建一个配置 bean 类,在执行此代码之前,它将为本地开发注入随机属性(因为实际上对于本地开发,这些变量的值并不重要)。

@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnExpression("'${spring.profiles.active}'.equals('local')")
public class LocalRequestFilterConfig {

    private static final Logger LOGGER = LoggerFactory.getLogger( LocalRequestFilterConfig.class);

    @Bean
    public void inyectLocalEnvVariables(){
        LOGGER.info( "Injecting local variables configuration" );
        System.setProperty( "ENV_1","TEST" );
        System.setProperty( "ENV_2","test" );
    }
}

关键是我不知道如何管理这些 bean 初始化的顺序。我无法添加dependsOn,因为它来自外部库,并且我不知道如何在库中的过滤器初始化之前注入我的配置。

【问题讨论】:

    标签: spring-boot configuration environment-variables javabeans


    【解决方案1】:

    您可能实现此目的的唯一方法是使用 XML 配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="beanOnOtherLib" class="com.whatever.BeanOnOtherLib" depends-on="localRequestFilterConfig"/>
        <bean id="localRequestFilterConfig" class="com.whatever.LocalRequestFilterConfig"/>
    </beans> 
    

    但老实说,我从未混合使用 XML 和基于注释的配置,所以我不确定这是否可行。尽管如此,鉴于您无法更改其他库中的代码,这是我正在考虑的唯一方法。

    【讨论】:

    • 我应该在哪里添加这个 XML?
    • 它应该被命名为beans.xml,通常,它被整齐地放置在application.yml,但是@ImportResource你可以指定它的位置。其他详细信息:baeldung.com/spring-boot-xml-beans.
    • 好的 Joao 我会试试的,我会告诉你它是否有效。谢谢,顺便说一句,我喜欢baeldung! XD
    • 它没有用:(或者至少我没能做到
    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多