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

Spring启动:更改属性占位符符号

公孙宏远
2023-03-14

在Spring Boot中更改属性占位符的前缀和后缀的最简单方法是什么?

默认值是@Value(“${some.property}”),但是这在Kotlin中看起来很难看,因为它需要转义-${something}是Kotlin中用于字符串模板的语言功能。

共有3个答案

柳奇希
2023-03-14

根据dox提供的答案中的建议,我最终得出如下结论:

public interface TokenAuthenticationConfig {

public fun apiKey() : String

}

@Component
@ConfigurationProperties(prefix = "service.api")
public open class TokenAuthenticationConfigImpl : TokenAuthenticationConfig
{
    public var apiKey : String

    constructor() {
        this.apiKey = ""
    }

    override fun apiKey(): String
    {
        return this.apiKey
    }
}

在Spring中,要求ConfigurationProperties对象遵循JavaBeans模式,因此是可变的。在我看来,配置似乎在整个应用程序生命周期中都应该是静态的,因此,与其增加关于状态推理的复杂性,不如注入不变的接口。

柳正志
2023-03-14

他们有一个新功能,使用java类注释@ConfigurationProperties。这在静态编程语言中看起来很好,并且正在重构保存。你应该试一试:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-具有外部配置类型安全配置属性

冯永长
2023-03-14

可以通过在配置中声明以下bean来自定义前缀:

@Bean
fun propertyConfigurer() = PropertySourcesPlaceholderConfigurer().apply {
    setPlaceholderPrefix("%{")
}

如果您有任何使用${...}语法的现有代码(如Spring Boot执行器或@LocalServerPort),您应该声明:

@Bean
fun kotlinPropertyConfigurer() = PropertySourcesPlaceholderConfigurer().apply {
    setPlaceholderPrefix("%{")
    setIgnoreUnresolvablePlaceholders(true)
}

@Bean
fun defaultPropertyConfigurer() = PropertySourcesPlaceholderConfigurer()

@Value(\${some.property}”)中转义美元是另一个不需要@Bean声明的可能选项。

对于配置为的Spring Boot测试@SpringBootTest(webUNEP=WebUNEP.RANDOM_PORT)可以使用@LocalServerPort而不是@Value(\${local.server.port})

@ConfigurationProperties将是一个更好的选择,特别是对于Kotlin数据类,但目前您必须将Kotlin类与可空的var属性一起使用,因为只支持getter/setter。您可以对此问题或评论投赞成票,以表明您有兴趣在SpringBoot2中获得支持。十、

 类似资料:
  • 我不明白为什么不能在Spring-Boot中向application.properties文件中注入值。外部属性添加到logging.file变量中。我有一个application.properties文件,看起来如下所示 具有相应的Spring-boot应用程序类 请注意,如果我自己注入服务器端口号,那么在注入和启动应用程序时没有任何问题。 我在这个问题上兜圈子,弄不清自己做错了什么。

  • 问题内容: 有谁知道我是否应该可以在预选赛中使用属性占位符作为表达式?我似乎无法正常工作。 我正在使用Spring 3.0.4。 XML: config.properties: 问题答案: 这可行。如果仅使用默认的spring bean名称,则可以省略服务名称。serviceA与ServiceA等 XML: Props:

  • 问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。

  • 问题内容: 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(针对应用程序和Logback)都被外部化为类路径中的标准application.properties文件。在应用程序本身中可以很好地拾取这些属性,但在logback.xml文件中不会拾取这些属性。在Spring Boot启动之前,似乎好像处理了logback.xml,因此未处理EL占位符。 以FileNameP

  • 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(应用程序和日志)都外部化到类路径中的标准application.properties文件中。这些属性在应用程序本身中可以很好地提取,但在logback.xml文件中不能提取。看起来好像是在Spring Boot启动之前处理了logback.xml,因此没有处理EL占位符。 使用FileNamePattern作为示例,在ap

  • 我有一个SpringBoot应用程序。对于Thymeleaf,对于此属性文件: 在控制器上: 在模板上: 但我在浏览器上看到: