Muitos internautas me perguntarão de tempos em tempos, como testar o projeto de inicialização da primavera, como implantá -lo e se existem boas soluções de implantação na produção? Este artigo introduzirá como a BOOT Spring é desenvolvida, depurada, embalada e finalmente colocada em produção e lançamento.
Estágio de desenvolvimento
Teste de unidade
A coisa mais importante durante o estágio de desenvolvimento é o teste de unidade. O suporte do Springboot para testes de unidade foi aperfeiçoado.
1. Adicione a referência do pacote Spring-Boot-Starter Test ao pacote POM
<Ependency> <GrupidId> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-Starter-test </sutifactId> <cope> Test </schope> </dependency>
2. Desenvolvimento e teste
Tomando o mais simples Helloworld como exemplo, você precisa adicionar: @Runwith (Springrunner.class) e @springboottest as anotações para o chefe de classe da classe de teste. Basta adicionar @test na parte superior do método de teste e, finalmente, clique com o botão direito do mouse no método para ser executado.
@Runwith (springrunner.class) @springboottestPublic class ApplicationTests {@Test public void hello () {System.out.println ("Hello World"); }}No uso real, você pode injetar código da camada DAO ou código da camada de serviço de acordo com o uso normal do projeto para teste e verificação. O teste de estrela da primavera fornece muitos usos básicos e o que é ainda mais raro é que ele adiciona suporte para testes de camada de controladores.
// Verifique se o conjunto de resultados está correto assert.asserTequals (3, UsermApper.getAll (). Size ()); // Verifique o conjunto de resultados, prompt Assert.assertfalse ("erro, o valor de retorno correto é 200", status! = 200);O MockMVC é introduzido para apoiar o teste da camada do controlador. O exemplo simples é o seguinte:
classe pública hellocontrolertests {private mockmvc mvc; // Inicialize a execução @Before public void setup () lança exceção {mvc = zockmvcbuilders.standaloneSetup (new Hellocontroller ()). Build (); } //Verify whether the controller responds normally and prints the return result @Test public void getHello() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isOk()) .anddo (mockmvcresultHandlers.print ()) .andreturn (); } // Verifique se o controlador responde normalmente e determina se o resultado de retorno está correto @test public void testhello () lança exceção {mvc.perform (zockmvcRequestBuilders.get ("/hello"). Acep (MediaType.Application_json) .andexpect (status (). ISOK ()). .andexpect (content (). string (igualto ("hello"). aceite (mediatype.application_json)) .andexpect (status (). isok ()) .andexpect (content (). string (igualto ("hello world"));}}}O teste de unidade é a primeira barreira para verificar seu código. Você deve desenvolver o hábito de testar a unidade toda vez que escrever uma parte do seu código. Não espere até que todos estejam integrados antes do teste. Após a integração, é fácil perder os bugs na parte inferior do código, porque você presta mais atenção ao efeito geral da operação.
Teste de integração
Após a conclusão do desenvolvimento geral, o teste de integração é inserido. A entrada de inicialização do projeto de inicialização da primavera está na classe de aplicativo. Você pode iniciar o projeto executando o método de execução diretamente. No entanto, durante o processo de depuração, devemos constantemente depurar o código. Se você precisar reiniciar manualmente o serviço sempre que o código for modificado, será muito problemático. A Spring Boot fornece um suporte a quente com muito suporte, o que é muito conveniente para depuração e uso em projetos da Web.
O POM precisa adicionar a seguinte configuração:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency></dependencies><build> <plugins> <groupId>org.springframework.boot</groupId> <TarfactId> Spring-boot-maven-plugin </stifactId> <friefiguration> <burk> true </fork> </figuration> </plugin> </flugins> </fuild>
Após adicionar a configuração acima, o projeto suporta a implantação a quente, o que é muito conveniente para testes de integração.
Indo de produção e indo online
Na verdade, acho que esse estágio deve ser relativamente simples e geralmente dividido em dois tipos: um é empacotá -lo em um pacote JAR e executá -lo diretamente, e o outro é empacotá -lo em um pacote de guerra e colocá -lo no servidor Tomcat.
Transforme -o em um pacote de jar
Se você estiver usando o Maven para gerenciar seu projeto, execute o seguinte comando
Projeto de CD e diretório (mesmo nível que pom.xml) MVN Clean Package ## ou execute o seguinte comando ## para excluir o código de teste e o pacote mvn limpo pacote -dmaven.test.skip = true
Após a conclusão da embalagem, o pacote JAR será gerado no diretório de destino. O nome geralmente é o nome do projeto + número da versão.jar
Inicie o comando do pacote JAR
Java -Jar Target/Spring-Boot-Scheduler-1.0.0.jar
Dessa forma, enquanto o console estiver fechado, o serviço não estará acessível. Vamos começar o seguinte executando em segundo plano:
Nohup Java -Jar Target/Spring-Boot-Scheduler-1.0.0.jar &
Você também pode optar por ler diferentes arquivos de configuração ao iniciar
java -jar App.jar - -spring.profiles.active = dev
Você também pode definir parâmetros de JVM na inicialização
java -xms10m -xmx80m -jar app.jar & gradle
Se você estiver usando o gradle, use o seguinte comando para embalar
gradle Buildjava -Jar Build/Libs/MyModule-0.0.1-Snapshot.jar
Torne -se em uma bolsa de guerra
O primeiro tipo pode ser usado para exportar o pacote de guerra através do eclipse da ferramenta de desenvolvimento, e o outro tipo é usar comandos para concluí -lo. Aqui, apresentamos principalmente o último.
1 Projeto Maven, modifique o pacote POM
Vai
<batyaging> jar </cataging>
Mudar para
<batyaging> Guerra </backaging>
2. Exclua o tomcat ao embalagem.
<pendency> <voupid> org.springframework.boot </frupiid> <stifactId> primavera-boot-starter-web </artifactId> </dependency> <pendesency> <voundiD> org.springframework.boot </groupid> <tifactid> <rod-spring-boot.springframework.boot </groupid> <TifactId> <sprocera> Scring.
Aqui, defina a propriedade SCOPE fornecida para que o pacote JAR não seja incluído na guerra final, porque servidores como Tomcat ou Jetty fornecerão aulas de API relevantes em tempo de execução.
3. Registre a aula de inicialização
Criar servletinitializer.java, herdar SpringBootSertLeTIlitializer, substituir a configuração () e registrar o aplicativo da classe de inicialização. Quando um servidor de aplicativos da Web externo cria um contexto de aplicativo da Web, a classe de inicialização será adicionada.
classe pública servletinitializer estende o springbootSertLeTIlitializer {@Override Protected SpringApplicationBuilder Configure (SpringApplicationBuilder Application) {return Application.sources (Application.class); }}Execução final
pacote limpo mvn -dmaven.test.skip = true
O arquivo Nome do Projeto + Número da Versão.
Gradle
Se você estiver usando o gradle, a etapa básica é a mesma. Adicione o suporte de guerra no Build.gradle e exclua a primavera-boot-starter-tomcat:
... Aplique plugin: 'War' ... dependências {compilem ("org.springframework.boot: spring-boot-starter-web: 1.4.2.Release") {exclui myModule: "Spring-boot-starter-tomcat"}} ...Use o comando Build novamente
gradle build
A guerra será gerada no diretório Build/Lib.
Operação de produção e manutenção
Veja o valor dos parâmetros da JVM
Você pode seguir o comando Jinfo que vem com Java:
jinfo -flags pid
Vamos ver o que o GC é usado após o início do frasco, quanta memória está em lotes na nova geração e nos idosos. Os exemplos são os seguintes:
-XX:CICompilerCount=3 -XX:InitialHeapSize=234881024 -XX:MaxHeapSize=3743416320 -XX:MaxNewSize=1247805440 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=78118912 -XX:OldSize=156762112 -Xx:+usecompressedClassPointers -xx:+usecompressedoPs -xx:+usefastunOrderEdTimeSTamps -xx:+useParallelGC -xx: cicompilercount: maximum parallem compiles e maxixxxexexexewxxex: maxheapMize: especificar o máximo e o máximo e o maxHepMize: o máximo de jeax e o maxHepMize: specnumpnums e o máximo de jeapMev: o maxHepMize: specnumpnum e o maxheapMize. Tamanho alocável para a nova geração de memória na área de heap JVM ... -xx:+useParallelGC: a coleção de lixo usa colecionador paralelo
Como reiniciar
Simples e grosseiro
Mate diretamente o processo e inicie o pacote JAR novamente
PS -EF | Grep Java ## Obtenha o programa Pidkill para Java -9 PID ## Reinicie Java novamente -Jar xxxx.jar
Obviamente, esse método é mais tradicional e violento, por isso é recomendável que você use o seguinte método para gerenciá -lo
Execução do script
Se você estiver usando o maven, precisará incluir a seguinte configuração
<lugin> <voundId> org.springframework.boot </frugiD> <TRATIFACTID> Spring-boot-maven-plugin </sutifactId> <figuration> <Executivle> true </conforabable> </figuration> </flugin>
Se você usar o gradle, precisará incluir a seguinte configuração
Springboot {Execute = true}Método de inicialização:
1. Você pode começar diretamente em ./yourapp.jar
2. Registre -se como um serviço
Você também pode fazer um link suave para apontar para o seu pacote JAR e adicioná -lo ao init.d e iniciá -lo com comandos.
Exemplo init.d:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod +x /etc/init.d/yourapp
Dessa forma, você pode usar o comando STOP ou reiniciar para gerenciar seu aplicativo.
/etc/init.d/yourapp start | pare | reiniciar
ou
Serviço YourApp Iniciar | Parar | Reiniciar
Neste ponto, o teste, a coordenação conjunta e a embalagem de projetos de trampolim foram introduzidas. Você pode encontrar tempo para estudar a operação e a manutenção automatizadas do Springboot e a combinação de Springboot e Docker.
Código de amostra - Github
Exemplo de código de código de código
Resumir
O exposto acima é o método de embalagem e implantação de teste de inicialização da primavera introduzida pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!