2014-12-03 4 views
4

У меня есть веб-сервер Dropwizard с авием отдыха, который также служит для статического контента, такого как 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/main/resources/html. Как кэширование может быть отключено, так что Dropwizard показывает изменения мгновенно?

И второй вопрос, как я могу заставить Dropwizard следовать символическим ссылкам из каталога ресурсов?

Update

Я нашел это в источнике 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

Статический контент не изменяется не потому, что вам необходимо перезагрузить, а потому, что работающий сервер фактически служит для файлов под целевым каталогом. Изменение файлов в этом каталоге только путает вещи (так что это не совсем решение), но измените несколько строк и подождите секунду, чтобы убедиться, что сервер теперь обслуживает измененный файл без необходимости его перезапуска.

В качестве решения я предпочитаю открывать проект dropwizard как проект maven в eclipse и запускать проект с mvn exec:java на терминале, используя exec-maven-plugin. Eclipse обновляет целевой каталог по мере изменения файлов, но требуется несколько секунд, в зависимости от размера проекта.

Смежные вопросы