[SpringBoot Series] Hot Deployment

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

insira a descrição da imagem aqui

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 .

insira a descrição da imagem aqui
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

insira a descrição da imagem aqui

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…]

insira a descrição da imagem aqui

​ Procure por completo nas opções e, em seguida, marque o item correspondente.

insira a descrição da imagem aqui

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.

Supongo que te gusta

Origin blog.csdn.net/zyb18507175502/article/details/126329516
Recomendado
Clasificación