Como desabilito o cache do tomcat? Estou tendo problemas estranhos com arquivos estáticos

26

Como evito que o tomcat seja armazenado em cache? Tenho css e arquivos html básicos que carrego e uso via ajax e, a menos que eu reinicie o tomcat, as alterações não parecem refletir. Máquinas diferentes, navegadores diferentes e não recebo os arquivos atualizados.

Pensamentos?

Stefan Kendall
fonte

Respostas:

21

Pode ser necessário excluir a pasta de cache do aplicativo em / work / Catalina / localhost após alterar o sinalizador cacheingAllowed.

A configuração pode ser introduzida no server.xml como

<Context className="org.apache.catalina.core.StandardContext"
                 cachingAllowed="false"
                 charsetMapperClass="org.apache.catalina.util.CharsetMapper"
                 cookies="true" 
                 reloadable="false" 
                 wrapperClass="org.apache.catalina.core.StandardWrapper">
        </Context>
Adam Brand
fonte
2
+1 Esqueci completamente de mencionar isso na minha resposta original. Obrigado!
KPWINC
2
LOL ... onde está o amor?
KPWINC
4
Onde eu altero a chachingAllowedtag?
Kevacx
11
Recebeu um aviso do Tomcat 8 ao iniciar: Definir propriedade cachingAllowedcomo falsenão encontrou uma propriedade correspondente.
NaXa
4
Esta resposta é agora super-out-of-date, de leitura ninguém, e já não é realmente correta (por Tomcat 5+)
Amalgovinus
14

Para o Tomcat 8 / Tomcat 9, as propriedades devem ser adicionadas em conf / context.xml da seguinte maneira

<Context>
  <Resources antiResourceLocking="false" cachingAllowed="false" />
  ...
</Context>

Pode ser necessário excluir a pasta de cache do aplicativo em / work / Catalina / localhost após alterar o cachingAllowedsinalizador. Limpe também o cache do IntelliJ IDEA (se você o usar para executar o Tomcat):

Mac: / Usuários / {: user} / Biblioteca / Caches / IntelliJIdea {: version} / tomcat /  
Linux: /home/{:user}/.IntelliJIdea{:version}/system/tomcat/
Windows: C: \ Usuários \ {: user} \. IntelliJIdea {: versão} \ system \ tomcat \

Consulte Referência de configuração do Apache Tomcat 9 para outros parâmetros.

naXa
fonte
2
antiResourceLocking em <Recursos> -tag é definitivamente errado para tomcat 8
pscheit
Isso também não está correto para o tomcat 7. "A configuração da propriedade 'antiResourceLocking' como 'false' não encontrou uma propriedade correspondente." ... "A configuração da propriedade 'cachingAllowed' como 'false' não encontrou uma propriedade correspondente."
Amalgovinus
@Amalgovinus para Tomcat 7, veja a resposta de Zalumon .
NaXa
@Amalgovinus, você resolveu seu problema? Eu tenho o mesmo problema no tomcat7, o que você fez?
Aaron
Eu nunca consegui fazer a propriedade funcionar .. mas tenho certeza de que meu cache era um problema de implantação não relacionado :( erro do usuário
Amalgovinus
13

Eu tive esse problema no Tomcat 7 e o motivo foi que eu tinha o antiResourceLocking definido como verdadeiro (parecia uma boa ideia ...).

De acordo com os documentos ( http://tomcat.apache.org/tomcat-7.0-doc/config/context.html ):

Observe que definir isso como verdadeiro tem alguns efeitos colaterais, incluindo a desativação do recarregamento do JSP em um servidor em execução: consulte Bugzilla 37668.

No meu caso, até fez com que arquivos de texto estático simples fossem armazenados em cache.

Então, em resumo, pelo menos para o desenvolvimento rápido eu tive que usar:

antiResourceLocking="false"
cachingAllowed="false"
Reto Höhener
fonte
Onde adiciono isso exatamente? Se eu colocar no arquivo conf / context.xml, ele me dará "não encontrou uma propriedade correspondente" para cada um deles ...
Aaron
11
Como atributos do elemento de contexto.
Reto Höhener 28/02
4

Você verificou esta documentação: Referência de configuração do Apache Tomcat ?

cacheMaxSize- Tamanho máximo do cache de recursos estáticos em kilobytes. Se não especificado, o valor padrão é 10240 (10 megabytes).

cacheTTL- Tempo em milissegundos entre a revalidação de entradas de cache. Se não especificado, o valor padrão é 5000 (5 segundos).

cachingAllowed- Se o valor desse sinalizador for verdadeiro, o cache para recursos estáticos será usado. Se não especificado, o valor padrão do sinalizador é verdadeiro.

Esses parâmetros são os mesmos para o Tomcat 5.5 e o Tomcat 6.0.

KPWINC
fonte
Defino cachingAllowed como false e cacheTTL para 1000 no meu appcontext.xml, e AINDA NÃO consigo obter o arquivo para não armazenar em cache. Pior ainda, é o cache das reinicializações do tomcat.
276 Stefan Kendall
Em seguida, ele tem que ser a partir do cache do navegador
lisak