我的应用程序正在尝试外部化所有项目属性,其中一些将在我的应用程序中,另一些将在Windows中的某个文件夹中。
我设置Spring以这种方式执行: - spring.config.location = file:/// C:\ Temp \ config \ application.properties,classpath:application.properties
如您所见,如果双方都存在相同的属性,则将保留应用程序属性(优先级顺序)。我注意到,例如,如果存在于文件夹(file://)之外,可以找到一些属性,如“server.port”,但如果我创建一个这样的“common.acronym-name”,我的项目找不到它的值。
为什么“server.port”具有与我创建的不同的行为?是否有任何配置我需要告诉Spring Boot在我的项目中看到这个外部属性?
@Value("${common.acronym-name:}") //Just find it in application classpath
private String acronymEnv;
谢谢!
答案 0 :(得分:0)
不管你信不信,属性的顺序可以找到外部属性的差异。
如果我将此设置为下面的顺序,其中“spring.main.show_banner”是顶部的第一个,则无法找到我的属性。例如:
spring.main.show横幅=假
server.port = 9043
server.session超时= 1800
server.ssl.key店内=文件:/// C:/Temp/config/localhost.jks
server.ssl.key-STORE-密码=本地主机
server.ssl.key密码=本地主机
所以,如果改为以下顺序,一切正常:
server.port = 9043
server.session超时= 1800
server.ssl.key店内=文件:/// C:/Temp/config/localhost.jks
server.ssl.key-STORE-密码=本地主机
server.ssl.key密码=本地主机
spring.main.show横幅=假
有什么理由吗? Spring Boot需要具有正确的属性吗?似乎“服务器”部分必须是属性中的第一个。
感谢。
答案 1 :(得分:0)
要模拟此错误,只需创建一个类来处理横幅,例如:
@Component
public class ShowBanner {
@Value("${spring.main.show-banner:}")
private String showBanner;
@PostConstruct
public void init() {
System.out.println(showBanner);
}
}
在此代码中,如果在外部属性文件中设置属性" spring.main.show-banner = false"如果在服务器部分之前设置横幅,则横幅仍显示在控制台中。当横幅不应出现时。因为该属性返回空。
如果我在服务器部分之后移动属性,则横幅消失,因为按预期返回false值。
请记住我的application.properties项目是空的。
顺便说一句,即使是通过Eclipse或java控制台运行它也会发生: java -jar sample-1.2.3.RELEASE.jar --spring.config.location = file:/// C:\ Temp \ config \ application.properties,application.properties
为什么?