我的应用程序的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打包下的属性。属性文件。
谢谢
1条答案
按热度按时间eyh26e7m1#
Spring 3.1还引入了新的@PropertySource annotation,作为向环境添加属性源的方便机制。
我们可以将此注解与@Configuration注解结合使用: