java Sping Boot 配置覆盖无法正常工作

ee7vknir  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(131)

我的应用程序的Sping Boot 版本是2。6.12.我的项目对一个库有依赖性(使用spring Boot 版本2.7.11),自动配置如下:

@Configuration
@EnableConfigurationProperties({LibProperties.class})
public class LibAutoConfiguration {
    public LibAutoConfiguration() {
    }

    @Bean(
        initMethod = "checkSomething",
        destroyMethod = "release"
    )
    SomeHandler someHandler(LibProperties properties, ShutdownManager shutdownManager) {
        return new SomeHandler (properties, shutdownManager);
    }

    @Bean
    ShutdownManager shutdownManager(ApplicationContext applicationContext) {
        return new ShutdownManager(applicationContext);
    }
}

属性配置:

@ConfigurationProperties("lib")
@ConstructorBinding
public class LibProperties {
    private final int a;
    private final String b;

    public LibProperties(int a, String b) {

        this.a = a;
        this.b = b;
    }
    
    // getters
}

和Spring。工厂文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.lib.config.LibAutoConfiguration

这个库也有一个 www.example.com 路径中包含属性空值的
现在在我的Sping Boot 应用程序中,我有我的App类:

@SpringBootApplication(scanBasePackages = { com.myApp})
public class Application {

    public static void main(String[] args) {
        //blabla
    }

}

还有我的申请yml,并配置LibProperties下定义的所有属性。
应用程序在启动时失败,并出现以下情况:

Failed to bind properties under 'lib.a' to int:

    Property: lib.a
    Value: ""
    Origin: class path resource [application.properties] from myApp.jar!/BOOT-INF/lib/lib.jar - 6:0
    Reason: failed to convert java.lang.String to int (caused by java.lang.IllegalArgumentException: A null value cannot be assigned to a primitive type)

Action:

Update your application's configuration

正如您所看到的,它不会覆盖我的应用程序中的库的属性。yml,并且仍然查看打包的应用程序。如果切换到属性,则不会发生这种情况。属性文件,或者使用--spring。config.location来加载yml文件。
有人知道潜在的问题是什么吗?我希望我的app打包。yml文件来覆盖lib打包下的属性。属性文件。
谢谢

eyh26e7m

eyh26e7m1#

Spring 3.1还引入了新的@PropertySource annotation,作为向环境添加属性源的方便机制。
我们可以将此注解与@Configuration注解结合使用:

@Configuration
@PropertySource("classpath:foo.properties")
public class PropertiesWithJavaConfig {
    //...
}

相关问题