SpringBoot全教程(完整版本).pdf
- 文档编号:18850147
- 上传时间:2024-01-28
- 格式:PDF
- 页数:163
- 大小:21.12MB
SpringBoot全教程(完整版本).pdf
《SpringBoot全教程(完整版本).pdf》由会员分享,可在线阅读,更多相关《SpringBoot全教程(完整版本).pdf(163页珍藏版)》请在冰点文库上搜索。
1.12.12.22.32.43.13.23.33.43.53.64.14.24.34.44.54.65.15.25.35.45.55.6TableofContents简介快速第个SpringBoot项IntelliJ中快速创建项最佳实践的程结构配置件详解Web开发开发RESTful接服务及单元测试开发Web应,使模版引擎与静态资源Web应的统异常处理使Swagger2动构建强的API档扩展XML请求和响应的持使Spring-Security进安全控制志相关SpringBoot志管理使AOP统处理Web请求志使Log4j记录志使Log4j将志写MongoDB使Log4j实现不同环境不同志级别的控制动态修改志级别数据访问使JdbcTemplate访问数据库使spring-data-jpa实现简单优雅的数据库访问多数据源的配置与使使MyBatis访问数据库使MyBatis注解配置详解缓存持()注解配置与EhCache使15.75.85.95.105.115.125.136.16.26.36.46.57.18.18.28.38.48.5缓存持()使Redis做集中式缓存访问Redis访问MongoDB增强对MongoDB的配置(连接池等)使LDAP来统管理户信息SpringBoot中使事务使Flyway管理数据库版本定时任务与异步调Scheduled创建定时任务Async实现异步调Async实现异步调:
定义线程池Async实现异步调:
线程池的优雅关闭Async实现异步调:
使Future以及定义超时使消息中间件使RabbitMQ其他功能与解析动化配置的利弊及解决之道后台运配置使JavaMailSender发送邮件SpringBootActuator监控端点结Actuator的Info端点输出Git与构建信息2本教程示例代码仓库GitHub:
https:
/MavenProject、SpringBoot版本1.3.2以及些程基本信息,可参考下图所示第个SpringBoot项5SPRINGINITIALIZRiii.点击GenerateProject下载项压缩包2.解压项包,并IDE以Maven项导,以IntelliJIDEA14为例:
i.菜单中选择FileNewProjectfromExistingSources.ii.选择解压后的项件夹,点击OKiii.点击Importprojectfromexternalmodel并选择Maven,点击Next到底为。
iv.若你的环境有多个版本的JDK,注意到选择JavaSDK的时候请选择Java7以上的版本项结构解析项结构通过上步骤完成了基础项的创建,如上图所示,SpringBoot的基础结构共三个件(具体路径根据户成项时填写的Group所有差异):
第个SpringBoot项6src/main/java下的程序:
Chapter1Applicationsrc/main/resources下的配置件:
application.propertiessrc/test/下的测试:
Chapter1ApplicationTests成的Chapter1Application和Chapter1ApplicationTests类都可以直接运来启动当前创建的项,由于前该项未配合任何数据访问或Web模块,程序会在加载完Spring之后结束运。
引Web模块当前的pom.xml内容如下,仅引了两个模块:
spring-boot-starter:
核模块,包括动配置持、志和YAMLspring-boot-starter-test:
测试模块,包括JUnit、Hamcrest、Mockitoorg.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-testtest引Web模块,需添加spring-boot-starter-web模块:
org.springframework.bootspring-boot-starter-web编写HelloWorld服务创建package命名为com.didispace.web(根据实际情况修改)创建HelloController类,内容如下RestControllerpublicclassHelloControllerRequestMapping(/hello)publicStringindex()returnHelloWorld;第个SpringBoot项7启动主程序,打开浏览器访问http:
/localhost:
8080/hello,可以看到输出HelloWorld编写单元测试例打开的src/test/下的测试Chapter1ApplicationTests类。
下编写个简单的单元测试来模拟http请求,具体如下:
RunWith(SpringJUnit4ClassRunner.class)SpringApplicationConfiguration(classes=MockServletContext.class)WebAppConfigurationpublicclassChapter1ApplicationTestsprivateMockMvcmvc;BeforepublicvoidsetUp()throwsExceptionmvc=MockMvcBuilders.standaloneSetup(newHelloController().build();TestpublicvoidgetHello()throwsExceptionmvc.perform(MockMvcRequestBuilders.get(/hello).accept(MediaType.APPLICATION_JSON).andExpect(status().isOk().andExpect(content().string(equalTo(HelloWorld);使MockServletContext来构建个空的WebApplicationContext,这样我们创建的HelloController就可以在Before函数中创建并传递到MockMvcBuilders.standaloneSetup()函数中。
注意引下内容,让status、content、equalTo函数可importstaticorg.hamcrest.Matchers.equalTo;importstaticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.content;importstaticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.status;此已完成标,通过Maven构建了个空SpringBoot项,再通过引web模块实现了个简单的请求处理。
第个SpringBoot项8第个SpringBoot项9IntelliJ中快速创建项在快速中提到的是使SPRINGINITIALIZR具来创建项,相信每位读者都有最喜欢和最为熟练的创建式。
本我们将介绍嵌的Intellij中的SpringInitializr具,它同Web提供的创建功能样,可以帮助我们快速的构建出个基础的SpringBoot/Cloud程。
菜单栏中选择File=New=Project.,我们可以看到如下图所示的创建功能窗。
其中InitialServiceUrl指向的地址就是Spring官提供的SpringInitializr具地址,所以这创建的程实际上也是基于它的Web具来实现的。
点击Next,等待刻后,我们可以看到如下图所示的程信息窗,在这我们可以编辑我们想要创建的程信息。
其中,Type可以改变我们要构建的程类型,如:
Maven、Gradle;Language可以选择:
Java、Groovy、Kotlin。
IntelliJ中快速创建项10点击Next,进选择SpringBoot版本和依赖管理的窗。
在这值的我们关注的是,它不仅包含了SpringBootStarterPOMs中的各个依赖,还包含了SpringCloud的各种依赖。
IntelliJ中快速创建项11点击Next,进最后关于程物理存储的些细节。
最后,点击Finish就能完成程的构建了。
IntelliJ中快速创建项12Intellij中的SpringInitializr虽然还是基于官Web实现,但是通过具来进调并直接将结果构建到我们的本地件系统中,让整个构建流程变得更加顺畅,还没有体验过此功能的SpringBoot/Cloud爱好者们不妨可以尝试下这种不同的构建式。
推荐:
使CloudStudio在线编写、调试和管理SpringBoot应IntelliJ中快速创建项13最佳实践的程结构SpringBoot框架本身并没有对程结构有特别的要求,但是按照最佳实践的程结构可以帮助我们减少可能会遇的坑,尤其是Spring包扫描机制的存在,如果您使最佳实践的程结构,可以免去不少特殊的配置作。
典型示例rootpackage结构:
com.example.myproject应主类Application.java置于rootpackage下,通常我们会在应主类中做些框架配置扫描等配置,我们放在rootpackage下可以帮助程序减少配置来加载到我们希望被Spring加载的内容实体(Entity)与数据访问层(Repository)置于com.example.myproject.domain包下逻辑层(Service)置于com.example.myproject.service包下Web层(web)置于com.example.myproject.web包下com+-example+-myproject+-Application.java|+-domain|+-Customer.java|+-CustomerRepository.java|+-service|+-CustomerService.java|+-web|+-CustomerController.java|看看您现在的功能是否这样配置,如果不是,不妨尝试改变下,看看是否可以去掉些Configuration配置?
最佳实践的程结构14配置件详解相信很多选择SpringBoot主要是考虑到它既能兼顾Spring的强功能,还能实现快速开发的便捷。
我们在SpringBoot使过程中,最直观的感受就是没有了原来整合Spring应时繁多的XML配置内容,替代它的是在pom.xml中引模块化的StarterPOMs,其中各个模块都有的默认配置,所以如果不是特殊应场景,就只需要在application.properties中完成些属性配置就能开启各模块的应。
在之前的各篇章中都有提及关于application.properties的使,主要来配置数据库连接、志相关配置等。
除了这些配置内容之外,本将具体介绍些在application.properties配置中的其他特性和使法。
定义属性与加载我们在使SpringBoot的时候,通常也需要定义些使的属性,我们可以如下式直接定义:
com.didispace.blog.name=didicom.didispace.blog.title=SpringBootLearning然后通过Value($属性名)注解来加载对应的配置属性,具体如下:
ComponentpublicclassBlogPropertiesValue($com.didispace.blog.name)privateStringname;Value($com.didispace.blog.title)privateStringtitle;/省略getter和setter按照惯例,通过单元测试来验证BlogProperties中的属性是否已经根据配置件加载了。
RunWith(SpringJUnit4ClassRunner.class)SpringApplicationConfiguration(Application.class)publicclassApplicationTestsAutowiredprivateBlogPropertiesblogProperties;TestpublicvoidgetHello()throwsException配置件详解15Assert.assertEquals(blogProperties.getName(),didi);Assert.assertEquals(blogProperties.getTitle(),SpringBootLearning);参数间的引在application.properties中的各个参数之间也可以直接引来使,就像下的设置:
com.didispace.blog.name=didicom.didispace.blog.title=SpringBootLearningcom.didispace.blog.desc=$com.didispace.blog.nameiswriting$com.didispace.blog.titlecom.didispace.blog.desc参数引了上中定义的name和title属性,最后该属性的值就是didiiswritingSpringBootLearning。
使随机数在些情况下,有些参数我们需要希望它不是个固定的值,如密钥、服务端等。
SpringBoot的属性配置件中可以通过$random来产int值、long值或者string字符串,来持属性的随机值。
#随机字符串com.didispace.blog.value=$random.value#随机intcom.didispace.blog.number=$random.int#随机longcom.didispace.blog.bignumber=$random.long#10以内的随机数com.didispace.blog.test1=$random.int(10)#10-20的随机数com.didispace.blog.test2=$random.int10,20通过命令设置属性值相信使过段时间SpringBoot的户,定知道这条命令:
java-jarxxx.jar-server.port=8888,通过使-server.port属性来设置xxx.jar应的端为8888。
在命令运时,连续的两个减号-就是对application.properties中的属性值进赋值的标识。
所以,java-jarxxx.jar-server.port=8888命令,等价于我们在application.properties中添加属性server.port=8888,该设置在样例程中可,读者可通过删除该值或使命令来设置该值来验证。
配置件详解16通过命令来修改属性值固然提供了不错的便利性,但是通过命令就能更改应运的参数,那岂不是很不安全?
是的,所以SpringBoot也贴的提供了屏蔽命令访问属性的设置,只需要这句设置就能屏蔽:
SpringApplication.setAddCommandLineProperties(false)。
多环境配置我们在开发SpringBoot应时,通常同套程序会被应和安装到个不同的环境,如:
开发、测试、产等。
其中每个环境的数据库地址、服务器端等等配置都会不同,如果在为不同环境打包时都要频繁修改配置件的话,那必将是个常繁琐且容易发错误的事。
对于多环境的配置,各种项构建具或是框架的基本思路是致的,通过配置多份不同环境的配置件,再通过打包命令指定需要打包的内容之后进区分打包,SpringBoot也不例外,或者说更加简单。
在SpringBoot中多环境配置件名需要满application-profile.properties的格式,其中profile对应你的环境标识,如:
application-dev.properties:
开发环境application-test.properties:
测试环境application-prod.properties:
产环境于哪个具体的配置件会被加载,需要在application.properties件中通过spring.profiles.active属性来设置,其值对应profile值。
如:
spring.profiles.active=test就会加载application-test.properties配置件内容下,以不同环境配置不同的服务端为例,进样例实验。
针对各环境新建不同的配置件application-dev.properties、application-test.properties、application-prod.properties在这三个件均都设置不同的server.port属性,如:
dev环境设置为1111,test环境设置为2222,prod环境设置为3333application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置测试不同配置的加载执java-jarxxx.jar,可以观察到服务端被设置为1111,也就是默认的开发环境(dev)执java-jarxxx.jar-spring.profiles.active=test,可以观察到服务端被设置为2222,也就是测试环境的配置(test)执java-jarxxx.jar-spring.profiles.active=prod,可以观察到服务端被设置为3333,也就是产环境的配置(prod)按照上的实验,可以如下总结多环境的配置思路:
application.properties中配置通内容,并设置spring.profiles.active=dev,以开发环境为默认配置配置件详解17application-profile.properties中配置各个环境不同的内容通过命令式去激活不同环境的配置完整示例chapter2-1-1配置件详解18开发RESTful接服务及单元测试先,回顾并详细说明下在快速中使的Controller、RestController、RequestMapping注解。
如果您对SpringMVC不熟悉并且还没有尝试过快速案例,建议先看下快速的内容。
Controller:
修饰class,来创建处理http请求的对象RestController:
Spring4之后加的注解,原来在Controller中返回json需要ResponseBody来配合,如果直接RestController替代Controller就不需要再配置ResponseBody,默认返回json格式。
RequestMapping:
配置url映射下我们尝试使SpringMVC来实现组对User对象操作的RESTfulAPI,配合注释详细说明在SpringMVC中如何映射HTTP请求、如何传参、如何编写单元测试。
RESTfulAPI具体设计如下:
User实体定义:
publicclassUserprivateLongid;privateStringname;privateIntegerage;/省略setter和getter实现对User对象的操作接RestControllerRequestMapping(value=/users)/通过这配置使下的映射都在/users下开发RESTful接服务及单元测试19publicclassUserController/创建线程安全的MapstaticMapusers=Collections.synchronizedMap(newHashMap();RequestMapping(value=/,method=RequestMethod.GET)publicListgetUserList()/处理/users/的GET请求,来获取户列表/还可以通过RequestParam从中传递参数来进查询条件或者翻信息的传递Listr=newArrayList(users.values();returnr;RequestMapping(value=/,method=RequestMethod.POST)publicStringpostUser(ModelAttributeUseruser)/处理/users/的POST请求,来创建User/除了ModelAttribute绑定参数之外,还可以通过RequestParam从中传递参数users.put(user.getId(),user);returnsuccess;RequestMapping(value=/id,method=RequestMethod.GET)publicUsergetUser(PathVariableLongid)/处理/users/id的GET请求,来获取url中id值的User信息/url中的id可通过PathVariable绑定到函数的参数中returnusers.get(id);RequestMapping(value=/id,method=RequestMethod.PUT)publicStringputUser(PathVariableLongid,ModelAttributeUseruser)/处理/users/id的PUT请求,来更新User信息Useru=users.get(id);u.setName(user.getName();u.setAge(user.getAge();users.put(id,u);returnsuccess;RequestMapping(value=/id,method=RequestMethod.DELETE)publicStringdeleteUser(PathVariableLongid)/处理/users/id的DELETE请求,来删除Userusers.remove(id);returnsuccess;下针对该Controller编写测试例验证正确性,具体如下。
当然也可以通过浏览器插件等进请求提交验证。
开发RESTful接服务及单元测试20RunWith(SpringJUnit4ClassRunner.class)SpringApplicationConfiguration(classes=MockServletContext.class)WebAppConfigurationpublicclassApplicationTestsprivateMockMvcmvc;BeforepublicvoidsetUp()throwsExceptionmvc=MockMvcBuilders.standaloneSetup(newUserController().build();TestpublicvoidtestUserController()throwsException/测试UserControllerRequestBuilderrequest=null;/1、get查下user列表,应该为空request=get(/users/);mvc.perform(request).andExpect(status().isOk().andExpect(content().string(equalTo();/2、post提交个userrequest=post(/users/).param(id,1).param(name,测试师).param(age,20);mvc.perform(request).andExpect(content().string(equalTo(success);/3、get获取user列表,应该有刚才插的数据request=get(/users/);mvc.perform(request).andExpec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SpringBoot 教程 完整 版本