Diretório de artigos
Pré-importação
O que é implantação a quente? Simplificando, seu programa mudou e agora você precisa reiniciar o servidor, é problemático? Não há necessidade de reiniciar, o servidor recarregará silenciosamente o programa atualizado por si só, o que é uma implantação a quente.
Como a função de implantação a quente é implementada? Isso deve ser dividido em dois casos: Os métodos de implementação de hot deployment de projetos não springboot e projetos springboot são completamente diferentes. Vamos falar sobre como o projeto original sem springboot implementa a implantação a quente.
Princípio de implementação de implantação a quente para projetos que não sejam springboot
Ao desenvolver um projeto não-springboot, precisamos fazer um projeto web e iniciá-lo através do tomcat. Normalmente, precisamos primeiro instalar o servidor tomcat no disco e depois publicar a configuração do programa desenvolvido no servidor tomcat instalado. Se você deseja obter o efeito de implantação a quente, existem duas maneiras de fazer isso. Uma é configurá-lo no arquivo de configuração do servidor tomcat. Essa abordagem não tem nada a ver com qual ferramenta IDE você usa, se você usa eclipse ou ideia. Outro método é configurar através de ferramentas IDE, como configurar na ferramenta Idea. Este formulário precisa contar com ferramentas IDE. Cada ferramenta IDE é diferente, e a configuração correspondente não é a mesma. Mas a ideia central é a mesma, ou seja, usar o servidor para monitorar os aplicativos carregados nele e recarregá-lo uma vez se houver alguma alteração.
A implementação do projeto não-springboot mencionada acima da implantação a quente parece ser um processo muito simples, e quase todo pequeno parceiro pode escrevê-lo sozinho. Se você não sabe escrever, eu lhe darei a ideia mais simples, mas o design real é mais complicado do que isso. Por exemplo, inicie uma tarefa agendada, registre o tamanho de cada arquivo quando a tarefa for iniciada e verifique se o tamanho de cada arquivo foi alterado ou se há um novo arquivo a cada 5 segundos. Se não houver alteração, libere, se houver uma alteração, atualize as informações do arquivo gravado no momento e reinicie o servidor, o que pode obter a implantação a quente. Obviamente, esse processo não deve ser feito. Por exemplo, se eu alterar uma string de impressão "abc" para "cba", o tamanho da comparação não será alterado, mas o conteúdo foi alterado, portanto, definitivamente não é possível fazê-lo, apenas dê Vamos fazer uma analogia, e reiniciar o servidor é um cold start, não um hot deployment, entenda o espírito.
Parece que esse processo não é muito complicado. Existem outras reviravoltas no projeto springboot? Realmente existe.
Princípio de implementação de implantação a quente do projeto Springboot
O projeto web desenvolvido com base no springboot tem na verdade um recurso significativo, ou seja, o servidor tomcat é embutido, lembra do servidor embutido? O servidor é executado no contêiner de mola como um objeto. Originalmente, esperávamos que o servidor tomcat assistisse ao programa depois que o servidor tomcat carregasse o programa. container .Problema, falta de um gerenciamento direto certo, então como fazer? Simples,Faça outro programa X olhando para o seu programa A original desenvolvido no recipiente de molaIsso não funcionaria? De fato, apenas faça um programa X que olhe para o programa A. Se o programa A que você desenvolveu mudar, então o programa X instruirá o contêiner do tomcat a recarregar o programa A e tudo ficará bem. E há uma vantagem em fazer isso: você não precisa recarregar todas as coisas no container de molas. Você só precisa recarregar a parte do programa que você desenvolveu. Isso é mais eficiente, o que é bom.
Vamos falar sobre como criar um programa X, não devemos escrevê-lo sozinhos, o springboot já fez isso, basta importar uma coordenada para ele.
Iniciar manualmente uma implantação a quente
Passo 1 : Importe as coordenadas correspondentes às ferramentas do desenvolvedor
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
Passo ② : Construa o projeto, você pode usar a tecla de atalho para ativar esta função
Ou seja, toda vez que o projeto muda, você precisa reconstruir o projeto manualmente.
Parece que o hot deployment manual ainda é um pouco problemático
As teclas de atalho correspondentes devem ser lembradas
<CTRL>+<F9>
O processo acima realiza a implantação a quente do projeto springboot, é muito simples? No entanto, é necessário popularizar a engenharia de trabalho subjacente aqui.
reinicie e recarregue
Um projeto springboot é dividido em dois processos em tempo de execução, de acordo com as diferentes coisas carregadas, ele é dividido em carregador de classes base e carregador de classes de reinicialização.
- carregador de classes base: usado para carregar as classes no pacote jar. As classes e arquivos de configuração no pacote jar não serão alterados, portanto, não importa quantas vezes sejam carregados, o conteúdo carregado não será alterado.
- Reiniciar o carregador de classes: usado para carregar classes, arquivos de configuração, páginas e outras informações desenvolvidas pelos próprios desenvolvedores, que são afetadas pelos desenvolvedores
Quando o projeto springboot é iniciado, o carregador de classes base é executado. Após carregar as informações no pacote jar, o carregador de classes de reinicialização é executado para carregar o conteúdo feito pelo desenvolvedor. Após executar o projeto de compilação, como as informações do jar não serão alteradas, o carregador de classes base não precisa ser executado novamente, basta executar o carregamento da classe restart, ou seja, recarregar o conteúdo feito pelo desenvolvedor, e isso é done Após um processo de implantação a quente, também pode-se dizer que o processo de implantação a quente está, na verdade, recarregando as informações no carregador de classes de reinicialização .
Em outras palavras:
quando nosso programa é iniciado pela primeira vez, o processo de execução: reiniciar + recarregar
O processo de execução de implantação a quente: reiniciar
Iniciar implantação a quente automaticamente
O hot deployment automático é, na verdade, projetar um switch. Depois que esse switch é ativado, a ferramenta IDE pode fazer o hot deploy automaticamente. Portanto, esta operação está relacionada a ferramentas IDE. O seguinte usa idea como exemplo para configurar a implantação a quente no idea
Etapa ① : Configure o projeto de compilação automática
Abra [File], selecione [settings...], encontre a opção [Compile] no menu do lado esquerdo do painel e marque [Build project automatically], o que significa construir o projeto automaticamente
Depois que a opção de construir automaticamente o projeto é marcada
Etapa ② : Permitir compilações automáticas enquanto o programa está em execução
Use a tecla de atalho [Ctrl]+[Alt]+[Shit]+[/] para abrir o painel de manutenção, selecione o primeiro item [Registry…]
Procure por completo nas opções e, em seguida, marque o item correspondente.
Dessa forma, o programa pode ser construído automaticamente quando estiver em execução, percebendo o efeito da implantação a quente.
Nota : Se o servidor for reconstruído toda vez que você digitar uma carta, isso é um pouco frequente, então a ideia é definida para implantação a quente quando a ferramenta de ideia perde o foco por 5 segundos. Na verdade, é para executar a implantação a quente quando você alterna da ferramenta de ideia para outras ferramentas. Por exemplo, após alterar o programa, você precisa depurá-lo no navegador. Neste momento, a ideia executará automaticamente a operação de implantação a quente .
Configuração de intervalo de arquivos envolvida no monitoramento de implantação a quente
Ao modificar os arquivos no projeto, você pode descobrir que nem todas as modificações de arquivo ativarão a implantação a quente. O motivo é que há um conjunto de configurações nas ferramentas do desenvolvedor. Quando as condições da configuração forem atendidas, a implantação a quente será iniciado. As informações do diretório que não participam da implantação a quente por padrão são as seguintes
- /META-INF/maven/**
- /META-INF/resources/**
- /Recursos/**
- /estático/**
- /público/**
- /modelos/**
Se os arquivos nos diretórios acima forem alterados, eles não participarão da implantação a quente. Se você deseja modificar a configuração, pode definir quais arquivos não participam da operação de implantação a quente por meio do arquivo application.yml
spring:
devtools:
restart:
# 设置不参与热部署的文件或文件夹
exclude: static/**,public/**,config/application.yml
- ** representa todos os arquivos nessa pasta
- também pode ser implementado em um documento específico
Desativar a implantação a quente
É impossível usar a função de implantação a quente quando o ambiente online está em execução, portanto, essa função precisa ser desativada à força. Essa função pode ser desativada por meio da configuração.
spring:
devtools:
restart:
enabled: false
Se você tiver cuidado de que muitos níveis de arquivo de configuração causarão cobertura mútua e, eventualmente, causarão falha na configuração, você poderá aumentar o nível de configuração e desabilitar a implantação a quente em um nível mais alto. Por exemplo, desative a função de implantação a quente definindo as propriedades do sistema antes de iniciar o contêiner.
@SpringBootApplication
public class SSMPApplication {
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled","false");
SpringApplication.run(SSMPApplication.class);
}
}
Na verdade, a preocupação acima é um pouco redundante, pois é impossível modificar o código na manutenção do ambiente online. O único efeito disso é reduzir o consumo de recursos. Afinal, basta fechar os olhos que estão olhando se seu projeto mudou. , a função de implantação a quente não está mais disponível. A função dessa opção é desabilitar a função correspondente.