Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “弹簧靴”@条件属性(值=)”;注入文字字符串_Java_Spring_Spring Boot_Kotlin_Properties File - Fatal编程技术网

Java “弹簧靴”@条件属性(值=)”;注入文字字符串

Java “弹簧靴”@条件属性(值=)”;注入文字字符串,java,spring,spring-boot,kotlin,properties-file,Java,Spring,Spring Boot,Kotlin,Properties File,我有一个Spring Boot应用程序,其中一个类被注释为@RestController,并且在我的类MyRestController.kt(kotlin)上也有@conditionalnproperty注释,如下所示: @RestController @ConditionalOnProperty(value=[“app.running mode.read-write”],havingValue=“true”,matchIfMissing=true) 类MyRestController(私有值r

我有一个Spring Boot应用程序,其中一个类被注释为
@RestController
,并且在我的类
MyRestController.kt
(kotlin)上也有
@conditionalnproperty
注释,如下所示:

@RestController
@ConditionalOnProperty(value=[“app.running mode.read-write”],havingValue=“true”,matchIfMissing=true)
类MyRestController(私有值r:MyRestService){
@GetMapping
//这里有一个端点
@邮戳
//这里有一个端点
}
我的
application.properties
如下所示:

app.running-mode.read-write=${MY_API_RUNNING_MODE_READ_WRITE}
当我有时运行我的应用程序时,它会在我的类上崩溃,该类包含此
条件属性
注释
MyRestController.kt
,我看到它说:

Could not resolve placeholder 'MY_API_RUNNING_MODE_READ_WRITE` in value "${MY_API_RUNNING_MODE_READ_WRITE}"

这应该是Azure设置的一个环境变量,但是我是否有可能错误地定义了我的
@conditionalnproperty
,以致于它注入了文本字符串(如日志中所示),而不是环境变量?(顺便说一句,它应该是布尔值
true
false

问题可能来自于您提供值的方式。由于您正在为不同的环境注入来自环境的值,因此该值可能不存在,甚至可能在环境中提供了错误的值。向veirfy检查是否正确提供。确保环境配置了键“MY\u API\u RUNNING\u MODE\u READ\u WRITE”

由于您正在从
application.properties
读取该值,请在删除“[]”后尝试按如下方式提供该值:

@RestController
@ConditionalOnProperty(value = "app.running-mode.read-write",havingValue = "true", matchIfMissing = true)

class MyRestController(private val r : MyRestService){
    @GetMapping
    // some endpoint here
    
    @PostMapping
    // some endpoint here
}

可能是应用程序启动后,正在环境中设置我的API运行模式读写。但在控制器中,如果变量未设置,则可以原谅。因此,在application.properties中,还可以添加默认值。app.running mode.read-write=${MY\u API\u running\u mode\u read\u write:defaultValue}然后,如果未设置环境变量,应用程序仍将启动,也许您可以使用shell或其他工具登录到运行它的映像中,并查看变量是否存在?@Smile我在
MY\u API\u RUNNING\u MODE\u READ\u WRITE
变量确实存在时登录到云服务器。该应用程序只是一个WAR文件,目前已崩溃,无法部署,因为它一直抛出相同的java.lang。我上面列出的例外情况,好像是注入了文字字符串。@Ole Billie,如果它真的注入了环境变量而不是某个字符串,那么我应该能够在本地运行它,并且只需在Windows中设置一个环境变量,如
MY\u API\u RUNNING\u MODE\u READ\u WRITE=true
,那么属性文件应该会将其拾取,是吗?i、 e app.running mode.read-write=${MY\u API\u running\u mode\u read\u write}问题是,除非我将.properties中的值硬核化(true或false)…否则这永远不会在本地工作。因此它只注入“${MY\u API\u running\u mode\u read\u write}”的文本字符串难道不是吗……你没有匹配属性名和环境变量名的具体原因是什么,因为它们已经非常接近了吗?是的,我实际上正在部署到Azure云,我登录到他们的远程服务器,并验证了环境变量
MY_API\u RUNNING\u MODE\u READ\u WRITE
确实存在。我甚至重新部署了我的应用程序,但它仍然失败了,这让我觉得它与环境变量是否存在无关。@en您是否在azure实例上部署了spring boot docker映像?如何设置环境变量,是否将其配置为在部署之前运行。?