Maven spring-boot:运行目标:简化命令行

时间:2018-08-31 07:06:51

标签: spring maven spring-boot

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

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 config参数上发送配置。

我不确定是否可以使用属性文件作为解决方案。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您使用externalized configuration of Spring Boot方式将环境变量系统属性作为源:

  

SPRING_APPLICATION_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 

答案 1 :(得分:1)

您可以为此在pom.xml中定义一个配置文件并使用properties-maven-plugin,但是您需要一个默认配置文件,并且没有任何更改。

<profiles>
    <profile>
        <id>deflt</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <activeprofile>deflt</activeprofile>
        </properties>
    </profile>
    <profile>
        <id>local</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <activeprofile>local</activeprofile>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>properties-maven-plugin</artifactId>
                    <version>1.0.0</version>
                    <executions>
                        <execution>
                            <id>local-run</id>
                            <configuration>
                                <properties>
                                    <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" }</spring.application.json>
                                </properties>
                            </configuration>
                            <goals>
                                <goal>set-system-properties</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

然后您的命令行将变为mvn -pl rep-digital-api spring-boot:run -P local

我使用类似的设置,但是调用了一个不同的插件。在此代码示例中,我可能未正确设置配置。