资讯专栏INFORMATION COLUMN

SpringBoot就是这么简单

whinc / 1258人阅读

摘要:热加载代表的是我们不需要重启服务器,就能够类检测得到,重新生成类的字节码文件无论是热部署或者是热加载都是基于类加载器来完成的。验证阶段字节码文件不会对造成危害准备阶段是会赋初始值,并不是程序中的值。

一、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标签中加入插件

    
        org.springframework
        springloaded
        1.2.6.RELEASE
    


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

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


3、pom文件加入依赖

    org.springframework.boot
    spring-boot-devtools
    true

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,这次是没有用到的,可能以后会用到:

http://www.cnblogs.com/elvinle/p/7999612.html

springBoot Github Demo:

https://github.com/t-hong/springboot-examples

与流行框架整合的Demo(慕课网,对应有课程的)

https://github.com/leechenxiang/imooc-springboot-starter

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

测试Controller使用MockMVC测试

http://www.cnblogs.com/xd03122049/p/6001457.html

http://blog.csdn.net/xiao_xuwen/article/details/52890730

http://www.cnblogs.com/xiaohunshi/p/5706943.html

springBoot拦截器

http://blog.csdn.net/catoop/article/details/50501696

SpringBoot拦截器无法注入Bean

https://my.oschina.net/u/1790105/blog/1490098

http://blog.csdn.net/mjlfto/article/details/65635135

出现: Could not find acceptable representation原因及解决方法

http://blog.csdn.net/neosmith/article/details/51557957

或者是因为返回的JSON数据,而你返回了一个页面(使用RESTCONTROLLER没有注意)

springBoot下使用统一异常处理方法:

http://www.cnblogs.com/magicalSam/p/7198420.html

springBoot集成Freemarker

http://ifeve.com/spring-boot-%E9%9B%86%E6%88%90-freemarker-%E8%AF%A6%E8%A7%A3%E6%A1%88%E4%BE%8B/

http://blog.csdn.net/z69183787/article/details/73850417

五、最后

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

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68868.html

相关文章

  • SpringBoot自动配置原理

    摘要:开启自动配置功能后文详解这个注解,学过的同学应该对它不会陌生,就是扫描注解,默认是扫描当前类下的。简单来说,这个注解可以帮助我们自动载入应用程序所需要的所有默认配置。简单理解这二者扫描的对象是不一样的。 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面Spring的文章(以学习...

    Rainie 评论0 收藏0
  • SpringBoot 实战 (一) | 如何使用 IDEA 构建 Spring Boot 工程

    摘要:它使用约定大于配置的理念让你的项目快速运行起来。如何使用构建工程第一步,当然是安装傻瓜式教程,请自行百度。包名,填完和后自动生成,默认即可。确认无误,点完成创建即可。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 新年立了个 flag,好好运营这个公众号。具体来说,就是每周要写两篇文章在这个号发表。刚立的 flag 可不能这么快打脸。下面送上本周第...

    Ryan_Li 评论0 收藏0
  • SpringBoot原理深入篇

    摘要:启动原理和执行原理分析一的启动原理我们打开,注意看下面两个依赖我们第一步是继承了父项目,然后在添加启动器的依赖,项目就会自动给我们导入关于项目所需要的配置和。 上一篇我们看到,我们很轻松的完成了项目的构建,那么SpringBoot是如何做到的呢,在使用的使用又有哪些通用配置和注意事项呢? 其实SpringBoot给我们做了大量的自动配置功能,我们只需要引入对应的启动器就可以直接使用,作...

    gotham 评论0 收藏0
  • SpringBoot:如何优雅地处理全局异常?

    摘要:为了贴合主题,本次主要针对全局异常处理进行举例说明。自定义异常处理自定义一个异常自定义异常程序员小明错误码错误信息显而易见,这个异常继承了,属于运行时异常。包括处理其他异常,都是这种方式。 之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Contr...

    李昌杰 评论0 收藏0
  • 带你搭一个SpringBoot+SpringData JPA的环境

    摘要:一从零搭建环境本次我使用的是编辑器来搭建和环境首先,我们在新建项目的时候,选择,然后就行了。可以看出,本次的版本为。这是一个非常好用的插件,有了它我们可以不用写繁琐的方法。非常适合我们做一些简答的测试和小功能。 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringB...

    i_garfileo 评论0 收藏0

发表评论

0条评论

whinc

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<