O Springboot é uma atualização para o SpringMVC, que é mais fácil para codificar, configuração, implantação e monitoramento.
Microsserviços
A MicrosServices é uma arquitetura emergente de software que divide um grande aplicativo e serviço em dezenas de microsserviços suportados. Uma estratégia de microsserviço pode facilitar o trabalho, o que pode escalar um único componente em vez de uma pilha de aplicativos inteira, atendendo assim a protocolos no nível de serviço.
A Spring fornece um conjunto completo de componentes para microsserviços - Springclound, e Spirngboot é a base.
O primeiro programa de trampolim
O software de desenvolvimento usado aqui é o Intellij Idea, que não é muito diferente do Eclipse, com uma interface mais legal e funções mais poderosas; O Android Studio é desenvolvido com base no Intellij. Eu já usei o Android Studio antes, e as interfaces de ambas são quase as mesmas.
IDEIA INTELIDO SITE OFICIAL: http://www.jetbrains.com/idea/
Depois de configurar o maven, tomcat, jdk, você pode usá -lo
A imagem da nuvem do Alibaba do armazém central configurada por Maven, a velocidade de baixar pacotes JAR neste endereço, quem sabe quem o usa!
Setting.xml
.. <espelrors> <linfl> <d> alimaven </d> <name> Aliyun maven </name> <url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <flinporof> Central </Mirrof> </Mirror>. .
Crie projetos de trampolim com ideia
My Idea Version: Intellij Idea 2016.3.1
A estrutura do projeto é:
O arquivo padrão Maven Pom.xml para o projeto
pom.xml
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <lodelVersion> 4.0.0 </modelVersion> <proupid> com.jxust </groupsion> 4.0.0 </modelVersion> <vroupId> com.jxust </groups> <TarifactId> Spirngbootdemo </starfactId> <versão> 0.0.1-snapshot </version> <bacaging> jar </acheging> <name> spirngbootdemo </name> <cription> Projeto Demo para a inicialização da primavera </cription> <puri> <purgid> org.sPringFamework.Boot </grouping> <roux> <voupid> org.sPringFramwork.Boot </grouping> <roux> <voupid> org.sPringFramwork.Boot </groupd> <roux> <Gruerid> Org.sPringFramwork <roupd> </ArtifactId> Spring-Boot-Starter-Parent </ArtifactId> <Versão> 1.4.2.Release </siers> <RelityPath/> <!-Lookup Parent do Repositório-> </a Parent> </projecties> <Projed.build.sourcencoding> utf-8 </projecties> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <pendencency> <UroupId> org.springframework.boot </proupId> <TRATIFACTID> Spring-boot-starter-test </ArtifactId> <copo> test </cope> </dependency> </dependências> <fuild> <lugins> <plugId> org.springframework.boot </grupo> <TarifactId> Spring-boot-maven-plugin </stifactId> </flugin> </plugins> </fruct> </project>
Execute o método principal de SpirngbootDemoApplication e você pode começar a funcionar.
Para outros métodos de inicialização, consulte o Tutorial em vídeo http://www.imooc.com/learn/767/
Saída do console:
"C:/Arquivos de programas/java/jdk1.8.0_91/bin/java" .... ____ __ __ /// ___'_ __ __ _ (_) _ ___ __ / / / / (() / ___ | '_ |' _ | | / / / / / / / / / / / / / / / / / | | | | | | | | | | | | | | .__ || | _ | | _ | | _/__, | / / / / / ================================== ____ / = / _ / _ / :: Spring Boot :: (v1.4.2.Release) 2016-12-16 14: 56: 52.083 Informações 15872-[MainEAs Startup2016-12-16 14: 56: 52.215 Info 15872 --- [Principal] SBCETTOMCATEMBEDDEDSERVletContainer: Tomcat Iniciado em portas (s): 8080 (HTTP) 2016-12-16 14: 56: 52.255 Informações 15872-[main] SBCETTOM Porta (s): 8080 (HTTP) 2016-12-16 14: 56: 52.255 Info 15872 --- [Principal] SbcetTomCatEmBedDedServletContainer: TomCat Iniciado em Portas (s): 8080 (http) 2016-16 14: 56: 52.25558720 (HTTP) 2016-16 14: 56: 52.255587272080 (http) 2016-16 14: 56: 52.25558720s: : Tomcat Iniciado em portas (s): 8080 (http) 2016-12-16 14: 56: 52.255 Informações 15872 --- [Main] com.jxust.spirngbootdemoApplication: iniciou o SPIlngbootDemoApplication em 7,795 segundos (JVM em execução para 9.17)
A partir daqui, você pode ver o número da porta do tomcat. Como não há controlador personalizado, ainda não há visualização. Vamos criar uma visualização que produz a Hello Springboot!.
Crie um hellocontrolador, localizado sob o pacote do controlador
Hellocontroller.java
pacote com.jxust.controller; importar org.springframework.web.bind.annotation.getmapping; importar org.springframework.web.bind.annotation.restcontroller;/** * Criado por Peng * Time: 2016/12/16 15:45 */RestCl @RequestMapping ("/hello") public string diz () {return "Hello Springboot!"; }}@RestController New Anotation After Spring4. Acontece que o retorno do JSON exige que o @ResponseBody coopere com o @Controller. Agora um é os dois melhores
Digite http: // localhost: 8080/Olá no navegador para produzir a frase Hello Springboot!
Configuração de propriedade personalizada
O arquivo Application.Properties é usado
Configure o número da porta e o prefixo de acesso
Application.PropertiESSERVER.PORT = 8081SERVER.CONTEXT-PATH =/Springboot
Além de usar arquivos de formato .Properties, você também pode usar os arquivos de configuração do formato .yml (recomendados), o que é mais fácil
Application.yml
Exclua o arquivo de aplicativo original.properties
Preste atenção ao formato, os espaços não podem estar faltando
Obtenha o valor do atributo no arquivo de configuração
Também podemos configurar dados no arquivo de configuração e obtê -los no controlador, por exemplo:
Application.yml
Servidor: Porta: 8081 contexto de contexto: /SpringbootName: Xiaopang
Hellocontroller recebe o valor no arquivo de configuração
Hellocontroller.java
.... @RestControllerPublic Classe Hellocontroller {@Value ("$ {Name}") Nome da String Private; @RequestMapping (value = "/hello", método = requestMethod.get) public string diz () {Nome de retorno; }} O valor retornado do nome
Diversificação de métodos de configuração de valor em arquivos de configuração
Os valores do arquivo de configuração podem ser múltiplos ou combinados, como:
Application.yml
Nome: Xiaopang Idade: 22 ou Nome: Xiaopang Idade: 22 Content: "Nome: $ {Nome}, idade: $ {Age}" ou servidor: Port: 8081 contexto: /Springbootperson: Nome: Xiaopang Idade: 22As duas primeiras configurações são a mesma maneira de obter valores, mas para esse método, a pessoa possui duas propriedades correspondentes, que precisam ser tratadas dessa maneira.
PersonProperties.java
pacote com.jxust; importar org.springframework.boot.context.properties.configurationproperties; importar org.springframework.tereotype.component;/** * Criado por Peng * Hora: 2016/12/16 16:34 */componente@configurtities (prefixs 2016/12/16 idade inteira privada; public String getName () {Return Name; } public void setName (nome da string) {this.name = name; } public integer getage () {retorna idade; } public void setage (idade inteira) {this.age = Age; }}ALT+Insira os avisos de chave de atalho para gerar getter e setter
O POM.XML precisa adicionar as seguintes dependências para lidar com avisos
<Depencency> <PuerpId> org.springframework.boot </frugid> <stifactId> spring-boot-configuration-processor </artifactid> <pution> true </cptional> </dependency>
Hellocontroller.java
pacote com.jxust.controller; import com.jxust.personproperties; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.web.bind.annotation.requestmapping; importação de org.springframw.webind.webind.bind.requetmapping; org.springframework.web.bind.annotation.restcontroller;/** * Criado por Peng * Tempo: 2016/12/15 20:55 */ @RestControllerpublic Classe Hellocontroller {@autowired private PersonProperties PersonProperties; @RequestMapping (value = "/hello", método = requestMethod.get) public string diz () {return PersonProperties.getName ()+PERSONPROPERTIES.GETAGE (); }}Sobre o arquivo de configuração Application.yml vários conjuntos de configurações
Semelhante à internacionalização dos arquivos IL8N, i18n_en_us.properties e i18n_zh_cn.properties
Isso pode resolver o constrangimento de modificações frequentes de configuração
Está pronto para o arquivo de configuração do Application.yml para decidir qual arquivo de configuração usar.
Application.yml
Primavera: perfis: ativo: um
Application-a.yml
Servidor: Porta: 8081 contexto de contexto: /Springbootperson: Nome: Xiaoleiage: 21
Application-B.yml
Servidor: Porta: 8081 contexto de contexto: /Springbootperson: Nome: Xiaopang Idade: 22
O Springboot adiciona, exclui e alterações para verificar exemplos
Estrutura completa do projeto
Uso do controlador
Uso do controlador
@Controller Chu lida com a solicitação HTTP
@RestController New Anotation Após o Spring4, acontece que o retorno JSON exige @ResponseBody para cooperar com @Controller
@RequestMapping Configurar mapeamento de URL
Pedidos de estilo de descanso
Para anotações sobre métodos no controlador
@RequestMapping (value = "/hello", método = requestMethod.get) @RequestMapping (value = "/hello", método = requestmethod.post) @RequestMapping (value = "/hello", método = requestmethod.Delete) @RequestMapping (value = "/hello", método = solicitação
Springboot simplifica a anotação acima
@GetMapping (value = "/Girls") @PostMapping (value = "/Girls") @putMapping (value = "/Girls/{id}") @deleletemapping (value = "/Girls/{id}")O navegador precisa enviar solicitações de maneiras diferentes e você pode instalar o plug-in HttPrequester, e o Firefox Browser pode procurar diretamente esse componente para instalar.
Spring-Data-Jpa
JPA Nome completo Java Persistence API.JPA Descreve o relacionamento de mapeamento de uma tabela de relação de objetos através da anotação JDK 5.0 ou XML e persiste os objetos da entidade em execução no banco de dados.
Hibernate3.2+, TopLink 10.1.3 e OpenJPA fornecem implementação JPA.
Crie um banco de dados MySQL usando JPA
Pom.xml adiciona dependências JPA e MySQL
<Ependency> <PuerpId> org.springframework.boot </frugiD> <stifactId> primavera-boot-starter-data-jpa </stutifactId> </dependency> <pendência> <puperid> mysql </frupid> <stifactId> mysql-conconsector-Java </SSQL </groupid>
Configurando JPA e banco de dados
Application.yml
Primavera: Perfis: Ativo: A DataSource: Nome do Driver-Class: com.mysql.jdbc.driver URL: JDBC: MySQL: //127.0.0.1: 3306/db_person nome de usuário: root senha: root jpa: hibernate: DDL-AUTO: atualização SHOWM Show
O formato é importante
Você precisa criar o banco de dados DB_PERSON manualmente
Crie uma classe de entidade pessoa correspondente à tabela de dados
Person.java
pacote com.jxust.entity; importar javax.persistence.entity; importar javax.persistence.GeneratedValue; importar javax.persistence.id;/** * Criado por Peng * tempo: 2016/12/16 17:56 */ @entitypublic Pessoa {@id @GenerDvalue particular nome de string privado; idade inteira privada; // O construtor deve ser público () {} public integer getId () {return id; } public void SetId (ID inteiro) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public integer getage () {retorna idade; } public void setage (idade inteira) {this.age = Age; }}Depois de executar o projeto, verifique o banco de dados e a pessoa da tabela será criada automaticamente
mysql> use db_person; banco de dados alterado pessoa;+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Nulo | |+-----------------
Em seguida, você pode adicionar, excluir, modificar e verificar a tabela de pessoas
Crie controlador personcontroller.java
Primeiro, crie um interface PersonRepository, localizado no pacote Dao. O PersonController chama o método herdado do JParepository para obter interação com o banco de dados.
A função dessa interface do PersonRepository é semelhante à função da interface da camada DAO na estrutura do SSM; Na estrutura do SSM, a camada de serviço executa indiretamente as instruções SQL correspondentes no arquivo de mapeamento de banco de dados MYBATIS (.xml) através dessa interface e executa as operações de adição, exclusão, modificação e pesquisa no banco de dados. (Mapper implementa automaticamente a interface Dao)
PersonRepository.java
pacote com.jxust.dao; importação com.jxust.entity.person; importar org.springframework.data.jpa.repository.jparepository;/** * criado por peng * tempo: 2016/12/16 18:07 */interface pública Pessoa.
PersonController.Java
pacote com.jxust.controller; importar com.jxust.dao.personRepository; importar com.jxust.entity.person; importar org.springframework.beans.factory.annotation.autowired; imported; org.springframework.web.bind.annotation.restcontroller; importar java.util.list;/** * Criado por Peng * Hora: 2016/12/16 18:04 */ @RestControllerpublic Class Personcontroller {@AutOnTowired PersonRepository PersonrePository; @GetMapping (value = "/pessoa") Lista privada <Pesso> PERSONLIST () {return PersonRepository.findall (); }}Adicione duas peças de dados ao banco de dados
mysql> selecione * da pessoa;+---+-----+------+| id | idade | Nome |+----+-------+-------+| 1 | 23 | Charlotte || 2 | 21 | Ma dongmei |+----+-------+------+2 linhas no conjunto (0,04 s)
Inicie a solicitação de execução do projeto http: // localhost: 8081/springboot/pessoa
Declarações SQL Saída pelo console:
Hibernate: selecione Person0_.id como id1_0_, PERSON0_.AGE como AGE2_0_, PERSON0_.NAME COMO NOME3_0_ FROM PESOOL PESOLE0_
Outros métodos para adicionar, excluir, modificar e verificar
PersonController.Java
..../** * Adicione uma pessoa * * Nome @param * @param Age * @return */@PostMapping (value = "/pessoa") Pessoa pública Personadd (@RequestParam ("Nome") Nome da sequência, @RequestParam ("Age") Age Age) {pessoa pessoa = nova pessoa (); pessoa.SetName (nome); Person.setage (idade); Retornar PERSONREPOSIITY.SAVE (PESSOA); }/** * Consulta uma pessoa * * @param id * @return */@getMapping (value = "/pessoa/{id}") Pessoa pública Personfindone (@Pathvariable ("id") Id ID) {return PersonRepository.findone (id); }/** * Exclua uma pessoa * * @param id */@deleletemapping (value = "/pessoa/{id}") public void persondelete (@pathvariable ("id") inteiro id) {PessoaRrepository.Delete (id); }/** * Atualize uma pessoa * * @param id * @param nome * @param Age * @return */@putMapping (value = "/pessoa/{id}") public Person Pessopdate (@PathVariable ("ID") ID ID, @RequestParam (Nome ") Nome, @requestam" Ano "Ano" Ano) (@RequestParam (Nome ") String, @Requestam (" Ano "Ano") ID (@RequestParam (Nome)) pessoa.setId (id); pessoa.SetName (nome); Person.setage (idade); Retornar PERSONREPOSIITY.SAVE (PESSOA); }O método de solicitação correspondente é:
Consulte um usuário:
Adicione um usuário
Exclua um usuário (sem valor de retorno)
Atualize um usuário
Então, posso verificar com base na idade? A resposta é que ainda não é possível
A partir das declarações do console, pode -se observar que as declarações SQL são consultadas com base no ID
Hibernate: selecione PERSON0_.ID AS ID1_0_0_, PERSON0_.AGE como AGE2_0_0_, PERSON0_.
Consulta por idade
Adicione um método ao PersonRepository FindByage (Idade Inteiros)
interface pública PersonRepository estende JPoSepository <Pessoa, Integer> { / ** * Consulta by Age * Nome do método FindByage * @param Age * @return * / list public <Sesso> findbyage (idade inteira);}Adicione o método de consulta correspondente ao PersonController
..../** * Query by Age * @param Age * @return */@getMapping (value = "/pessoa/idade/{idade}") lista pública <SOYSE> PERSONLISTBYAGE (@PathVariable ("idade") Idade inteira) {return PersonRepository.findbyage (idade); }Digite o pedido http: // localhost: 8081/springboot/pessoa/idade/23 para consultar a pessoa com 23 anos
O console produz a instrução SQL:
Hibernate: selecione PERSON0_.ID AS ID1_0_, PERSON0_.AGE como AGE2_0_, PERSON0_.
Gerenciamento de transações
Duas instruções SQL são executadas em um método ao mesmo tempo. Para impedir que uma instrução SQL seja executada com sucesso e a outra instrução SQL de falha, o gerenciamento de transações é introduzido. A anotação da transação @Transaction é necessária para adicionar o método.
As transações garantem a integridade e a consistência dos dados do banco de dados
Persevice.java
Em Personcontroll
pacote com.jxust.service; importar com.jxust.dao.personRepository; importar com.jxust.entity.person; importar org.springframework.beans.factory.annotation.autowired; import org.springframework.tereotype.Service; 2016/12/16 19:30 */ @ServicePublic Class Persenservice {@AUTOWIRED PERSONEPOSITE PERSONEPOSITEMENTE; / *** Teste de gerenciamento de transações* Duas peças de dados são bem -sucedidas ao mesmo tempo ou não são bem -sucedidas ao mesmo tempo* Verifique se a integridade e a consistência dos dados do banco de dados*/ @Transaction Public void inserttwo () {persona = new Person (); persona.setName ("qiuya"); persona.setage (19); PersonRepository.Save (Persona); System.out.print (1/0); Pessoa personb = nova pessoa (); personb.setName ("Mengtejiao"); personb.setage (25); PersonRepository.Save (Personb); }}Teste em er
... @AUTOWIRED PERSONSVICE PERSONSERVAÇÃO PRIVADO; .../*** Teste de transação*/@PostMapping ("/pessoa/dois") public void PERSONTWO () {PERSOnservice.inserttwo (); }Execute o projeto e execute o método de postagem de solicitação http: // localhost: 8081/springboot/pessoa/dois
A primeira parte dos dados não foi adicionada ao banco de dados, indicando que há gerenciamento de transações
Complete PERSONCONTROLLER.JAVA, PESOLEPOSIITY.JAVA e POM.XML
PersonController.Java
pacote com.jxust.controller; import com.jxust.dao.personRepository; importar com.jxust.entity.person; importar com.jxust.service.personservice; importação org.springframework.bean.actory.annotation.aUTowired; java.util.list;/** * Criado por Peng * Hora: 2016/12/16 18:04 */ @RestControllerPublic Classe PessoController {@Autowired PersonRepository PersonRepository; @AUTOWIRED PERSONSERVICE PERSONSERVAÇÃO PERSONDIVADO; /** * Consulta a lista de todo o pessoal * * @return */@getMapping (value = "/pessoa") Lista privada <Pesso> PERSONLIST () {return PersonRepository.findall (); }/** * Adicione uma pessoa * * Nome @param * @param Age * @return */@PostMapping (value = "/pessoa") Pessoa pública Personadd (@RequestParam ("Nome") Nome da sequência, @RequestParam ("idade") INTEGER AGE) {pessoa pessoa = nova pessoa (); pessoa.SetName (nome); Person.setage (idade); Retornar PERSONREPOSIITY.SAVE (PESSOA); }/** * Consulta uma pessoa * * @param id * @return */@getMapping (value = "/pessoa/{id}") Pessoa pública Personfindone (@Pathvariable ("id") Id ID) {return PersonRepository.findone (id); }/** * Exclua uma pessoa * * @param id */@deleletemapping (value = "/pessoa/{id}") public void persondelete (@pathvariable ("id") inteiro id) {PessoaRrepository.Delete (id); }/** * Atualize uma pessoa * * @param id * @param nome * @param Age * @return */@putMapping (value = "/pessoa/{id}") public Person Pessopdate (@PathVariable ("ID") ID ID, @RequestParam (Nome ") Nome, @requestam" Ano "Ano" Ano) (@RequestParam (Nome ") String, @Requestam (" Ano "Ano") ID (@RequestParam (Nome)) pessoa.setId (id); pessoa.SetName (nome); Person.setage (idade); Retornar PERSONREPOSIITY.SAVE (PESSOA); }/** * Query by Age * @param Age * @return */@getMapping (value = "/Person/Age/{Age}") LISTA PUBLIC <PESSOOW> PERSONLISTBYAGE (@PathVariable ("Age") Idade inteira) {Return PersonRepository.FindByage (idade); }/*** Teste de transação*/@PostMapping ("/pessoa/dois") public void PERSONTWO () {PERSOnservice.inserttwo (); }}PersonRepository.java
pacote com.jxust.dao; import com.jxust.entity.person; importar org.springframework.data.jpa.repository.jparepository; importar java.util.list; Consulta by Age * Nome do método corrigido * @param Age * @return */ list public <sesson> findbyage (idade inteira);}
pom.xml
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <lodelVersion> 4.0.0 </modelVersion> <proupid> com.jxust </groupsion> 4.0.0 </modelVersion> <vroupId> com.jxust </groups> <TarifactId> Spirngbootdemo </starfactId> <versão> 0.0.1-snapshot </version> <bacaging> jar </acheging> <name> spirngbootdemo </name> <cription> Projeto Demo para a inicialização da primavera </cription> <puri> <purgid> org.sPringFamework.Boot </grouping> <roux> <voupid> org.sPringFramwork.Boot </grouping> <roux> <voupid> org.sPringFramwork.Boot </groupd> <roux> <Gruerid> Org.sPringFramwork <roupd> </ArtifactId> Spring-Boot-Starter-Parent </ArtifactId> <Versão> 1.4.2.Release </siers> <RelityPath/> <!-Lookup Parent do Repositório-> </a Parent> </projecties> <Projed.build.sourcencoding> utf-8 </projecties> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <putcional> true </pecptional> </dependency> <pendence> <puperid> org.springframework.boot </groupiD> <TRARFACTID> Spring-Boot-Starter-Data-jpa </tutifactId> </dependência> <ependency> <Grupid> Mysql </GroupId> Artifactid> </dependency> </dependency> </fruct> <flugins> <flugin> <puperid> org.springframework.boot </groupiD> <TRARFACTID> spring-boot-maven-pplugin </artifactId> </flugin> </flugins> </filt> <//Projectin
Resumir
O acima exposto é uma explicação detalhada da adição de banco de dados Intellij Idea Springboot, exclusão, modificação e exemplos de pesquisa introduzidos pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!