Spring Boot 使用记录 clas 将元数据存储在 .yml 文件中不起作用

Spring Boot using record clas to store metadata in .yml file not work

提问人:Randy T 提问时间:8/11/2023 更新时间:8/14/2023 访问量:35

问:

我正在尝试读取 .yml 文件中的元数据,然后在记录类中注入值,最后在其他类中使用这些值。

我有一个 application.yml 文件,其值为:

teamson:
    clientId: 123
    clientSecret: 456
    tenantId: 789

hava a GaphConfig.java :

@ConfigurationProperties(prefix = "teamson")
public record GraphConfig(String clientId, String clientSecret, String tenantId) {
}

并希望在tryRead.java中使用元数据值:

@Component
public class tryRead {

@Autowired
private static GraphConfig cofig;

    public static void main(String arts[]){
    
       System.out.println(cofig.clientId());
    
    }

}

但总是出现错误:无法调用“com.xxx.GraphConfig.clientId()”,因为“com.xxx.tryRead.cofig”为空

我包括了 depedency:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

我使用 JAVA 17 和 SpringBoot 版本 2.7.14

我想要 System.out.println(cofig.clientId());在类 tryRead 中可以读取在 properties.yml 中设置的 id 也可以在其他春季课程中重复使用

java spring-boot 依赖注入 自动连线

评论

0赞 FilipRistic 8/11/2023
您的问题是您正在尝试注入到静态场,这是不可能的。@Autowired
0赞 Kayaman 8/11/2023
为什么 a 有 main 方法?@Component
0赞 Randy T 8/12/2023
@FilipRistic感谢您的回复,我实际上注意到了,但是,尽管我使用了一个类并使用构造函数注入了clientId,然后通过一个测试它,但它也不起作用,仍然读取null。相反,如果我自动连接另一个组件,该组件直接在成员中设置了 id 值,例如:,这意味着还有其他原因导致读取 .yml 数据失败,则有效。@RestController@GetMapping@autowiredpublic String coachid = "123";
0赞 Randy T 8/12/2023
@FilipRistic感谢您的回复,只是想尝试运行任何方法并打印出来,看看 iD 是否可以自动连接并从 .yml 读取

答:

0赞 Randy T 8/14/2023 #1

最后。。。我发现了这个问题发生了什么,这是我的错别字:“appication.yml”,因为Spring Boot只能读取名称“application.yml”。

然而,这引出了另一个问题,我一直在寻找答案:我有没有办法读取任何命名的yml文件?例如,如果我想使用“config-dev.yml”或“config-prod.yml”来读取开发版本或生产版本具有相同属性名称的不同值。

评论

0赞 Kirby 8/16/2023
可能最好在新帖子中提出您的新问题