Como o Springboot é uma estrutura de microsserviço, seu método de implantação de produção precisa ser o mais simples possível, o que é uma enorme diferença dos aplicativos da Web convencionais. Ele pode incorporar um contêiner da web, como tomcat, jetty, etc., e não precisa mais empacotar o aplicativo em um formulário específico especificado pelo contêiner.
Para o Springboot, empacotá -lo em um pacote simples de jar e usando diretamente o java -jar. Esta é uma maneira muito elegante, mas também traz certos problemas, como: como interromper o aplicativo? No passado, os aplicativos eram implantados em contêineres específicos, e os scripts fornecidos pelo contêiner podiam ser descontinuados elegantemente, mas agora o contêiner está incorporado e os scripts desapareceram. O que devo fazer? A morte direta é uma maneira, mas parece muito rude e pode trazer muitos problemas inesperados.
Como podemos pensar em problemas, os fabricantes de quadros também prepararam soluções para nós? Existem sim, e apresentarei algumas soluções que aprendi abaixo.
1. Use pontos de extremidade
Na Parte 4 da documentação oficial do Springboot, são introduzidos vários recursos preparados para a produção de lançamento de aplicativos. Entre eles, através do terminal HTTP do atuador, os desenvolvedores podem monitorar e gerenciar facilmente aplicativos.
Apresente o pacote de partida especificado:
"Org.springframework.boot: Spring-Boot-Starter-Actuator: $ {Springbootversion}"Abra as duas configurações a seguir no Application.yml para interromper o aplicativo por meio de solicitação HTTP
Gerenciamento: Segurança: Ativado: FalsendPoints: Shutdown: Enabled: true
Os comandos de operação são os seguintes:
Curl -x post http: // host: porta/desligamento
Mas esse método tem um problema muito sério, ou seja, qualquer pessoa pode controlar a parada do aplicativo, o que é sem dúvida inaceitável para um aplicativo de produção. Algumas pessoas podem pensar que o endereço do link é muito simples agora, e os não mantidos podem adivinhar facilmente se esse problema pode ser evitado se um endereço muito complexo for usado. Muito bom, esta proposta é boa, vamos dar uma olhada nas configurações relevantes fornecidas pelo Springboot.
terminais: desligamento: habilitado: true caminho: /xxx
Após a conclusão da configuração, o comando acima não está mais disponível. O comando precisa ser atualizado como:
Curl -x post http: // host: porta/xxx
Obviamente /xxx é apenas um que eu defino casualmente, você pode definir qualquer endereço. Embora a segurança seja um pouco maior, esse nível de segurança ainda não está disponível para ser aplicado ao ambiente de produção. Então, existem outras medidas de proteção? Sim, além de modificar o caminho de desligamento, também podemos adicionar um contexto unificado a todas as operações de gerenciamento, configurar portas independentes e restringir o acesso IP especificado (geralmente limitado à máquina nativa). A configuração é a seguinte:
Gerenciamento: Segurança: Ativado: False Port: 9001 Endereço: 127.0.0.1 contexto-path: /admin
O comando de descontinuação de serviço alterado é:
Curl -x Post http://127.0.0.1:9001/admin/xxx
Isso é realmente seguro o suficiente. Para garantir ainda mais a segurança do sistema, adicione uma camada de autenticação básica HTTP.
Aumentar as dependências de segurança:
"Org.springframework.boot: Spring-Boot-Starter-Security: $ {Springbootversion}"Modifique o arquivo de configuração da seguinte forma:
Pontos de extremidade: desligamento: habilitado: true Path: /xxxManagement: Segurança: Ativado: True Port: 9001 Endereço: 127.0.0.1 Contexto Path: /Adminsecurity: Basic: Ativado: True Path: /Admin Usuário: Nome: Raiz Senha: 123456
Após a conclusão da configuração, o comando final de descontinuação é:
Curl -x Post -u Raiz: 123456 http://127.0.0.1:9001/admin/xxx
2. Registre -se como um serviço de sistema
Além de executar aplicativos de trampolim com java -jar, você pode se registrar facilmente como um serviço de sistema Linux/Unix com init.d ou systemd, o que facilita a instalação e o gerenciamento de aplicativos de troca em um ambiente de produção.
No projeto Maven, para criar um frasco "totalmente executável", os seguintes plug-ins precisam ser introduzidos:
<Plugin> <voundid> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-maven-plugin </ArtifactId> <Versão> 1.5.2.Release </sisteriS> <figuration> <Executable> true </conforable> </figuration> </suplin>
No projeto Gradle, a configuração equivalente é a seguinte:
plugins {id 'org.springframework.boot' versão '1.5.2.Release'} Springboot {Execute = true}Após a conclusão da configuração, você pode executar o aplicativo construído através do ./Application-Name.jar.
Por fim, precisamos instalar o aplicativo embalado em um serviço init.d, para que ele possa ser facilmente gerenciado usando o Unix/Linux. O método de operação é muito simples. Você só precisa simplesmente vincular o aplicativo ao init.d (onde a fundos é o meu próprio nome de aplicativo, e você precisa substituí -lo de acordo com a situação ao experimentar).
ln -s /app/funda/funda.jar /etc/init.d/funda
Verifique se o link está estabelecido com sucesso
ls -l /etc/init.d/funda
Inicie o serviço e o log do aplicativo pode visualizar o arquivo /var/log/funda.log
Start de fundos de serviço
Outros comandos comuns
# Verifique o aplicativo Running Status Service Funda Status# Pare a parada de fundos do serviço de aplicativo
Resumo das perguntas:
Depois que o link é bem -sucedido, o aplicativo não pode ser iniciado com sucesso. É solicitado a não conseguir encontrar Java. Use o seguinte comando para vincular o comando jdk java a /sbin /java.
ln -s /usr/local/jdk1.8.0_131/bin/java/sbin/java
Link de referência:
Pontos de extremidade
Monitoramento e gerenciamento sobre HTTP
Serviços Unix/Linux
Incapaz de encontrar Java #5690
Link do projeto:
Github: https://github.com/qchery/funda
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.