spring boot(一)入门

目录

  • spring boot(一)入门
    • 一、简介
      • 1、微服务的概念
      • 2、什么是spring boot
      • 3、快速入门
      • 4.springboot的快捷部署

spring boot(一)入门

一、简介

1、微服务的概念

说起spring boot,我们不得不说一下“微服务”一词的兴起,微服务一词最早起源于2014年,martin fowler发表的一篇文章Microservices,martin fowler在文中这样描述了微服务的概念。

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.

简而言之,微服务就是一种架构风格,即服务微化,一个服务应该是一组小型服务;服务之间通过HTTP的方式进行互通,相较于传统的ALL IN ONE单体架构方式,微服务将每一个功能元素最终都是一个可独立替换和独立升级的软件单元。

2、什么是spring boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者 ——百度百科

众所周知,最流行的、最受Java开发者喜好的框架当属Spring,Spring也成为了在Java EE开发中真正意义上的标准,但是随着新技术的发展随着新技术的发展,在这个脚本语言大行其道的时代(Node JS,Ruby,Groovy,Scala等),Java EE使用Spring逐渐变得笨重起来,大量的XML文件存在于项目中,繁琐的整合配置,复杂的监控,低下的开发效率和部署效率等等问题。spring boot的出现解决了上述的问题,让我们更加高效快速的使用spring框架。

  1. 习惯优于配置的原则,默认的配置已经满足我们日常开发的大部分要求。
  2. 快速搭建组合各个模块功能的提供,无需配置的整合第三方框架。
  3. 零XML配置,只需要自动配置和Java Config。
  4. 内嵌Servlet容器,降低环境的要求,更快更多方式的启动项目的方式。
  5. 更便捷的应用状态监控。
  6. 与云计算spring cloud组成J2EE一站式解决方案。

3、快速入门

3.1 环境及工具

  • jdk1.8:Spring Boot 推荐jdk1.7及以上;我们使用java version "1.8.0_152"。
  • 目前最新的springboot,spring boot 2.1.0 BUILD-SNAPSHAT 要求Java 8 or 9 和 Spring Framework 5.1.0.BUILD-SNAPSHOT 以上。
  • IntelliJIDEA2018:我使用的是 IntelliJ IDEA 2018.1.3 x64、STS。
  • SpringBoot : 使用1.5.10.RELEASE。

3.2 Maven设置

给maven 的settings.xml配置文件的profiles标签添加指定jdk版本

<profile><id>jdk‐1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>

3.3 IDEA设置

1212477-20180907182739296-1305362244.png

3.4 Hello World

创建一个maven工程(jar工程)

1212477-20180907182800661-1416550649.png

pom.xml中导入spring boot的依赖,根据官方文档的快速开始,引入一下依赖:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version>
</parent><!-- Additional lines to be added here... --><!-- (you don't need this if you are using a .RELEASE version) --><repositories><repository><id>spring-snapshots</id><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><url>https://repo.spring.io/milestone</url></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><url>https://repo.spring.io/snapshot</url></pluginRepository><pluginRepository><id>spring-milestones</id><url>https://repo.spring.io/milestone</url></pluginRepository></pluginRepositories>

Spring Boot提供了许多“Starters”,可以将jar添加到类路径中,spring-boot-starter-parent是一个特殊的启动器,提供有用的Maven默认值,其他“Starters”提供了在开发特定类型的应用程序时可能需要的依赖项。由于我们正在开发Web应用程序,因此我们添加了 spring-boot-starter-web依赖项。在此之前,我们可以通过运行以下命令来查看当前的内容

$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

也可以在idea中 使用ctrl+alt+shift+u 查看依赖图如下:

1212477-20180907182823716-612813111.png

可以看到它spring-boot-starter-parent本身不提供依赖关系。要添加必要的依赖项,请编辑pom.xmlspring-boot-starter-web在该parent部分的正下方添加 依赖项:

<dependencies> <dependency> <groupId> org.springframework.boot </ groupId> <artifactId> spring-boot-starter-web </ artifactId> </ dependency> 
</ dependencies>

再次查看依赖图:如下

1212477-20180907182837365-962247002.png

3.5 编写主程序启动应用

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @program: springboot-01-HelloWorrld** @description: springboot主程序类** @author: cxw** @create: 2018-09-07 14:34**///springmvc的注解,提供web服务,接收浏览器请求并,向浏览器响应等同 @controller和@responseBody注解
@RestController
@EnableAutoConfiguration
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
  1. @RestController@requestmapping注解是Spring MVC注解。(它们不是特定于Spring引导的。)有关更多细节, 请参阅Spring参考文档中的MVC部分。
  2. 第二个注解@EnableAutoConfiguration,这个注解告诉springboot,让它猜测你想基于你添加的jar依赖去如何配置spring,由于Spring boot-starer-web添加了Tomcat和Spring MVC,所以自动配置会假设您正在开发一个web应用程序并帮您相应地设置Spring。
  3. 应用程序的最后一部分是main方法。这只是一个标准的方法,它遵循Java约定的应用程序入口点。我们的main方法通过调用run来委托Spring Boot的SpringApplication类。SpringApplication引导我们的应用程序,启动Spring,然后启动自动配置的Tomcat web服务器。我们需要Application类作为运行方法的一个参数,用来告诉SpringApplication,它是主要的Spring组件。args数组命令行参数也作为参数传递给SpringApplication。

3.6 编写controller响应浏览器请求

    /*** home方法 向浏览器响应 Hello World*/@RequestMapping("/hello")public String home(){return "Hello World";}

3.7 运行main方法,启动程序

1212477-20180907182857533-1170117574.png

浏览器访问localhost:8080/hello

1212477-20180908175859562-1474468205.png

可以看到,我们第一个spring boot项目已经启动了。另外我们看到,这里Applicationjava被配置为自动配置的控制器,而且对于@EnableAutoConfiguration注解我们使用不熟悉,很容易忘记在控制层添加注解,其实spring boot 是可以使用一个主程序启动spring bot项目,然后我们按照我们传统的controller,service,dao三层编写我们的程序,我们改进一下项目如下:

  1. 首先springboot的主程序入口:

    //@SpringBootApplication 来标注一个主程序类,
    //说明这是一个Spring Boot应用
    @SpringBootApplication 
    public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
    }
    
    1. 我们定义两个Controller控制层HelloController和HomeController,按照springmvc的方式,接收请求,返回响应。

      package cn.news.chen.controller;/*** Project springboot-01-HelloWorrld* User cxw* Date 2018/9/7* Time 16:08* Description:*/import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.ResponseBody;/*** @program: springboot-01-HelloWorrld** @description: springboot控制层** @author: cxw** @create: 2018-09-07 16:08**/
      @Controller
      @RequestMapping("/a")
      public class HomeController {@RequestMapping("/b")@ResponseBodypublic String hello(){return "这是我的第一个spring boot应用";}
      }
      
      1. 启动访问:

    1212477-20180907183232529-1212226469.png

    HelloController.java

    package cn.news.chen.controller;/*** Project springboot-01-HelloWorrld* User cxw* Date 2018/9/7* Time 16:39* Description:*/import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;/*** @program: springboot-01-HelloWorrld** @description: 控制层HelloController** @author: cxw** @create: 2018-09-07 16:39**/
    //@RestController和这个注解都是类级别的,使用@RestController说明该类下的所有方法都是向浏览器
    //响应
    @Controller 
    public class HelloController {/*** home方法 向浏览器响应 Hello World*/@RequestMapping("/hello")@ResponseBodypublic String home(){return "Hello World";}
    }
    

    启动访问:

1212477-20180907183253866-632518344.png

  注意:如果按照`@SpringBootApplication`主程序的方式使用springboot,类Application.java 要在需要控制的springboot 组件的顶级包或者同一级的包下,才能使用主程序类启动spring boot程序,springboot建议的目录结构如下:com+- myproject+- demo+- Application.java|+- domain|  +- User.java|  +- UserRepository.java|+- service|  +- UserService.java|+- controller|  +- UserController.java|1、Application.java 建议放到根目录下面,主要用于做一些框架配置。2、domain目录主要用于实体(Entity)与数据访问层(Repository)。3、service 层主要是业务逻辑层。4、controller 负责页面访问控制。

4.springboot的快捷部署

首先,我们要在pom.xml文件中添加spring boot的打包(jar)插件,官网文档中,给我们指出了使用的依赖,如图:

1212477-20180907183537767-1907560572.png

pom.xml添加如下内容:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

然后,我们使用maven将我们的spring boot项目打包

1212477-20180907183555448-449308956.png

可以看到在我们项目的target目录下,已经打包成功了。我们使用jar包启动的方式,启动一下我们的springboot项目。

1212477-20180907183607861-167610471.png

使用java -jar 的方式依然可以启动我们的springboot项目,并且可以正常访问,由此可以看到我们的springboot 使用嵌入式的Servlet容器,应用无需打成WAR包, starters自动依赖与版本控制,大量的自动配置,简化开发,真正做到了 J2EE一站式解决方案。

转载于:https://www.cnblogs.com/cxwzss/p/9593062.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识

首先从linux dmesg来认识usb:<6>[ 19.610046] msm_hsic_host msm_hsic_host: Qualcomm EHCI Host Controller using HSIC<6>[ 19.620391] msm_hsic_host msm_hsic_host: new USB bus registered, assigned bus number 1<6>[ 19.659942] msm_hsic_host …

Spring面试问题

还可以查看我们最新的文章69Spring面试问答-最终名单 。 1&#xff09;什么是春天&#xff1f; 回答&#xff1a; Spring是控件和面向方面的容器框架的轻量级转换。 2&#xff09;解释春天&#xff1f; 回答&#xff1a; 轻巧&#xff1a;在尺寸和透明度方面&#xff0c; S…

201771010120 苏浪浪 《面向对象程序设计(java)》第二周学习总结

理论知识总结 第三章Java基本程序设计结构 1、基本知识&#xff1a;&#xff08;1&#xff09;标识符&#xff1a;是由字母、下划线、美元符号和数字组成&#xff0c;且第一个符号不能为数字。&#xff08;2&#xff09;关键字&#xff1a;剧啊语言中被赋予特定意义的一些单词。…

Apache Camel简介

Apache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎&#xff0c;可以帮助开发人员以各种领域特定语言&#xff08;DSL&#xff09;&#xff08;例如Java&#xff0c;Spring / XML&#xff0c;scala等&#xff09;创建路由和中介规则。 骆驼用途广泛 Cam…

qt结构体嵌套结构体方法_9.2 C++结构体类型变量

C定义结构体类型变量的方法 1、先声明结构体类型再定义变量名&#xff0c;在定义了结构体变量后&#xff0c;系统会为之分配内存单元。struct Student{ //自定义结构体变量int num;//学号char sex;//性别int age;//年龄};2、在声明类型的同时定义变量 一般形式为struct 结构体名…

Vue解析--如何应对面试官提问

近期不断面试中&#xff0c;面试官都会提一些关于Vue相关的源码和“全家桶”之类的问题。那么针对这些提问&#xff0c;我们应该如何更好应答呢&#xff1f;在这里我把对Vue的理解整理出来供大家来参考。 1.Vue是什么&#xff1f; Vue是一套构建用户界面的渐进式框架&#xf…

Java开发人员的Erlang

您可能没有注意到&#xff0c;但是距离我上次发布博客已经过去了几个星期。 原因是我的Soleus骨折了&#xff0c;而我的腿也石膏了。 不能动弹&#xff0c;我认为调查完全不同的东西是个好主意–要么看那天的电视&#xff0c;要么&#xff0c;尽管Kojak和Magnum PI的重播很诱人…

20165339第六周学习总结

课本知识点总结 第八章 String类 使用String类声明对象并创建对象 String s new String("We are students"); String t new String("We are students"); String (char a[])用一个字符数组a创建一个String对象 char a[] {J,a,v,a}; String s new String(a)…

keil5用jlink不到芯片_洛达芯片检测

安卓手机下载一个络达官方的刷机软件然后连接上耳机&#xff0c;打开软件&#xff0c;就可以看到耳机芯片的相关信息。软件下载地址&#xff1a;https://pan.baidu.com/s/1MOXjkHv1wfxWWIVdcsMSFg 提取码: tasc我们的耳机都是络达芯片&#xff0c;不怕你检测&#xff0c;希望用…

层次和约束:项目中使用vuex的3条优化方案

问题描述 使用vuex的store的过程中&#xff0c;发现了一些不是很优雅的地方&#xff1a; store层module太多&#xff0c;找state、getter、mutation、action对应的module比较慢。 组件里面mapGetters、mapActions、mapMutations过多&#xff0c;分不清getter、action、mutati…

怎么让员工服从管理_为什么现在的员工执行力和服从性越来越差,管理一严格就辞职?...

当有负面情绪的时候&#xff0c;不要说。管好自己的嘴&#xff0c;有时候做哑巴&#xff0c;是一种境界。现在的企业很多都存在这个问题&#xff0c;员工执行力越来越差&#xff0c;服从性也越来越差&#xff0c;管理者稍微一严格&#xff0c;员工就会辞职走人&#xff0c;留不…

Spring Data REST的实际应用

什么是春天数据休息&#xff1f; spring-data-rest是spring-data项目的新增功能&#xff0c;它是一个框架&#xff0c;可帮助您将实体直接作为RESTful Web服务端点公开。 与rails&#xff0c;grails或roo不同&#xff0c;它不会生成任何实现此目标的代码。 spring data-rest支持…

2018上半年掘金微信群日报优质文章合集:前端篇

在掘金微信交流群里的小伙伴们&#xff0c;你们每天都还在坚持读小报吗&#xff1f;如果你的回答是yes&#xff0c;那真的要给你点一万个赞了?能坚持这么久&#xff0c;真的很优秀噢&#xff01;&#xff08;嗯&#xff0c;每天坚持给大家收集文章的小饼也很优秀?&#xff09…

linux运维笔试题目,linux运维相关的笔试题目_笔试题目

一、Linux系统和shell1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容&#xff0c;要求&#xff1a;①删除所有空行&#xff1b;②在非空行前面加一个“AAA”&#xff0c;在行尾加一个“BBB”&#xff0c;即将内容为“11111”的一行改为&#xff1a;“AAA11111BBB”…

python之路--day17-shelve,xml和re模块

shelve模块 shelve模块只有一个open函数&#xff0c;返回类似字典的对象&#xff0c;可读可写&#xff0c;key必须为字符串&#xff0c;而值可以是python所支持的数据类型 1 import shelve2 # info1{age:18,height:180,weight:80}3 # info2{age:73,height:150,weight:80}4 #5 #…

20172314 2018-2019-1《程序设计与数据结构》第一周学习总结

教材学习内容总结 概述 软件工程&#xff1a;是一门关于高质量软件开发的技术和理论的学科&#xff0c;用来控制开发过程&#xff0c;实现高质量的软件。软件工程的目标&#xff1a;正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率。 对于可靠性和健壮…

activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...

点击上方“好好学java”&#xff0c;选择“置顶”公众号重磅资源、干货&#xff0c;第一时间送达重磅推荐 ① 纯福利 | 公众号资源大汇总&#xff0c;一年才一次&#xff01;② 重磅&#xff01;&#xff01;2018年Java全套入门到进阶学习视频及项目实战③ 2018年java架构师学习…

前端解读控制反转(IOC)

前言 随着前端承担的职责越来越重&#xff0c;前端应用向着复杂化、规模化的方向发展。大型项目模块化是一种趋势&#xff0c;不可避免模块之间要相互依赖&#xff0c;此外还有很多第三方包。这样的话如何去管理这些繁杂的文件&#xff0c;是一个不可避免的话题。此时作为一种…

ASP.NET MVC传递参数(model), 如何保持TempData的持久性

一看到此标题&#xff0c;相信你也会。因为路由是可以从URL地址栏传过去的。但是Insus.NET不想在地址栏传递&#xff0c;还是一个条件是jQuery的Ajax进行POST的。Insus.NET不清楚别人是怎样处理的&#xff0c;但是这个让Insus.NET花上不少时间来解决。Insus.NET实现的方法也很简…

深度学习语音降噪方法对比_人工智能-关于深度学习的基础方法

深度学习概述深度学习的一些简介&#xff0c;其要点如下&#xff1a;深度学习实际上是基于具有多个隐藏层的神经网络的学习&#xff1b;深度学习的思想来源于人类处理视觉信息的方式&#xff1b;深度学习的发展得益于数据的井喷和计算力的飙升&#xff1b;深度学习的理论基础依…