Java Spring引导中的外部配置和一次性测试
Spring boot具有配置功能,这意味着Java Spring引导中的外部配置和一次性测试,java,spring,properties,spring-boot,Java,Spring,Properties,Spring Boot,Spring boot具有配置功能,这意味着您可以在不同的环境中使用相同的应用程序代码 您可以在jar中绑定application.properties,该jar提供 一个合理的默认名称。在生产中运行时 可以在jar之外提供application.properties 覆盖名称;对于一次性测试,您可以使用 特定命令行开关: 一次性测试实际上意味着什么 如何在不同的环境中使用相同的应用程序代码 一次性测试 我发现,通常在Spring引导的环境中,所提到的“一次性测试”倾向于切换活动配置文件。例如,
您可以在不同的环境中使用相同的应用程序代码
您可以在jar中绑定application.properties,该jar提供
一个合理的默认名称。在生产中运行时
可以在jar之外提供application.properties
覆盖名称;对于一次性测试,您可以使用
特定命令行开关:
一次性测试 我发现,通常在Spring引导的环境中,所提到的“一次性测试”倾向于切换活动配置文件。例如,当我在本地运行应用程序时,我通常使用以下命令:
java -jar myapp.jar --spring.profiles.active=scratch
这激活了我的“scratch”配置文件,它建立了一个内存中的数据库,并将一些基本测试数据导入其中。我有一个小的run.sh
脚本,我把它签入Git,其中包括了这个脚本
这就是我在本地机器上玩时要激活的配置文件。但是,对于偶尔的一次性测试,我可能希望在一个更永久的数据库上运行我的应用程序。要做到这一点,我只需要调整我的命令行中的活动配置文件,就像这样
java -jar myapp.jar --spring.profiles.active=sqlserver
myapp/
config/
application.properties
myapp.jar
这将激活my config目录中的应用程序sqlserver.properties
文件,并设置由SQL Server数据库支持的本地运行的Spring引导应用程序。这是一次性的,因为我不打算将其用作默认的构建数据库连接
在不同环境中运行相同的应用程序代码
这为在不同环境中使用“相同的应用程序代码”提供了基础。假设您已经构建了一个示例Spring引导应用程序,您应该注意到该构建创建了一个
.jar
文件。其思想是将相同的.jar
文件部署到所有环境中。这是一件好事,因为如果您已经在一个环境中测试了您的应用程序,并且希望升级到生产环境,那么您肯定希望确信您正在部署的代码与刚才测试的代码相同吗
但是,很明显,您的每个环境都有不同的需求。在构建时,您可能希望使用内存中的数据库。但是,在集成测试环境中,您可能需要连接到物理数据库,如MySQL、Oracle或SQL Server。您可能有单独的测试和生产数据库。每个环境可以连接到不同的RabbitMQ集群
Spring Boot通过外部化配置来支持这一点。它将自动在应用程序根目录中名为config
的目录中查找属性。i、 你可以像这样创建一个目录结构
java -jar myapp.jar --spring.profiles.active=sqlserver
myapp/
config/
application.properties
myapp.jar
。。。每个环境中唯一需要不同的是application.properties
,在这里,您可以指向不同的数据库、LDAP目录、电子邮件系统、消息代理或每个环境中不同的其他内容
--name
参数
如中所述,以--
开头的命令行参数将转换为应用程序属性。因此,--name
成为您可以在应用程序中访问的属性。值得注意的是,它不是启动Spring引导应用程序所必需的参数
作为旁注,
--name
在启动“NIX命令行”进程时非常常用,这样您就可以ps ax | grep Spring
并查看您的进程。通常这样你就可以杀了它。这不是Spring Boot应用程序所必需的参数,而只是您提到的示例中使用的参数。该示例通过@Value(${name}”)
注释引用它。一次性测试
我发现,通常在Spring引导的环境中,所提到的“一次性测试”倾向于切换活动配置文件。例如,当我在本地运行应用程序时,我通常使用以下命令:
java -jar myapp.jar --spring.profiles.active=scratch
这激活了我的“scratch”配置文件,它建立了一个内存中的数据库,并将一些基本测试数据导入其中。我有一个小的run.sh
脚本,我把它签入Git,其中包括了这个脚本
这就是我在本地机器上玩时要激活的配置文件。但是,对于偶尔的一次性测试,我可能希望在一个更永久的数据库上运行我的应用程序。要做到这一点,我只需要调整我的命令行中的活动配置文件,就像这样
java -jar myapp.jar --spring.profiles.active=sqlserver
myapp/
config/
application.properties
myapp.jar
这将激活my config目录中的应用程序sqlserver.properties
文件,并设置由SQL Server数据库支持的本地运行的Spring引导应用程序。这是一次性的,因为我不打算将其用作默认的构建数据库连接
在不同环境中运行相同的应用程序代码
这为在不同环境中使用“相同的应用程序代码”提供了基础。假设您已经构建了一个示例Spring引导应用程序,您应该注意到该构建创建了一个
.jar
文件。其思想是将相同的.jar
文件部署到所有环境中。这是一件好事,因为如果您已经在一个环境中测试了您的应用程序,并且希望升级到生产环境,那么您肯定希望确信您正在部署的代码与刚才测试的代码相同吗
但是,很明显,您的每个环境都有不同的需求。在构建时,您可能希望使用内存中的数据库。然而,在您的集成测试环境中,您可能需要连接到一个物理数据库,如MySQL、OracleO