Spring Boot,无法从依赖项 jar 中读取 application.properties
Posted
技术标签:
【中文标题】Spring Boot,无法从依赖项 jar 中读取 application.properties【英文标题】:Spring Boot, cannot read application.properties from a dependency jar 【发布时间】:2020-07-08 13:46:19 【问题描述】:我有这种情况。我正在使用 Spring Boot 开发 REST 服务,并且我有一个依赖项 jar,这是我使用此方法作为依赖项包含的另一个 Spring Boot 项目:
https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/maven-plugin/examples/repackage-classifier.html
一切都完美编译,我可以从依赖 jar 中调用类。在依赖项 jar 中的代码中,我使用 @Value 注释从“父”项目的 application.properties 中读取值,但它始终返回 null。
如果我尝试从父项目中读取相同的值,它会起作用。
为了避免奇怪的双重属性文件,我删除了依赖jar中的原始application.properties文件,但没有任何变化。
关于如何解决这个问题的任何想法?
提前致谢。
【问题讨论】:
【参考方案1】:我能想到两个你可以尝试的选择。
#1
尝试将父 application.properties
包含在 @PropertySources
注释中。您可能必须确保两个应用程序之间的属性文件不同。在this answer中有更多描述。
#2
将父项目设置为具有可以在应用程序中注入的配置属性类,并检索必要的属性。
父项目可能有这样的类:
@Data // Part of the Lombok project, creates the getters/setters automatically
@ConfigurationProperties(prefix = "application.specific.prefix")
public class ApplicationConfig
private String someValue;
private Integer importantNumber;
您的application.properties
如下所示:
application.specific.prefix.some-value=Spring Boot is great!
application.specific.prefix.important-number=42
在您的 Spring 控制类中,您可以包含以下资源:
@Autowired
private ApplicationConfig applicationConfig;
然后你可以调用你需要的属性:
applicationConfig.getSomeValue();
Baeldung has a helpful guide to @ConfigurationProperties
【讨论】:
【参考方案2】:解决了。谢谢你的回复!
我解决了问题并在这里写下解决方案,也许它对其他人有用。
首先,我犯了一个愚蠢的错误,我忘了把bean放在@Autowired下! :-D
但是还有一件事要做,为了让父项目自动装配依赖bean,我们必须在父项目的Config类中使用@ComponentScan添加它的包。
在此之后,父项目中的所有属性都正确注入到依赖bean中。
谢谢。
最好的问候。
【讨论】:
【参考方案3】:此问题已在 this 帖子中解决。如果您正在使用 Maven,请尝试从您的主 pom.xml
中删除 <package>
标记以使用默认值(jar),并告诉 Spring-Boot 加载和读取资源。
更多关于 Maven 生命周期的信息参考here
【讨论】:
以上是关于Spring Boot,无法从依赖项 jar 中读取 application.properties的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars
如何使用spring boot plugin 2.0.x从一个具有不同依赖项的gradle项目生成2个jar
Spring Boot 无法从 Spring Cloud AWS Core 依赖项启动
Spring Boot scanBasePackages无法从依赖项中找到bean