在Dropwizard中禁用静态资源的缓存

4
我有一个Dropwizard Web服务器,其中包含一个REST API,还提供一些静态内容,如HTML、CSS、JavaScript和JPG图像。不幸的是,当我更改HTML或添加另一张图片时,服务器总是需要重新启动才能生效。
考虑到这可能是缓存问题,我研究了bazaarvoice的可配置资产捆绑包
这是我在配置类中添加的内容:
@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 / main / resources / 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个回答

1
静态内容之所以不会改变,不是因为你需要重新启动,而是因为运行的服务器实际上服务于目标目录下的文件。更改此目录中的文件只会使事情变得混乱(因此这并不是一个真正的解决方案),但是更改几行代码并等待一秒钟以验证服务器现在无需重新启动即可提供修改后的文件,这是一个解决方法。
作为解决方案,我更喜欢在eclipse中将dropwizard项目作为一个maven项目打开,并在终端上使用exec-maven-plugin运行mvn exec:java命令来运行该项目。Eclipse会根据文件更改更新目标目录,但这需要几秒钟,具体取决于项目的大小。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接