从资源中使用 config.yaml 启动 Dropwizard

Start Dropwizard with config.yaml from resources

我有一个下拉向导问题。我将 Dropwizard 与 SBT 结合使用(效果很好)。 如果我 运行 我的应用程序我将其打包:

$ sbt clean assembly

与 运行 相比,应用程序具有:

$ java -jar APPLICATION.jar server

问题在于此命令 Dropwizard 没有加载我的配置文件 (config.yaml),该文件位于资源中。 关于 Dropwizard 文档,我总是必须将配置文件作为参数提供,例如:

$ java -jar APPLICATION.jar server config.yaml

这工作正常,它加载了应用程序,但是有没有可能告诉 Dropwizard 直接加载 config.yaml 文件,因为我在 config.yaml 文件中的配置是静态的,它总是相同的。从 Server Stage 到 Server Stage 的数据库等设置被设置为我使用 EnvironmentVariableSubstitutor 加载的环境变量。

谢谢

使用ResourceConfigurationSourceProvider:

@Override
public void initialize(final Bootstrap<ExampleConfiguration> bootstrap) {  
  bootstrap.setConfigurationSourceProvider(new ResourceConfigurationSourceProvider());
  // The rest of initialize...
}

然后像这样调用应用程序:

java -jar APPLICATION.jar server /resource-config.yaml

(注意首字母/

虽然这个答案很晚,但我只是想把它放在这里。有一个肮脏的小技巧可以让它工作,这样你就不必在你的应用程序参数中提供 config.yaml。

基本上,您可以向 dropwizard 应用程序中的 运行() 方法提交一个新的 String[] 参数。

public class ApplicationServer extends Application<Config> {

  public static void main(String[] args) {
    String[] appArgs = new String[2];
    appArgs[0] = args[0]; // This will be the usual server argument
    appArgs[1] = "config.yaml";
    
    new ApplicationServer().run(appArgs);
  }
  
  @Override
  public void run(Config configuration, Environment environment) {
    // Configure your resources and other application related things
  }
  
}

我使用这个小技巧来指定我想要 运行 使用哪个配置文件。因此,我不会指定 config.yaml,而是将我的第二个参数指定为 DEV/UAT/STAGE/PROD,并将适当的配置文件传递给 运行 方法。