gpt4 book ai didi

java - Spring Boot 外部配置和一次性测试

转载 作者:行者123 更新时间:2023-11-29 07:46:07 28 4
gpt4 key购买 nike

Spring Boot 有能力 externalize配置,这意味着您可以在不同的环境中使用相同的应用程序代码

You can bundle an application.properties inside your jar that provides a sensible default name. When running in production, an application.properties can be provided outside of your jar that overrides name; and for one-off testing, you can launch with a specific command line switch:

java -jar app.jar --name="Spring"
  1. 一次性测试的实际含义是什么?
  2. 如何在不同环境中使用相同的应用程序代码

最佳答案

一次性测试

我发现通常在 Spring Boot 的上下文中,所指的“一次性测试”往往与切换 Activity 配置文件有关。例如,当我在本地运行我的应用程序时,我通常使用这个命令:

java -jar myapp.jar --spring.profiles.active=scratch

这会激活我的“scratch”配置文件,它会设置一个内存数据库并将一些基本测试数据导入其中。我有一个小的 run.sh 脚本,我将其 checkin Git,其中包括该脚本。

这是我在本地机器上玩游戏时想要激活的配置文件。但是,对于偶尔的一次性测试,我可能希望针对更永久的数据库运行我的应用程序。为此,我只需要在我的命令行中调整 Activity 配置文件,就像这样......

java -jar myapp.jar --spring.profiles.active=sqlserver

这会激活我的配置目录中的 application-sqlserver.properties 文件,并设置一个本地运行的由 SQL Server 数据库支持的 Spring Boot 应用程序。这是一次性的,因为我不打算将它用作默认构建数据库连接。

在不同环境中运行相同的应用程序代码

这为“在不同环境中使用相同的应用程序代码”提供了基础。假设您已经构建了一个示例 Spring Boot 应用程序,您应该已经注意到该构建创建了一个 .jar 文件。这个想法是将同一个 .jar 文件部署到所有环境。这是一件好事,因为如果您已经在一个环境中测试了您的应用程序并希望将其推广到生产环境,那么您肯定想要确信您正在部署的代码与刚刚测试的代码相同吗?

但是,显然您的每个环境都有不同的要求。在构建时,您可能希望使用内存数据库。但是,在您的集成测试环境中,您可能希望连接到物理数据库,例如 MySQL、Oracle 或 SQL Server。您可能有单独的测试和生产数据库。每个环境可能连接到不同的 RabbitMQ 集群。

Spring Boot 通过外部化配置来支持这一点。它会自动在应用程序根目录中名为 config 的目录中查找属性。即,您可以创建这样的目录结构...

myapp/
config/
application.properties
myapp.jar

...在每个环境中唯一需要不同的是 application.properties,您可以在其中指向不同的数据库、LDAP 目录、电子邮件系统、消息代理或其他任何东西每个环境都不同。

--name 参数

Spring Boot documentation on accessing command line properties 中所述,以 -- 开头的命令行参数被转换为应用程序属性。因此 --name 成为您可以在应用程序中访问的属性。值得注意的是,它不是启动 Spring Boot 应用程序的必需参数。

作为旁注,--name 在启动 'NIX 命令行进程时非常常用,这样您就可以 ps ax | grep Spring 并查看您的进程。通常这样你就可以杀死它。它不是 Spring Boot 应用程序的必需参数,而只是您引用的示例中使用的参数。该示例通过 @Value("${name}") 注释引用它。

关于java - Spring Boot 外部配置和一次性测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640323/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com