首页 > 解决方案 > Maven spring-boot:run 目标:简化命令行

问题描述

我需要简化一个丑陋且没有优雅的命令行:

mvn -pl rep-digital-api spring-boot:run -Dspring.application.json='{ "server.port": 8081, "spring": { "datasource": { "url": "jdbc:postgresql://localhost:5432/frontoffice", "username": "frontoffice", "password": "password", "driverClassName": "org.postgresql.Driver" }, "redis": { "host": "localhost", "port": 6379 } }, "api.url-oauth": "http://localhost:8081/oauth/token", "url-ui": "http://localhost:3000", "document.upload-dir":"/home/jcabre/data/upload", "document.pending-key":"server3-pending" }'

如您所知,我只需要在spring.application.json配置参数上发送配置。

我不知道使用属性文件是否可以成为解决方案。

有任何想法吗?

标签: springmavenspring-boot

解决方案


您使用具有环境变量系统属性作为源的Spring Boot方式的外部化配置:

来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON)。

因此,作为替代方案,您可以将命令包装在一个 bash/sh 脚本中,该脚本对 env 变量进行赋值并运行 spring boot,但这并不是真的更具可读性:

SPRING_APPLICATION_JSON = '{ "server.port": 8081, "spring": { "datasource": { "url": "jdbc:postgresql://localhost:5432/frontoffice", "username": "frontoffice", "password": "password", "driverClassName": "org.postgresql.Driver" }, "redis": { "host": "localhost", "port": 6379 } }, "api.url-oauth": "http://localhost:8081/oauth/token", "url-ui": "http://localhost:3000", "document.upload-dir":"/home/jcabre/data/upload", "document.pending-key":"server3-pending" }'        
mvn -pl rep-digital-api spring-boot:run 

作为 JSON 内联的其他替代方法,您还可以将 JSON 作为 JNDI 变量提供,如下所示:java:comp/env/spring.application.json.但是使用 JDNI 似乎有点复杂并且不够明显。

事实上,您正在评估许多房产。因此,使用外部化配置文件似乎更好地读取/更新它们。我建议您在属性或 YAML 外部文件中定义它们:

mvn -pl rep-digital-api spring-boot:run 
-Dspring-boot.run.arguments=-spring.config.location=classpath:/foo.properties 

或用于spring.config.additional-location添加而不是覆盖默认位置(来自 Spring Boot 2):

mvn -pl rep-digital-api spring-boot:run 
-Dspring-boot.run.arguments=--spring.config.additional-location=classpath:/foo.properties 

推荐阅读