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,一经查实,立即删除!

相关文章

使用Couchbase分页

如果对Couchbase集群进行查询时必须处理大量文档&#xff0c;则使用分页来逐页获取行很重要。 您可以在“ 分页 ”一章的文档中找到一些信息&#xff0c;但是我想在本文中提供更多详细信息和示例代码。 在此示例中&#xff0c;我将基于啤酒样本数据集创建一个简单的视图&#…

android 常用机型尺寸_不同手机/设备和操作系统版本上的Android堆大小

素胚勾勒不出你不仅手机生产商&#xff0c;而且任何创建Android操作系统版本的人&#xff0c;都可以根据设备的特定需求&#xff0c;指定允许的最大堆大小。一些Android根&#xff0c;如CyanogenMod&#xff0c;甚至允许用户自己选择堆大小作为设置。可以使用该方法检测允许的最…

vue移动端项目缓存问题实践

最近在做一个vue移动端项目&#xff0c;被缓存问题搞得头都大了&#xff0c;积累了一些经验&#xff0c;特此记录总结下&#xff0c;权当是最近项目问题的一个回顾吧&#xff01; 先描述下问题场景&#xff1a;A页面->B页面->C页面。假设A页面是列表页面&#xff0c;B页…

pdf解析与结构化提取

PDF解析与结构化提取 PDF解析 对于PDF文档&#xff0c;我们选择用PDFMiner对其进行解析&#xff0c;得到文本。 PDFMiner PDFMiner使用了一种称作lazy parsing的策略&#xff0c;只在需要的时候才去解析&#xff0c;以减少时间和内存的使用。要解析PDF至少需要两个类&#xff1…

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…

java 字符串转utc时间_JAVA 本地时间字符串转UTC时间字符串

本来想偷懒百度一个时间字符串转UTC的代码&#xff0c;但发现没有一个能用&#xff0c;写得还复杂得要死&#xff0c;没办法还是自己撸一个。/*** UTC时间字符串转本地时间字符串* 我的本地getDateTimeInstance()是格式&#xff1a;yyyy-MM-dd HH:mm:ss* param str UTC时间字符…

前端解读面向切面编程(AOP)

前言 面向对象(OOP)作为经典的设计范式&#xff0c;对于我们来说可谓无人不知&#xff0c;还记得我们入行起始时那句经典的总结吗-万事万物皆对象。 是的&#xff0c;基于OOP思想封装、继承、多态的特点&#xff0c;我们会自然而然的遵循模块化、组件化的思维来设计开发应用&a…

windows和linux允许分片,请问hadoop的hdfs文件系统和本地windows文件系统或linux文件系统是什么关系啊,谢谢...

虚拟文件系统 Virtual File Systems(VFS)Linux 是近年来发展起来的一种新型的操作系统&#xff0c;其最重要的特征之一就是支持多种文件系统&#xff0c;使其更加灵活&#xff0c;从而与许多其它的操作系统共存。Linux支持ext&#xff0c;ext2&#xff0c;xia&#xff0c;minix…

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…

《架构即未来》读后感

前言 有将近2年没有写文章了&#xff0c;首先是不知道分享什么&#xff0c;其次就是工作也比较忙&#xff0c;闲暇的时间要么玩游戏、听小说、看电影&#xff0c;虽然也有看书但其实也并不多&#xff0c;以上也都是为了我的懒惰所找的一些借口。 虽然到现在为止也看了百来本书&…

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…

搭建自动安装的linux,RedHat7搭建无人值守自动安装Linux操作系统(PXE+Kickstart)

Kickstart服务器IP: 192.168.136.253 掩码&#xff1a;255.255.255.0 网关&#xff1a;192.168.136.2 DNS&#xff1a;192.168.136.2安装部署yum源服务器参考 http://www.cnblogs.com/edward2013/p/5020113.html安装部署DHCP服务器# yum -y install dhcp修改配置文件# vi…

Numpy数组的保存与读取方法

1. 数组以二进制格式保存 np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下&#xff0c;数组以未压缩的原始二进制格式保存在扩展名为npy的文件中&#xff0c;以数组a为例 np.save("filename.npy",a)b np.load("filename.npy")利用这种方法…

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…