随着信息系统的互联互通要求,越来越多的服务接口及数据需要实时对接同步,如何采用一种高效的管理开发框架来实现相关的接口及服务的管理及发布就变的十分必要了。分析了市场上目前的主流java方面的架构及开发模式,最终感觉使用springboot +mybatis +maven +swagger 方式来构建相关的服务及接口比较简单方便。
1.名称简单解释
springboot
从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使 用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置。
核心内容:
- 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置
- 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
- 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。
- Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。
具体使用及相关应用实例自行学习。
mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
maven
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、依赖管理和项目信息管理。 Maven是优秀的构建工具,自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。是跨平台的,无论是Windows上,还是Linux或Mac上,都使用相同命令。Maven是帮助我们管理工具 构建过程2.Maven不仅仅是构建工具依赖管理工具:提供中央仓库,自动下载构件。3.Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR。
swagger
Swagger是世界上最流行的API工具,对Restuful API文档进行全流程管理,并且Swagger的目的是支撑整个API生命周期的开发,包括设计、文档以及测试和部署。这篇文章中我们会用到Swagger的文档管理和测试功能。
相关的技术名词解释完毕,具体的技术应用及实现细节不是咋们本节解释的重点 ,我们本次解释的重点是如何将这几项技术融合在一起实现项目的构建及开发要求。
2.融合之前相关的包及资源的准备
1.开发工具目前使用的是IDEA ,也可以使用eclipse及其他java开发工具均可以。
2.maven插件的下载及安装可以在集成开发环境中直接下载, 也可以单独下载 apache-maven-3.5.4-bin,下载完成之后 修改相关的插件配置信息 在\conf\settings.xml
本地D:\pack\repository目前放置了相关的资源包如下:
到此 maven的基层环境准备已完成,接下来开始新建一个maven项目 ,并整合其他开发技术。
2.新建一个项目项目目录如下:
3.针对上面的目录结构进行详细介绍
首先,新建的maven项目会自动在项目跟目录下产生pom.xml包管理配置文件,文件具体内容包含如下东西
截图中看到的内容包含了 对swagger 及 springboot等相关包及插件的引用。后面还需要添加mybatis的包的引用 ,及mybatis 对应的框架对应的mapper类的相关配置的xml文件的引用。
资源配置文件的引用加载设置。
application.properties 文件放在resources下 这个属性文件里放置数据库连接 及服务器相关的配置信息 ,这个文件也可以使用.yml文件格式进行相关参数及变量的配置设置替代。
程序调用及运行顺序大致如下图
程序入口由1Application 开始 启动 关键代码如下
package com.xzp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 @Configuration @EnableAutoConfiguration @ComponentScan( basePackages ="com.xzp") @SpringBootApplication public class Application extends SpringBootServletInitializer { @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); } @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 为了使用swagger插件管理restful api 在这个入口类上添加@EnableSwagger2 注解 ,同时使用了springboot进行相关配置的简化管理同时添加@SpringBootApplication注解实现配置文件 的自动管理。 配置swagger框架信息及相关参数设置体现在SwaggerConfig 配置文件中 内容如下
import io.swagger.annotations.Api; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //.apis(RequestHandlerSelectors.basePackage("com.xzp.controller")) .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("test-RESTful APIs") .description("测试框架服务") .termsOfServiceUrl("") .contact("xzp") .version("1.0") .build(); } } 这个配置文件里配置swagger显示的相关信息。 接下来的业务逻辑就是常规的业务逻辑 ,services 调用 controller 由controller调用mapper 之后又mybatis结合xml配置实现数据库层面的持久化完成数据的获取及更新。 重点说一下controller里的代码 以及与swagger 的结合使用
package com.xzp.controller; import com.xzp.dao.mybatis.model.ChildInfo; import com.xzp.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import springfox.documentation.service.ApiListing; import javax.servlet.http.HttpServletRequest; import java.text.ParseException; import java.text.SimpleDateFormat; import java.text.spi.DateFormatProvider; import java.util.Date; import static org.springframework.web.bind.annotation.RequestMethod.GET; import static org.springframework.web.bind.annotation.RequestMethod.POST; @Api(value = "[APP-测试接口]-FrontExaminationReportController") @RestController @RequestMapping("/rest") public class ArticleRestController { @Autowired public UserService userService ; @ResponseBody @RequestMapping(value = "/getuser",method = GET,produces = "application/json") @ApiOperation(value = "获取用户信息",notes = "用户信息" ,httpMethod = "GET" ,tags = "getuser2") @ApiImplicitParams({ @ApiImplicitParam(name ="name", value = "姓名",required = false,dataType = "String",paramType ="query" ), @ApiImplicitParam(name = "auther", value="登录信息",paramType ="header",required = true,dataType = "String")} ) public UserService GetUserinfo( String name ,HttpServletRequest request) throws ParseException { String sz = request.getHeader("auther"); ChildInfo childInfo =new ChildInfo(); childInfo = userService.getChildBasicbyUi(10); userService.setName( name); userService.setAddress(childInfo.getAddress()); userService.setAge(20); userService.setSex(childInfo.getGender()); return userService ; } }
因为上面swagger配置文件里使用了.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) api的注解方式 所有在该类开头需要引入
@Api(value = "[APP-测试接口]-FrontExaminationReportController") 注解将该类作为api接口方式进行对外服务提供的目标。还涉及到关键的几个注解
@RequestMapping ,@ApiOperation @ApiImplicitParams 具体的详细信息自行百度了解。 最终的效果图如下:
标注的内容都可以进行配置修改。 最终你完成相关的配置及框架的搭建你会发现 ,最终理解的东西就是spring里的IOC及相关注解,以及相关插件的配置使用等核心知识点。