从命令行启动jar时从命令行获取配置属性

时间:2017-07-14 13:31:42

标签: java heroku vert.x

我试图在本地和Heroku上启动一个vert.x示例(使用Procfile):

java -Dhttp.port=$PORT -jar myapp.jar

我觉得属性(http.port)没有设置,因此我的程序无法访问。

使用System.getenv()读取PORT环境变量有效,但不是“最佳实践”。

为什么呢?我能做什么? OVE

2 个答案:

答案 0 :(得分:0)

正如@dpr指出ConfigRetriever是可行的方法。

这是我最终做的事情:

// Get the system property store (type = sys)
    val sysPropsStore = ConfigStoreOptions().setType("sys")
    // Add system property store to the config retriever options
    val options = ConfigRetrieverOptions().addStore(sysPropsStore)
    // And create a ConfigRetriever
    val retriever = ConfigRetriever.create(vertx, options)

    // Set the default port
    var httpPort: Int = 8080

    retriever.getConfig { ar ->
        if (ar.failed()) {
            // Failed to retrieve the configuration
        } else {
            val config = ar.result()

            if (config.containsKey("http.port")) 
                httpPort = config.getInteger("http.port")
        }
    }

答案 1 :(得分:0)

最好的方法是定义一个json文件并在其中添加所有与配置相关的vertx。

在启动应用程序时将config.json作为参数传递。

以下是示例:

  

Config.json文件

{
  "port": 8090
  // you can add other stuff over here
}

在运行应用程序时将config.json作为参数传递

  

java -jar myapp.jar --conf = / config.json的路径

因此,您可以在主Verticle中读取此json文件

 public class MainVerticle extends AbstractVerticle {

 @Override
  public void start(Future<Void> startFuture) throws Exception {

   JsonObject data = this.config(); 

  // read port and other configuration related stuff from JsonObject 
 }
}

我希望这会对你有所帮助:)