最近想开发一个后台业务框架,考虑到原先冗余复杂的spring各项配置,遂采用了spring boot 这种零配置方案。首先介绍下工具:Intelij Idea 2017,git,jdk1.8,maven3.5等。
个人觉得学习一个东西最好先去官网,spring-boot,这里有作为一个新手需要的所有知识。首先,使用idea创建一个maven项目,pom文件。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.twq</groupId>
<artifactId>csbackend</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>cs-dao</module>
<module>cs-front</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<pagehelper.version>4.1.6</pagehelper.version>
<druid.version>1.1.5</druid.version>
<mybatis.version>3.2.5</mybatis.version>
<mybatis-spring.version>1.2.2</mybatis-spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
接下来,配置一个项目的持久层,这里采用了mybatis + 分页+ 逆向工程的方式(逆向工程将在下篇文章中讨论)。
创建spring-boot启动类:
:
package com.twq.main;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@MapperScan("com.twq.dao.mapper")
@ComponentScan("com.twq.controller")
public class CsFrontApplication {
public static void main(String[] args) {
SpringApplication.run(CsFrontApplication.class, args);
}
}
这里采用了 spring-boot 特有的与mybatis整合的方案,使用
mybatis-spring-boot-starter来简化整合配置。仅仅只需要在application.perperties中指明mybatis 包路径同时在mybatis接口mapper文件中声明@Mapper注解即可让spring-boot自动扫描mapper文件,或在 启动类上声明@MapperScan("mapper路径"),数据源采用alibaba druid 。看起来一切都正常,但是启动后发现自定义controller没有被注册,后来发现是由于spring-boot默认扫描和启动类同包下的controller,由于项目中 main方法所在类和 controller不在同一包下,所以没有注册成功
index/hello路径没有被映射到。
核心错误:
** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.
意思是如果把启动类放到默认包下(default) 则有可能导致应用无法启动。修改 main方法所在类的包路径后成功启动,参考资料:点击打开链接。
访问成功,git:点击打开链接