SpringBoot就是这么简单

1、SpringBoot入门

今天在慕课网中看见了Spring Boot这么一个教程,这个Spring Boot做为JavaWeb的学习者确定至少会听过,但我是不知道他是什么玩意。html

只是大概了解过他是用起来很方便,不用什么配置的。因而我就花了点时间去跟着学习了。前端

视频地址:www.imooc.com/learn/767java

教程中的代码:gitee.com/liaoshixion…git

1.1SpringBoot启动

在教程中,启动SpirngBoot有三种方式(以开发环境角度):github

  • 在idea中直接使用启动(最经常使用)
  • 使用mvn 命令来启动
  • 使用mvn编译,然后在class目录生成jar包,使用Java命令来启动

1.2项目属性配置

使用SpringBoot做为咱们的框架,连Tomcat都不用本身配置。Tomcat默认的端口是8080。那若是咱们要改端口的话,怎么改呢??项目中可能有一些属性变量,那怎么配置呢???web

SpringBoot是提供了application.properties这种配置文件供咱们使用的。spring

可是,咱们能够有更好的配置方式,使用yml文件,这种配置文件使用起来就更加简洁了。数据库

在yml文件中配置属性,那么咱们在Controller中可使用@value属性来进行获取。浏览器

若是咱们的配置属性是有规律的(是分类的),好比为System系统配置的属性,咱们能够建立一个Java类来进行管理。tomcat

那么在获取的时候就不须要使用@value属性来分别获取了。直接获取Java类的成员变量就好了。

固然了,这里涉及到了两个注解:

  • @configurationProperties
  • @Component

再举个例子,咱们的生产环境和开发环境的配置变量颇有多是不同的,好比:咱们的path变量在开发环境中是:http://localhost:8080。而咱们的生产环境中的path路径是:zhognfucheng.site。这就形成了差别,在springBoot中,这种差别就很好解决了。

  • 能够将开发环境的配置文件和生产环境的配置文件分开,使用总配置文件指定使用的是哪一个配置文件。
  • 在使用java变量启动Springboot项目的时候,能够指定使用哪一个配置文件。

2、回顾

2.1Controller的使用

SpringBoot已经不推荐使用JSP了,推荐使用模版来返回页面。thymeleaf这个模版,若是在返回页面的时候出错了,看看是否是没有使用模版。

@RestController = @Controller + @ResponseBody

2.2统一处理异常

统一处理异常我在Struts二、springMVC的时候都已经接触过了,方法都是相似的。定义一个本身系统的异常,为了更好地排查出错误所在。

而这个课程的统一处理异常我又学到了很多的东西:

  • 咱们在Controller通常返回的是JSON数据给前端页面,若是**出现了异常,你单独抛出了异常,若是没有作任何的处理,返回的JSON格式必定和成功的访问的是不同的,那么这就会形成前台在解析的时候可能会有混乱。为了解决这种状况,**咱们能够单独封装一个类来进行返回,类的成员变量:code,message,data。有了这个类,那么返回的JSON格式就是相同的了。
  • 前边说到了返回类的code,这个code最好就不要单独写出来。可使用一个枚举来进行维护。这样的话就很是方便咱们去操做了。
  • service抛出自定义异常、controller也抛出自定义异常。由Spring的异常处理器来进行捕获、对其进行输出、返回JSON给前台页面。

2.3AOP

SpringBoot环境下使用AOP,也是须要导入maven坐标的。知识点都和spring学习的差很少...

使用日志记录可使用sl4jlog,这个是Spring自带的。

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

3、知新

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之后,我以为并不过瘾、随后又发现了一个课程: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种方式实现热部署:

  1. 直接启动tomcat后再把项目放进webapp

  2. 修改servlet.xml中,context标签中加入属性实现

  3. 经过自定义xml文件,放在localhost文件下面。我以为就是第二点的延伸

3.4.3SpringBoot热部署

springBoot热部署3种方式:
一、在plugin标签中加入插件
<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>springloaded</artifactId>
		<version>1.2.6.RELEASE</version>
	</dependency>
</dependencies>

进入pom文件的目录输入 mvn spring-boot:run启动

二、启动的加入参数 引用springloaded jar包
	-javaagent:'jar包路径' -noverify


三、pom文件加入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency>

复制代码

2018年1月2日15:02:13

最后根据下面这篇博文来使用SpringBoot热部署:blog.csdn.net/u013938484/…

值得注意的是:在IDEA下不是自动编译的,所以是须要按Ctrl+F9才能实现!

4、扩展阅读

后来我使用了SpringBoot搭建了一个简单的项目,从中也遇到了很多的问题和相关的没有接触到的知识点。下面我会给出当时搜索到的资料和遇到的问题以及解决方案

4.1 SpringBoot教程参考资料:

4.2 SpringBoot遇到的问题以及解决资料

5、最后

SpringBoot能使咱们简化繁琐的配置,简化Maven包的依赖(缺点:同时加入一些咱们不须要的包)。整体来看的是一个很是好用的框架(集成了不少有用的功能,与其余框架整合十分方便),学习成本很低(若是学过SpringMVC,分分钟就上手),很是合适用来搭建环境。

若是文章有错的地方欢迎指正,你们互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同窗,能够关注微信公众号:Java3y

相关文章
相关标签/搜索