当前位置: 首页 > 科技观察

在教您如何在SpringBOOT

时间:2023-03-15 19:31:44 科技观察

中处理配置大约8年后,我目前正在使用Java+Spring重新编码。在过去的8年里,我花在编码上的时间显着增加,因为我现在担任的领导角色让我不再编写代码。话虽如此,我需要了解一定程度的编码,尤其是在Java世界中,因为这是我的大部分项目所使用的语言,除非我熟悉编码,否则我无法有效地帮助我的团队。自从我停止编码以来,发生了很多变化,我正在重新学习一切。这是我在学习新事物时将要写的许多文章中的第一篇。此外,我更多地从我的个人工作中构建了一个应用程序。我通常不能花固定的时间,这让我可以花更多的时间学习而不是试图满足现实生活中的客户项目截止日期。在本文中,我将讨论如何在SpringBoot应用程序中使用外部化配置。1.概述我们将使用SpringBoot的默认设置来创建一些配置并在我们的应用程序中读取它们。我们还将了解一种设置属性和基于YAML的配置的简单键值对方法。我更喜欢使用YAML,从现在开始我只会使用YAML基础知识。2.初始设置在执行过程中,我注意到我最终需要使用.spring-boot-configuration-processor依赖。否则我会得到一个错误并且代码无法编译。我没有找到太多关于为什么在我的研究中需要这样做的原因,但是添加这种依赖性为我解决了这个问题。我添加的第二个依赖项是Actuator,它为我们提供了一些令人兴奋的工具。这是不必要的,但如果您正在寻找调试属性并找到更多要使用的配置,我建议也添加它。<依赖>org.springframework.bootspring-boot-configuration-processor<可选>真<依赖>org.springframework.bootspring-boot-starter-actuator3.设置配置文件下面的代码是针对application.properties文件的,这是你会得到的默认格式SpringBoot#这是为了暴露Actuator的所有端点。仅在DEV中为所有人使用*management.endpoints.web.exposure.include=*#自定义属性bungie.rootPath="https://www.bungie.net/Platform"bungie.apiKey=000999888111以下是YAML格式的相同属性。bungie:rootPath:"https://www.bungie.net/Platform"apiKey:0009998881114.创建一个将读取这些配置的bean现在我们已经创建了属性,我们需要在读取属性时考虑2个用例。读取一次性属性——在这种情况下,我们可能需要创建一个需要读取一次或不能与任何其他属性一起排序的属性。在这种情况下,您可以使用@Value注释来读取它。读取一组属性-在我们的示例中,我们在“bungie”类别下确定了两个分组属性。这就是我更喜欢创建属性的方式。我不喜欢有孤儿属性,所以我们将看看如何设置它们。下面的示例将向我们展示如何创建一个.JavaBean/Configuration,它将能够读取我们的属性文件并填充对象。包io.howtoarchitect.destinyclanwars.config;导入lombok.Getter;导入lombok.Setter;导入org.springframework.boot.context.properties.ConfigurationProperties;导入org.springframework.context.annotation.Configuration;@Configuration@ConfigurationProperties("bungie")@Getter@SetterpublicclassBungieClientSettings{privateStringrootPath;privateStringapiKey;}如果您观察上面的代码块,您会注意到一些事情:我们使用@Configuration让Spring应用程序知道这是一个bean并且应该像这样初始化。@Getter和@Setter来自Lombok包,它为我们提供了默认的Getter和Setter。这些是强制性的,因为Spring应用程序总是需要这些getter和setter。@ConfigurationProperties是这里主要技巧的注解。它将遍历我们上下文中可用的所有属性并搜索任何映射的用户“bungie”。找到后,此注释将映射YAML/Properties文件值并将它们添加到我们的字符串中。5.使用属性设置好后,最后一步是在我们的应用程序中读取这些属性。我们将在另一个Springbean/服务中读取这些属性。包io.howtoarchitect.destinyclanwars.bungieclient;导入io.howtoarchitect.destinyclanwars.config.BungieClientSettings;导入org.springframework.beans.factory.annotation.Autowired;导入org.springframework.http.HttpHeaders;导入org.springframework.http.MediaType;导入org.springframework.stereotype.Service;导入org.springframework.web.reactive.function.client.WebClient;@ServicepublicclassBungieClient{privatestaticWebClient客户端;@Autowired私有BungieClientSettingsbungieClientSettings;publicWebClientgetDefaultClient(){client=WebClient.builder().baseUrl(bungieClientSettings.getRootPath()).defaultHeader(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE).defaultHeader("X-API-KEY",bungieClientSettings.getApiKey())。建造();回头客;}}您会注意到我已经将其添加BungieClientSettings为@Autowired依赖项。这会将bean注入到我的类中,当我需要访问这些属性时,我需要做的就是bungieClientSettings.getAPIKey()和bungieClientSettings.getRootPath()。结论您需要做的就是外部化您的属性。尽早设置这一点很重要,因为如果不这样做,您最终会发现许多人分散在班级中,并且转移到多个环境将变得困难。