发布于 2026-01-06 1 阅读
0

像专业人士一样阅读 Spring 属性

像专业人士一样阅读 Spring 属性

配置管理很重要☝️

随着云应用开发和微服务架构的普及,需要大量的集成和连接设置,因此以清晰、有条理的方式阅读配置的必要性正在迅速增长。


传统的配置读取方式有什么问题🤷

没什么。但是,当我们想在代码中注入大量此类配置时,情况就会变得复杂混乱。

我们来看一个包含单个属性文件和测试的示例。

application.properties ⚙️

demo.test.name=testName  
demo.test.age=16
Enter fullscreen mode Exit fullscreen mode

DemoApplicationTests.java

@SpringBootTest  
class DemoApplicationTests {  
   @Value("${demo.test.name}")  
   private String name;  

  @Value("${demo.test.age}")  
   private Integer age;  

  @Test  
  void loadProperty() {  
      assertEquals("testName", name);  
      assertEquals(16, age);  
  }  
}
Enter fullscreen mode Exit fullscreen mode

现在,想象一下,如果我们有 5 个或 10 个这样的属性,那我们的代码就会变得杂乱无章,难以理解🥴

@ConfigurationProperties 来救场啦🤠

它允许我们将文件中的值注入application.properties到自定义类中。

@Component  
@ConfigurationProperties(prefix = "demo.test")  
@Setter  
@Getter  
public class DemoTestConfigs  
{  
    private String name;  
    private Integer age;  
}
Enter fullscreen mode Exit fullscreen mode
  • @Component注解用于告诉 Spring 将此类作为 bean 进行管理,并提供注入功能。
  • @ConfigurationProperties就是魔法的奥秘所在。
    • 它会在类路径中的属性文件中查找并加载以“.”开头的属性。demo.test
  • Lombok 的@Setter作用是能够@ConfigurationProperties填充类中的值DemoTestConfigs

然后我们就可以简单地将这个DemoTestConfigs豆子注入到我们的服务中了。🤝

我们来测试一下。

@SpringBootTest  
public class ConfigurationPropertiesTest  
{  
  @Autowired  
  private DemoTestConfigs demoTestConfigs;  

  @Test  
  public void loadPropertiesUsingConfigurationProperties(){  
        assertEquals("testName", demoTestConfigs.getName());  
        assertEquals(16, demoTestConfigs.getAge());  
  }  
}
Enter fullscreen mode Exit fullscreen mode

结论👇

我们已经看到,它如何@ConfigurationProperties帮助我们将类似的配置捆绑到一个组件类中,我们可以注入并使用该组件类,而不是逐个指定它们。

GitHub上的代码💻

文章来源:https://dev.to/jarjanazy/read-spring-configs-like-a-pro-1do3