2014-12-03 53 views
4

我有一個Dropwizard網絡服務器,其餘的api也提供一些靜態內容,如html,css,javascript和jpg圖像。不幸的是,當我更改html或添加其他圖像時,始終需要重新啓動服務器才能將更改生效。在Dropwizard中禁用靜態資產緩存

正如我認爲這可能是一個緩存問題,我探索了bazaarvoice's Configurable Assets Bundle

這就是我添加到配置類:

@Valid 
@NotNull 
@JsonProperty 
private final AssetsConfiguration assets = new AssetsConfiguration(); 

,並在主類

@Override 
public void initialize(Bootstrap<MyConfiguration> bootstrap) { 
    // ... 
    CacheBuilderSpec cacheBuilderSpec = CacheBuilderSpec.disableCaching(); 
    bootstrap.addBundle(new ConfiguredAssetsBundle("/html", cacheBuilderSpec, "/", "index.html", "Static assets")); 
} 

@Override 
public void run(MyConfiguration config, Environment env) { 
    env.jersey().setUrlPattern("/api/*"); 
    // ... 
} 

在YAML配置沒有變化。

靜態文件位於的src /主/資源/ HTML。 如何禁用緩存以使Dropwizard立即顯示更改?

第二個問題,我如何讓Dropwizard跟隨資產目錄中的符號鏈接?

更新

我發現這個在ConfiguredAssetsBundle來源:

// Let the cache spec from the configuration override the one specified in the code 
CacheBuilderSpec spec = (config.getCacheSpec() != null) 
    ? CacheBuilderSpec.parse(config.getCacheSpec()) 
    : cacheBuilderSpec; 

這肯定將覆蓋這是在代碼中設置從YAML文件中配置緩存建設者規範。在追加

assets: 
    cacheSpec: maximumSize=0 

到配置,調試器顯示最大大小現在爲0.但是,行爲沒有改變。

回答

1

靜態內容不會更改,因爲您需要重新啓動,但因爲運行的服務器實際上爲目標目錄下的文件提供服務。更改此目錄中的文件只會讓事情混淆(因此它不是一個真正的解決方案),但改變幾行並等待一秒,以驗證服務器現在可以爲修改的文件提供服務,而無需重新啓動。

作爲解決方案,我更喜歡在eclipse中打開dropwizard項目作爲maven項目,並使用exec-maven-plugin在終端上運行mvn exec:java。 Eclipse會在文件更改時更新目標目錄,但這需要幾秒鐘時間,具體取決於項目的大小。