使用 spring-boot:run 时是不是可以使用 spring-boot 命令行属性?

Posted

技术标签:

【中文标题】使用 spring-boot:run 时是不是可以使用 spring-boot 命令行属性?【英文标题】:Are spring-boot command line properties available when using spring-boot:run?使用 spring-boot:run 时是否可以使用 spring-boot 命令行属性? 【发布时间】:2015-02-02 19:55:03 【问题描述】:

简短的问题:

如何配置环境配置文件,甚至只是一个替代配置文件名 弹簧启动:运行?

长版:

是的,我阅读了文档。 http://docs.spring.io/spring-boot/docs/current/reference/html/index.html

我在 src/main/resources/application-mysql.properties 中有我的应用程序配置设置:

# Specify the DBMS
spring.jpa.database = MYSQL

# Other Mysql config properties

spring.jpa.hibernate.ddl-auto=create

有一个对应的application-hsql.properties,里面包含了Hsql的同一套配置选项。 没有application.poperties

有对应的import.sql:

insert into users(name, email) values ('User One',  'one@email.com')
insert into users(name, email) values ('Two User', 'two@email.com')

单元测试仅用于检查这些用户是否存在于存储库中。

我相信,每当使用 MySql 配置运行测试时,这些行都会添加到 users 表中。当使用 hsql 运行测试时,mysql db 应该不受影响。 我在运行之间手动删除用户表,因为我想手动查看它何时存在。

1) 如果我运行 mvn test,测试使用配置的数据库:

mvn -Dspring.profiles.active=mysql clean test 

产生mysql数据库行和

mvn -Dspring.profiles.active=hsql clean test 

没有。

2) 如果我制作一个包,然后运行生成的 jar 文件,我可以指定一个配置文件名:

java -jar -Dspring.profiles.active=mysql  ./target/app.jar

3) 如果我使用 spring-boot:run 运行,只会发现 application.properties 中的属性(此测试场景中不存在)。

mvn -Dspring.profiles.active=mysql clean spring-boot:run

spring-boot:run 在启动与运行单元测试和启动 jar 时有何不同? db 配置就是一个例子,但理论上我希望能够在应用程序在本地运行而不是生产配置时指定一组开发配置。

【问题讨论】:

【参考方案1】:

该插件允许您直接指定活动配置文件(也许 3 年前不是这种情况?):

mvn spring-boot:run -Drun.profiles=mysql

【讨论】:

【参考方案2】:

Maven spring-boot 插件派生了一个新进程,因此您需要通过 jvmArguments 向它发送任何额外参数,例如:

mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=mysql"

【讨论】:

以上是关于使用 spring-boot:run 时是不是可以使用 spring-boot 命令行属性?的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot:run启动报错

从 spring-boot:run 获取命令行参数

Java解决执行mvn spring-boot:run报错jar时出错; zip file is empty

Spring Boot Maven 插件 - spring-boot:run 和优雅关闭

Spring Boot 应用程序 - 启动时间与“mvn spring-boot:run”和“java -jar”的差异

mvn spring-boot:run 导致用户'root'@'localhost'的访问被拒绝(使用密码:YES)