使用SpringBoot能夠快速的搭建web項目,減小配置文件的編寫,如今也愈來愈多的互聯網團隊採用SpringBoot來搭建微服務。css
下面主要是記錄使用SpringBoot+Mybatis+Druid集成流程,若是搭建過Spring MVC 的項目,其實很容就會使用SpringBoot,畢竟SpringBoot是在Spring 4.x系列上發展起來的。html
SpringBoot的項目結構和之前的Spring MVC的web項目結構是有一些細微差比的。SpringBoot項目中咱們須要在basePackage下加一個項目入口類,SpringBoot項目再也不須要webapp,前端靜態資源放在resources目錄下的static目錄中,Resources目錄下須要編寫一個application.yml文件,其實做用和spring的application.xml是相似的,重要代碼和配置文件內容將在後面整合流程中體現。前端
項目結構圖:java
resources下的mapping存放的是mybatis的mapper配置文件mysql
下面是整個一個SpringBoot項目的pom重要片斷,SpringBoot的版本能夠根據需求升級,pom文件中將SpringBoot默認的日誌和內嵌tomcat都排除掉了,這個可根據我的的愛好來決定是否使用默認的logback日誌實現以及是否使用tomcat來做爲內嵌容器。本例pom配置中是將log4j2做爲項目的日誌實現方案,容器採用undertow 。從pom文件能夠看出比之前直接用spring+spring mvc搭建時少了不少。git
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!-- mybatis spring --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency> <!-- 引入mybatis 分頁 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.0.0-rc</version> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>0.9.5</version> </dependency> <!-- ali druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.27</version> </dependency> <!-- mysql driver--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.5</version> </dependency> <!-- spring boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency> <!--用於controller單元測試--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--log4j2 Asynchronous Loggers requires disruptor--> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <!--springboot熱部署--> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.8.RELEASE</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> <finalName>SpringBootTest</finalName> </build>
在idea中熱部署須要啓動自動編譯-快捷鍵Ctrl + Alt + S
打開設置面板,勾選Build project automatically
選項。github
application.yml(ps:也可使用application.properties來編寫)是SpringBoot上下文啓動的主配置文件,須要注意的是在編寫yml配置文件的時候,每一個屬性配置的冒號後面必定要空一個字符,若是靠在一塊兒將會出現配置文件錯誤,在idea開發工具中,若是你寫的配置文件屬性名沒有高亮,那就須要注意了,配置文件中使用mysql-connector.6.x版本的驅動,這個版本必定要注意驅動名稱和之前的版本是不同的,而且鏈接的url中必須指定時區(serverTimezone)web
配置內容以下:spring
#Spring boot application.yml spring: #profiles : dev #數據源配置,使用阿里巴巴的Druid datasource: name: mydb type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/wechat?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver minIdle: 1 maxActive: 2 initialSize: 1 timeBetweenEvictionRunsMillis: 3000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 'ZTM' FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false #mybatis的配置 mybatis: type-aliases-package: com.sunyu.concurrent config-location: classpath:/mybatis-config.xml mapper-locations: classpath*:com/sunyu/concurrent/mapping/*.xml #啓動的服務監聽端口 server: port: 8080
mybatis-config.xml配置文件內容sql
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!--是否開啓緩存--> <setting name="cacheEnabled" value="true"/> <!--是否開啓mybatis自動轉駝峯--> <setting name="mapUnderscoreToCamelCase" value="true"/> <!--use log4j2--> <setting name="logImpl" value="LOG4J2"/> </settings> <!--配置分頁插件--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin> </plugins> </configuration>
log4j2.xml的配置文件,請參考個人前一篇博客,固然若是你不想用log4j2.xml做爲日誌默認的配置文件,則須要在application.yml文件中配置指定log的配置文件,參考以下:
logging: config: classpath:log4j2-spring.xml
若是項目只是提供restful的服務,則能夠不用作這個操做。在resources目錄下新建static目錄,在static下你能夠建本身的css目錄以及圖片的存放目錄,甚至是html的頁面。
注意:不要static不要寫其餘名稱,SpringBoot一開始的理念就是「約定因爲配置」,因此沒有爲何。
重點:本文添加靜態路徑的目的主要是存放404,500這些錯誤處理頁面,在實際項目中,咱們也必須定製化本身的錯誤處理頁面,本例是在static下新建了一個errors的目錄,而後裏面存放一些404,500的html。下面會內容將介紹怎麼讓SpringBoot轉發自動義錯誤頁面。
項目入口類就是SpringBoot的項目的啓動入口,該類通常建議放在basePackage下。類名稱能夠自定義,只要不和SpringBoot的註解重名,代碼以下:
@SpringBootApplication @MapperScan("com.hunao.boot.dao") public class SpringBootMainApplication { public static void main(String[] args) { SpringApplication.run(SpringBootMainApplication.class, args); } /** * 讓SpringBoot項目錯誤時,使用自定義的錯誤處理頁面顯示 * jdk 1.8 lambda * @return */ @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return (container -> { ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/errors/401.html"); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/errors/404.html"); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/errors/500.html"); container.addErrorPages(error401Page, error404Page, error500Page); }); } }
上面@MapperScan很是重要,使用@MapperScan是告訴SpringBoot去掃描包下Mybatis的Mapper接口類,而後完成自動注入和管理,不然我調用Mapper時將找不到相應的實例。固然還可使用另一種方式在咱們本身開發的每個Mybatis mapper接口上加上@Mapper註解,這是SpringBoot也能夠自動掃描完成裝配,可是這種方式略顯麻煩,每一個mapper都加一個註解。
總結:本文主要是介紹整合流程的思路,包括整合當中須要注意的坑以及生產環境下錯誤頁面自動義處理