Java 在Dropwizard中禁用静态资产的缓存

Java 在Dropwizard中禁用静态资产的缓存,java,caching,assets,cache-control,dropwizard,Java,Caching,Assets,Cache Control,Dropwizard,我有一个带有RESTAPI的Dropwizard Web服务器,它还提供一些静态内容,如html、css、javascript和jpg图像。不幸的是,当我更改html或添加另一个图像时,服务器总是需要重新启动才能使更改生效 因为我认为这可能是缓存的问题,所以我进行了探索 这就是我添加到configuration类中的内容: @Valid @NotNull @JsonProperty private final AssetsConfiguration assets = new AssetsConf

我有一个带有RESTAPI的Dropwizard Web服务器,它还提供一些静态内容,如html、css、javascript和jpg图像。不幸的是,当我更改html或添加另一个图像时,服务器总是需要重新启动才能使更改生效

因为我认为这可能是缓存的问题,所以我进行了探索

这就是我添加到configuration类中的内容:

@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文件中的配置设置的缓存生成器规范。追加后

assets:
  cacheSpec: maximumSize=0

对于配置,调试器显示最大大小现在为0。但是,行为没有改变。

静态内容没有改变,不是因为需要重新启动,而是因为正在运行的服务器实际上为目标目录下的文件提供服务。更改此目录中的文件只会使事情变得混乱(因此这不是一个真正的解决方案),但更改几行并等待一秒钟,以验证服务器现在是否提供修改后的文件,而无需重新启动

作为一种解决方案,我更喜欢在eclipse中以maven项目的形式打开dropwizard项目,并使用
exec-maven插件在终端上运行该项目。Eclipse会随着文件的更改更新目标目录,但这需要几秒钟的时间,具体取决于项目的大小

assets:
  cacheSpec: maximumSize=0