在很早之前,我发过javaweb系列教程,探索了从spring框架的配置整合到springboot,中间还讲解了一个博客小项目。具体信息请访问:https://acheng1314.cncss
本项目的GitHub:https://github.com/pc859107393/Go2SpringBoot.githtml
有兴趣交流springboot进行快速开发的同窗能够加一下下面的企鹅群。java
在很早之前,个人项目中探索Spring+SpringMvc+Druid+Mybatis框架整合的时候,咱们但是花了两个章节详细的讨论spring框架的整合,一样的哪怕是一个熟练的Java程序员要搭建一个完整稳定的框架也要很长的时间。 可是springboot解决了这个问题,笔者如今搭建一个springboot项目仅仅须要几分钟时间。下面咱们一块儿一点点的看下去。mysql
按照前面项目的国际惯例,使用IntelliJ IDEA构建项目,这一次仍是像之前同样贴出图片。react
①. 在idea的欢迎界面,咱们选择Create New Project
,如图1.1所示。git
图1.1 欢迎界面程序员
②. 接着咱们选择左侧的Spring Initializr
而后点击next
,进入Project Metadata
界面,如图1.2所示。github
图1.2 选择Spring项目初始化web
③. 紧接着开始配置项目的基本参数,咱们在这里一点点的实现,如图1.3所示。spring
图1.3 配置项目基本参数
在图1.3中,咱们须要着重注意的是: 项目类型设置为Gradle project,开发语言我选择的是kotlin,打包方式jar,java语言版本是8,其余的参数你们自行百度
④. 完成了上面的项目参数配置后,咱们接着选择项目资源依赖。项目资源依赖也就是咱们须要使用哪些jar包扩展。界面如图1.4所示。
图1.4 选择项目依赖资源
在上面的图1.4中,左边是资源的父类别,中间是具体的资源详细名称,右边是咱们选中的依赖,一样的已经把目录层级展现出来了,你们请根据我选中的作出相应的选择。注意:SpringBoot版本咱们默认就行。
⑤. 当咱们把图1.4点击next
后,进入了一个项目目录命名环节,咱们能够取本身心仪的名字。注意:写完名字不要当即点击finish!写完名字不要当即点击finish!写完名字不要当即点击finish!
在这里咱们有一个很值得注意的小细节,在这里咱们能够加快项目构建速度。
1. gradle项目的构建是须要gradle环境的。
2. gradle和maven同样是进行远程资源依赖的,因此合理的远程资源仓库能够加快构建速度(资源下载速度快了,减小大部分等待时间)。
3. 修改文件内容 项目目录->gradle->wrapper->gradle-wrapper.properties 中的distributionUrl的值为:http\://7xlmzq.com1.z0.glb.clouddn.com/gradle-4.5.1-bin.zip
4. 在项目中的build.gradle文件中修改repositories字段相关的内容。添加以下内容:
maven { url "http://maven.aliyun.com/nexus/content/repositories/central" }
复制代码
⑥. 作完这两步后,咱们就能够选择finish进入项目中。 大概模样如图1.5所示。
图1.5 项目构建完成
在传统的JavaWeb应用中,咱们通常采用经典三层来解决问题,经典三层指: dao->service->web,一样的咱们这里也先来整合这三层。
①. 打开build.gradle
,查看底部的dependencies
包含哪些依赖。这个时候项目的依赖应该以下所示:
dependencies {
//aop支持
compile('org.springframework.boot:spring-boot-starter-aop')
//缓存
compile('org.springframework.boot:spring-boot-starter-cache')
//快捷生成RESTFul文档
compile('org.springframework.boot:spring-boot-starter-data-rest')
//模板引擎
compile('org.springframework.boot:spring-boot-starter-freemarker')
//数据校验
compile('org.springframework.boot:spring-boot-starter-validation')
//传统的web
compile('org.springframework.boot:spring-boot-starter-web')
//新的webflux
compile('org.springframework.boot:spring-boot-starter-webflux')
//mybatis的支持
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2')
//Kotlin支持
compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
compile("org.jetbrains.kotlin:kotlin-reflect")
//springweb项目快速重启
runtime('org.springframework.boot:spring-boot-devtools')
//mysql连接
runtime('mysql:mysql-connector-java')
//测试支持
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('io.projectreactor:reactor-test')
//在上面的依赖中 compile是任什么时候候都须要的依赖,runtime是牢牢在运行时须要依赖,testCompile是在测试的编译和运行时候均须要。
}
复制代码
在之前个人系列教程中,咱们主要采用了哪些框架呢?主要采用了:Spring+SpringMvc+Mybatis+Druid+SpringFox,因此这些组成一个完整web应用的框架集合是不能少的,因此咱们须要加入下面的一些依赖。
compile 'com.alibaba:druid-spring-boot-starter:1.1.9'
compile 'com.google.code.gson:gson:2.7'
//mybatis-plus插件支持
compile 'com.baomidou:mybatis-plus:2.3'
compile 'com.baomidou:mybatis-plus-boot-starter:2.3'
compile "io.springfox:springfox-swagger2:${springfoxVersion}"
compile "io.springfox:springfox-staticdocs:2.6.1"
compile "io.springfox:springfox-swagger-ui:${springfoxVersion}"
compile 'com.github.xiaoymin:swagger-bootstrap-ui:1.7.2'
复制代码
我的缘由常用gson,上面的springfoxVersion='2.8.0'
接着咱们刷新gradle或者选择右下角提示的 Import Changes,导入咱们加入的依赖资源。到这一步咱们的依赖添加完毕。
其实框架整合无外乎就是这些基于Spring的bean模式构建的各个bean协调工做,这一点在传统手动配置的Spring应用中是一个很难很繁琐的过程。可是咱们springboot时代,一切都简化了,咱们只须要找到相应资源的官方文档,参照文档进行整合就好了。
我整合的配置文件application.properties
以下:
debug=false
trace=false
# Druid链接池配置,官方配置参考:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
spring.datasource.druid.url=jdbc:mysql://localhost:3306/cc_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=laopo5201314
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
spring.datasource.druid.filters=stat,wall
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
# 配置StatFilter
spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.aop-patterns= -cn.acheng1314.*
# 配置WallFilter
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false
## Druid WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/*
#
## Druid StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
#spring.datasource.druid.stat-view-servlet.enabled=true
#spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
#spring.datasource.druid.stat-view-servlet.reset-enable=true
#spring.datasource.druid.stat-view-servlet.login-username=admin
#spring.datasource.druid.stat-view-servlet.login-password=admin
#spring.datasource.druid.stat-view-servlet.allow=
#spring.datasource.druid.stat-view-servlet.deny=
#事物提交失败回滚和aop
spring.transaction.rollback-on-commit-failure=true
spring.aop.auto=true
spring.aop.proxy-target-class=true
spring.http.encoding.force=true
spring.http.encoding.force-request=true
spring.http.encoding.charset=utf-8
spring.http.converters.preferred-json-mapper=jackson
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=1024mb
spring.servlet.multipart.max-request-size=1024mb
#freemarker配置
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.cache=true
spring.freemarker.content-type=text/html
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.enabled=true
spring.freemarker.suffix=.ftl
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.request-context-attribute=req
server.port=8181
spring.resources.static-locations=classpath:/static/
#Mybatis配置,官方参考:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
mybatis.mapper-locations=classpath:/mapper/*.xml
mybatis.type-aliases-package=cn.acheng1314.base.domain
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=true
mybatis.configuration.use-column-label=true
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=cn.acheng1314.base.domain
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局惟一ID (数字类型惟一ID)", 3:"全局惟一ID UUID";
mybatis-plus.global-config.id-type=0
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
mybatis-plus.global-config.field-strategy=0
#驼峰下划线转换
mybatis-plus.global-config.db-column-underline=true
#刷新mapper 调试神器
mybatis-plus.global-config.refresh-mapper=true
mybatis-plus.global-config.capital-mode=true
mybatis-plus.configuration.cache-enabled=true
mybatis-plus.configuration.map-underscore-to-camel-case=true
#配置文件設置請參考官網文檔:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#production-ready-endpoints
复制代码
在上面的配置文件中,咱们在项目开发目录中resources
对应编译后的目录为classes
。
至此为止,咱们的框架整合差很少完成,具体的细节,我建议你们仍是去官网文档查看一下。固然最重要的仍是框架整合的基础思想,有兴趣的童鞋能够查看我之前的相关教程。
①. 测试json输出,代码以下:
@GetMapping(value = ["/"], produces = [MediaType.APPLICATION_JSON_UTF8_VALUE])
@ResponseBody
fun MainLocal(): Any = User("程", "18976962315", "123456", "吹牛", Date())
复制代码
②. 测试freemarker页面渲染
@GetMapping(value = ["/test"], produces = [MediaType.TEXT_HTML_VALUE])
fun getTest(map: ModelMap): String {
map["test"] = MainLocal()
return "test1"
}
复制代码
具体的测试页面不用再放出来了,一样这种相似的测试也能够考虑使用Spring的相关测试框架来检查。