首先说啊,这个轻量级微服务架构的,我也是初探门径,没有很深的理解,写的目的,一是写下来印象深一些,另外就是跟大家一起学习,欢迎留言,欢迎交流。大致看了一下网上的SpringBoot项目和一些教程,基本上也都是1.5.*.RELESE 的,这个事情其实本身就是很麻烦,虽然大部分的代码是没有问题,但是由于版本导致的一些命令不兼容,没有看到预期的代码效果而踩的坑还是蛮多的。
文章涉及的代码及工具如下(后面的设计的版本也会逐步列出):
内容 | 版本 |
IntelliJ IDEA | 2018.2 |
JRE | 1.8.0_152-release-1248-b8 X64 |
Windows | 7 |
SpringBoot | 2.0.5.RELEASE |
webServer | tomcat |
1、为什么要使用SpringBoot?
这个现在是个老生常谈的问题了,我之前还没学习微服务的时候,找工作碰到这样一个电话,因为当时我已经在使用SpringBoot进行开发了,电话那边是这么问的:你好,看你的简历你是比较熟悉微服务是吧。当时还是很郁闷的,我会SpringBoot就会微服务了?直到我开始正式学习微服务这个物我才发现,作为一个铁杆的JAVA开发,后台不用SpringBoot还用什么。
- SpringBoot的出现还是有点颠覆传统JavaWeb应用的感觉,当然这种颠覆只存在你不假思索之前。之前的JavaWeb项目在发布的时候我们首选的是打一个war包,在将war包丢到服务器上,然后命令启动(或者是脚本启动)服务,现在的是直接将项目发不成一个jar包即可,而实际上也只是在SpringBoot项目的内部内置了一个Tomcat但是我们同样可以在pom里面加一个小小的配置,让它在外部Tomcat里面跑起来;
- 通过一个main方法启动Web项目,你没有看错,是真的,在main方法里面加一个@SpringBootApplication额注解,这个注解就是SpringBoot启动的入口;
- 配置呢?XML文件呢?配置肯定还是要配置的但是一般会使用可读性更高的yml文件,集成一些功能比较简单,pom里面引入一下插件,配置文件配置属性,不用像之前那样又是Spring配置,又是XML引入的;
- 此外这个容易上手,容易到什么程度?如果你使用过SpringMVC,那么SpringBoot从知道这个名词到使用只需要10分钟,最多10分钟你就能写出来一个demo,它是一个对SpringMVC深度封装的架构;
- 开箱即用的插件集,SpringBoot中你可以无缝集成数据库、MQ、模板引擎等你之前项目用到的技术
总的说,SpringBoot是一个很经典的核心+插件的系统架构,典型的核心不够插件凑的很亲民的轻量级的后台架构。
2、构建第一个SpringBoot应用程序
使用idea构建SpringBoot应用,你需要只是点点点
这个就是生成的SpringBoot的主类
package com.example.hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
通过点点点生成的pom.xml文件如下:
<?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.example</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hello</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.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>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
现在直接启动主类是肯定报错的,因为现在导入了Mysql的驱动,想要启动的话,就把
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
这两个注释掉就行了,这里在启动时候就已经产生了dataSource实例,连接不到数据库肯定就会出问题的。
有这个注释又怎么跑起来?
- 将application.properties 改为application.yml (快捷键alt+shift+r)
- 增加以下目录
- TblUser.java
package com.example.hello.entity; /** * Create By Miccke(煎饼) * Create Time 2018/9/26 16:02 */ public class TblUser { private Integer id; private String userName; private String passWord; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } }
- TblService.java
package com.example.hello.service; import com.example.hello.entity.TblUser; import java.util.List; /** * Create By Miccke(煎饼) * Create Time 2018/9/26 16:03 */ public interface TblUserService { List<TblUser> queryList(); }
- TblUserServiceImpl.java
package com.example.hello.service.impl; import com.example.hello.dao.TblUserDao; import com.example.hello.entity.TblUser; import com.example.hello.service.TblUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * Create By Miccke(煎饼) * Create Time 2018/9/26 16:03 */ @Service("TblUserService") public class TblUserServiceImpl implements TblUserService { @Autowired private TblUserDao tblUserDao; @Override public List<TblUser> queryList() { return this.tblUserDao.queryList(); } }
- TblUserDao.java
package com.example.hello.dao; import com.example.hello.entity.TblUser; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * Create By Miccke(煎饼) * Create Time 2018/9/26 16:05 */ @Mapper public interface TblUserDao { List<TblUser> queryList(); }
- TblUserController.java
package com.example.hello.controller; import com.example.hello.entity.TblUser; import com.example.hello.service.TblUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * Create By Miccke(煎饼) * Create Time 2018/9/26 16:06 */ @RestController @RequestMapping("/user") public class TblUserController { @Autowired private TblUserService tblUserService; @GetMapping("/queryList") public List<TblUser> queryList(){ return this.tblUserService.queryList(); } }
- TblUserMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.hello.dao.TblUserDao"> <select id="queryList" resultType="com.example.hello.entity.TblUser"> select * from tbl_user </select> </mapper>
- application.yml
server: port: 8080 spring: datasource: url: jdbc:mysql://120.79.224.104:3306/weChattest?useUnicode=true&characterEncoding=UTF-8 username: root password: ******* mybatis: mapper-locations: classpath:mapper/*.xml #注意:一定要对应mapper映射xml文件的所在路径 type-aliases-package: com.example.hello.entity # 注意:对应实体类的路径 configuration: map-underscore-to-camel-case: true #驼峰映射
启动main()后访问接口http://localhost:8080/user/queryList,即可返回自己插入的数据,至此第一个带有数据库查询功能的SpringBoot应用就完成了。
本文源代码链接:https://github.com/Miccke/Hello