当前位置: 首页 > 知识库问答 >
问题:

Spring引导 - 未找到外部属性

韦思淼
2023-03-14

我的应用程序正在尝试外部化所有项目属性,一些属性将位于我的应用程序中,而另一个属性将位于 Windows 中某处的文件夹中。

我将Spring设置为这样执行:-Spring . config . location = file:///C:\ Temp \ config \ application . properties,class path: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个答案

司空通
2023-03-14

信不信由你,属性的顺序对发现外部属性有影响。

如果我将此顺序设置为“spring.main.show_banner”是顶部的第一个,则无法找到我的属性。例如:

spring.main.show-banner=false
server.port=9043
server.session-timeout=1800 server.ssl.key-store=file://
/C:/Temp/config/localhost.jks server.ssl
.key-store-password=localhost
server.ssl.key-password=localhost

因此,如果更改为下面的顺序,一切都正常:

server . port = 9043 < br > server . session-time out = 1800 < br > server . SSL . key-store = file:///C:/Temp/config/localhost . jks < br > server . SSL . key-store-password = localhost < br > server . SSL . key-password = localhost < br > spring . main . show-banner = false

有什么原因吗?Spring Boot 需要按正确的顺序排列属性?似乎“服务器”部分必须是属性中的第一个。

谢谢。

张亦
2023-03-14

要模拟此错误,只需创建一个类来处理横幅,例如:

@Component
public class ShowBanner {

    @Value("${spring.main.show-banner:}")
    private String showBanner;

    @PostConstruct
    public void init() {
        System.out.println(showBanner);
    }
}

在这段代码中,如果您在外部属性文件中设置了属性“spring.main.showbanner=false”,则如果在服务器部分之前设置了该属性,则该横幅仍会显示在控制台中。横幅不应出现的时间。因为属性返回为空。

如果我在服务器部分后移动属性,标题就会消失,因为会返回false值。

请记住,我的应用程序属性项目是空的。

顺便说一下,即使通过Eclipse或java控制台运行也会发生:java-jarsample-1.2.3.RELEASE.jar--spring.config.location=file:///C:\Temp\config\application.properties,application.properties

为什么?

 类似资料:
  • 我有一个jar文件,它有下面的类来加载一些属性- 在我的Spring启动项目中,上面的class/jar是一个依赖项。 我如何指定在哪里寻找这个属性“公共列表”来加载我的项目? 或 我是否需要修改类/jar,并使用属性源注释指定在哪里查找这些公共列表值的属性文件? 我bootstrap.properties以下行- xyz.yaml配置服务器 通过查看我的spring boot应用程序的env属性

  • 我想在运行测试之前,我需要设置db测试环境(例如,创建表,种子用户,以便可以用凭据颁发令牌),但不确定如何运行。 下面是这个应用程序的一个典型实体: 但是,正如错误所示,我还需要生成这些oauth*表。 下面是我的src/test/resources/application. 因此,我想在运行测试之前在H2数据库中生成表(实体和oauth*),并使用单个用户(?)但似乎不知道这是如何在Spring

  • 我将在7周内浏览7个数据库。 在 PostgreSQL 中,我创建了一个具有串行venue_id列的地点表。 < code>\d场馆的输出 下一步是创建一个用外键引用venue_id的事件表。 我在尝试这个: 我得到这个错误: 怎么了?

  • 我使用自动配置(仅通过注释)运行Spring启动和kafka,并在.yaml文件中定义了道具,即: 它工作得很好,spring maps即字段group-id正确。 但是当我尝试使用相同的yaml文件手动配置Kafka(使用消费者工厂和消费者配置)时,我遇到了问题。在类中,消费者配置Kafka属性以 命名。在名称中,而不是 _ 即: 所以我不能把它们加载到map中,然后把map传递给Consume

  • 我正在启动Spring启动和激活依赖无法从这个回购https://repo.maven.apache.org/maven2下载 错误-在中心找不到工件org.activiti:activiti spring boot starter:pom:unknown(https://repo.maven.apache.org/maven2)