SpringBoot就是这么简单
一、SpringBoot入门
今天在慕课网中看见了Spring Boot这么一个教程,这个Spring Boot作为JavaWeb的学习者肯定至少会听过,但我是不知道他是什么玩意。
只是大概了解过他是用起来很方便,不用什么配置的。于是我就花了点时间去跟着学习了。
视频地址:http://www.imooc.com/learn/767
教程中的代码:https://gitee.com/liaoshixiong/girl
1.1SpringBoot启动
在教程中,启动SpirngBoot有三种方式:
- 在idea中直接使用启动(最常用)
- 使用mvn 命令来启动
- 使用mvn编译,而后在class目录生成jar包,使用Java命令来启动
1.2项目属性配置
使用SpringBoot作为我们的框架,连Tomcat都不用自己配置。Tomcat默认的端口是8080。那如果我们要改端口的话,怎么改呢??项目中可能有一些属性变量,那怎么配置呢???
SpringBoot是提供了application.properties这种配置文件供我们使用的。
但是,我们可以有更好的配置方式,使用yml文件,这种配置文件使用起来就更加简洁了。
在yml文件中配置属性,那么我们在Controller中可以使用@value属性来进行获取。


如果我们的配置属性是有规律的(是分类的),比如为System系统配置的属性,我们可以创建一个Java类来进行管理。
那么在获取的时候就不需要使用@value属性来分别获取了。直接获取Java类的成员变量就行了。


当然了,这里涉及到了两个注解:
@configurationProperties@Component
再举个例子,我们的生产环境和开发环境的配置变量很有可能是不一样的,比如:我们的path变量在开发环境中是:http://localhost:8080。而我们的生产环境中的path路径是:zhognfucheng.site。这就造成了差异,在springBoot中,这种差异就很好解决了。

- 可以将开发环境的配置文件和生产环境的配置文件分开,使用总配置文件指定使用的是哪个配置文件。
- 在使用java变量启动Springboot项目的时候,可以指定使用哪个配置文件。
二、回顾
2.1Controller的使用
SpringBoot已经不推荐使用JSP了,推荐使用模版来返回页面。thymeleaf这个模版,如果在返回页面的时候出错了,看看是不是没有使用模版。
@RestController = @Controller + @ResponseBody
2.2统一处理异常
统一处理异常我在Struts2、springMVC的时候都已经接触过了,方法都是类似的。定义一个自己系统的异常,为了更好地排查出错误所在。
而这个课程的统一处理异常我又学到了不少的东西:
- 我们在Controller一般返回的是JSON数据给前端页面,如果出现了异常,你单独抛出了异常,如果没有做任何的处理,返回的JSON格式一定和成功的访问的是不一样的,那么这就会造成前台在解析的时候可能会有混乱。为了解决这种情况,我们可以单独封装一个类来进行返回,类的成员变量:code,message,data。有了这个类,那么返回的JSON格式就是相同的了。
- 前边说到了返回类的code,这个code最好就不要单独写出来。可以使用一个枚举来进行维护。这样的话就非常方便我们去操作了。
- service抛出自定义异常、controller也抛出自定义异常。由Spring的异常处理器来进行捕获、对其进行输出、返回JSON给前台页面。
2.3AOP
SpringBoot环境下使用AOP,也是需要导入maven坐标的。知识点都和spring学习的差不多...
使用日志记录可以使用sl4jlog,这个是Spring自带的。

在返回给浏览器前记录返回的数据:

三、知新
3.1 SpringData JPA
SpringData JPA直接倒是听过,但是没了解过。课程说它就是一个标准,能够方便我们对数据库的CURD。
也去网上看了些资料,它的默认实现是Hibernate,因此,使用JPA,就相当于使用Hibernate了。
我认为它实际上就是封装了Hibernate的API,另Hibernate的开发又更加简单了。
创建一个接口,实现JPA所给出的接口,那么我们自己创建的接口就有了JPA也就是Hibernate的API了。
课程中使用的是RESTful风格的API实现增删改查:

3.2IDEA类似与POSTMAN
视频作者使用的是POSTMAN软件来进行对http请求的测试的,在评论留言说IDEA也有这样的功能:
idea 有个 rest client 可以代替postman Tools -> Test RESTful web service
我也顺利找到了..

既然是使用了RESTful的风格,那么在Controller了就可以使用GetMapping、PutMapping、DeleteMapping这样的注解了。
3.3单元测试
在service层做单元测试的和我之前学过的单元测试是一样的,就是autowired一个service对象然后就测试方法就行了。
而测试Controller、在教程中也称之为测试API,这就是我第一次接触了。测试API其实就是模拟使用HTTP来进行测试。
使用到了MOCK这么一个对象来帮我们进行测试:

还有要注意的是:如果使用mvn来进行打包的话,那么打包的时候会自动帮我们进行单元测试的。因此,我们有的时候不想他打包的时候进行单元测试,就需要写以下的参数了:

3.4热部署和热加载
在学习完上面SpringBoot以后,我觉得并不过瘾、随后又发现了一个课程:http://www.imooc.com/learn/915
在标题上写着的是SpringBoot和热部署。于是我又进去学习了。
好的,回到热部署和热加载。------
热部署和热加载这两个名词其实我刚开始是搞不清的,不过这两个名词我都是听过的。因为我在Idea中使用了JRebel这个插件了,了解了大概的。
热部署代表的是:我们不需要重启服务器,能够将新war包替换旧的war包。
热加载代表的是:我们不需要重启服务器,就能够类检测得到,重新生成类的字节码文件
无论是热部署或者是热加载、都是基于Java类加载器来完成的。
3.4.1Java类加载过程

Java文件被编译成字节码文件、classloader将字节码文件放在JVM上运行。

验证阶段:字节码文件不会对JVM造成危害
准备阶段:是会赋初始值,并不是程序中的值。比如:int=0
解析阶段:符号引用变成直接引用
初始化阶段:初始化程序的值、有5个情况会导致执行初始化时机:new、reflect、先初始化父类再初始化子类、main方法、JDK1.7动态语言 ref_
final修饰的并不会触发,因为他会放在常量池中。


在里边还有使用java代码的时候来实现热加载的,我就没有去敲了。用到再回过去吧。!
3.4.2Tomcat热部署
tomcat 可以使用3种方式实现热部署:
直接启动tomcat后再把项目放进webapp
修改servlet.xml中,context标签中加入属性实现
通过自定义xml文件,放在localhost文件下面。我觉得就是第二点的延伸
3.4.3SpringBoot热部署
springBoot热部署3种方式:
1、在plugin标签中加入插件
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
</dependencies>
进入pom文件的目录输入 mvn spring-boot:run启动
2、启动的加入参数 引用springloaded jar包
-javaagent:'jar包路径' -noverify
3、pom文件加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
2018年1月2日15:02:13
最后根据下面这篇博文来使用SpringBoot热部署:http://blog.csdn.net/u013938484/article/details/77541050
值得注意的是:在IDEA下不是自动编译的,因此是需要按Ctrl+F9才能实现!
四、扩展阅读
后来我使用了SpringBoot搭建了一个简单的项目,从中也遇到了不少的问题和相关的没有接触到的知识点。下面我会给出当时搜索到的资料和遇到的问题以及解决方案
4.1 SpringBoot教程参考资料:
- http://blog.didispace.com/Spring-Boot%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/
- http://www.cnblogs.com/magicalSam/p/7196340.html
- springBoot整合mybatis,这次是没有用到的,可能以后会用到:
- springBoot Github Demo:
- 与流行框架整合的Demo(慕课网,对应有课程的)
4.2 SpringBoot遇到的问题以及解决资料
- 测试Controller使用MockMVC测试
- springBoot拦截器
- SpringBoot拦截器无法注入Bean
- 出现: Could not find acceptable representation原因及解决方法
- http://blog.csdn.net/neosmith/article/details/51557957
- 或者是因为返回的JSON数据,而你返回了一个页面(使用RESTCONTROLLER没有注意)
- springBoot下使用统一异常处理方法:
- springBoot集成Freemarker
五、最后



SpringBoot能使我们简化繁琐的配置,简化Maven包的依赖(缺点:同时加入一些我们不需要的包)。总体来看的是一个非常好用的框架(集成了很多有用的功能,与其他框架整合十分方便),学习成本很低(如果学过SpringMVC,分分钟就上手),非常合适用来搭建环境。
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y
SpringBoot就是这么简单的更多相关文章
- 在商城系统中使用设计模式----简单工厂模式之在springboot中使用简单工厂模式
1.前言: 不了解简单工厂模式请先移步:在商城中使用简单工厂.在这里主要是对springboot中使用简单工厂模式进行解析. 2.问题: 什么是简单工厂:它的实现方式是由一个工厂类根据传入的参数,动态 ...
- 使用springboot写一个简单的测试用例
使用springboot写一个简单的测试用例 目录结构 pom <?xml version="1.0" encoding="UTF-8"?> < ...
- springboot搭建一个简单的websocket的实时推送应用
说一下实用springboot搭建一个简单的websocket 的实时推送应用 websocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议 我们以前用的http协议只能单 ...
- SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解
SpringBoot概念 Spring优缺点分析 Spring优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品,无需开发重量级的 ...
- SpringBoot IntelliJ创建简单的Restful接口
使用SpringBoot快速建服务,和NodeJS使用express几乎一模一样,主要分为以下: 1.添加和安装依赖 2.添加路由(即接口) 3.对路由事件进行处理 同样坑的地方就是,祖国的防火墙太 ...
- SpringBoot入门之简单配置
今天下载了<JavaEE开发的颠覆者SpringBoot实战>这本书,发现Spring还有好多遗漏的部分,算是又恶补了一下,今天主要是学习下SpringBoot的配置. 一.基本配置 1. ...
- 【第十一章】 springboot + mongodb(简单查询)
1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...
- springboot入门之简单demo
项目构建 我们采用maven构建SpringBoot工程,首先创建一个maven工程,对应的pom文件如下: <properties> <java.version>1.8< ...
- 第十一章 springboot + mongodb(简单查询)
1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...
随机推荐
- Node.js入门(含NVM、NPM、NVM的安装)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以 ...
- 剑指offer第四天
25.复杂链表的复制 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的 ...
- 剑指offer 第一个只出现一次的字符 hash
思路:i表示字符的ASCII码值,cntp[i]表示字符出现的次数. AC代码 class Solution { public: int FirstNotRepeatingChar(string st ...
- uva1625
思路:每次选择颜色面临有两个选择:1.序列A的首部颜色 2.序列B的首部元素,定义状态d[i][j]表示A序列已经选取了前i个颜色,B序列已经选取了前j个颜色的情况下最小的L(c)总和. 状态转移:c ...
- LRUCache原理分析
一.注释 LRUCache的原理,基本都在注释里面描述清楚了. /** * A cache that holds strong references to a limited number of va ...
- spider RPC更新至2.0.0-RELEASE
spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS金融交易系统的特性进行针对性和重点设计,以更加灵活和高效的满足金融交易系统多租户.高可用 ...
- cips2016+学习笔记︱NLP中的消岐方法总结(词典、有监督、半监督)
歧义问题方面,笔者一直比较关注利用词向量解决歧义问题: 也许你寄希望于一个词向量能捕获所有的语义信息(例如run即是动车也是名词),但是什么样的词向量都不能很好地进行凸显. 这篇论文有一些利用词向量的 ...
- linux之x86裁剪移植---ffmpeg的H264解码显示(420、422)
在虚拟机上yuv420可以正常显示 ,而945(D525)模块上却无法显示 ,后来验证了directdraw的yuv420也无法显示 ,由此怀疑显卡不支持 ,后把420转换为422显示. 420显示如 ...
- javax.el.PropertyNotFoundException:Property 'statisDate' not found on type java.lang.String
1.错误描述 javax.el.PropertyNotFoundException:Property 'statisDate' not found on type java.lang.String 2 ...
- 原生js简单调用百度翻译API实现的翻译工具
先来个在线demo: js翻译工具 或者百度搜索js简单调用百度翻译API工具(不过有个小小的界面显示bug,我想细心的人应该会发现) 或者直接前往该网址:js翻译工具 或者前往我的github:gi ...