Spring Boot - 找不到外部属性

时间:2015-06-01 22:52:28

标签: spring web spring-boot

我的应用程序正在尝试外部化所有项目属性,其中一些将在我的应用程序中,另一些将在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;

谢谢!

2 个答案:

答案 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

为什么?