1. 项目搭建
1.1 创建一个简单的Maven项目
![](https://img.haomeiwen.com/i18792147/93a88e9b6c002c89.png)
可以把src删了,父项目,完全可以不要它
![](https://img.haomeiwen.com/i18792147/811a9464ca8cb364.png)
打包方式:
<!-- 打包方式-->
<packaging>pom</packaging>
1.2 导入依赖
<!-- 依赖版本控制-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<!-- 依赖管理-->
<dependencyManagement>
<dependencies>
<!-- springcloud的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springboot的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 数据源依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- springboot启动依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- junit测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- lombok插件依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- 日志依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
2. 创建一个maven模块API
![](https://img.haomeiwen.com/i18792147/daa7db555ecb7060.png)
2.1 导入依赖
<dependencies>
<!-- 当前的module依赖,可以导入父工程依赖(如果父工程有此依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2.2 新建实体类
实现序列化
![](https://img.haomeiwen.com/i18792147/678f17c7ce176523.png)
package com.common.springcloud.pojo;
@Data
@NoArgsConstructor
@Accessors(chain = true) //链式写法
//实现序列化的目的是为了保证流传输不出问题
public class Dept implements Serializable {
private long deptno; //主键
private String dname;
//这个数据存在哪个数据库
private String db_source;
/**
* 链式写法
* dept.setDeptNo(11).setDname('sss').setDb_source()
*/
}
2.3 表结构
![](https://img.haomeiwen.com/i18792147/c0c31f54376add21.png)
API这个微服务就结束了
3. 创建一个服务的提供者
![](https://img.haomeiwen.com/i18792147/b111e5f1d4a9a848.png)
3.1 导入依赖
<dependencies>
<!-- 我们需要拿到实体类,从api项目的pojo拿-->
<dependency>
<groupId>com.common</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid数据源依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- 日志核心依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<!-- springboot启动依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- spirngboot测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<!-- springboot的web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jetty依赖相当于tomcat(springboot自带tomcat)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- 热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
3.2 编写配置文件application.yml
配置Mybatis和Spring
![](https://img.haomeiwen.com/i18792147/02a7e887e87a8104.png)
mybatis-config.xml
<?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"/>
</settings>
</configuration>
Server:
port: 8001
#mybatis配置
mybatis:
type-aliases-package: com.common.springcloud.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
config-location: classpath:mybatis/mybatis-config.xml
#spring配置
spring:
application:
name: springcloud-provider-dept
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/db01?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false
username: root
password: root
driver-class-name: org.gjt.mm.mysql.Driver
#以下为新增
druid:
# 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个,
#注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
test-on-borrow: false
# 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
#注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
test-while-idle: true
# 指明是否在归还到池中前进行检验,注意: 设置为true后如果要生效,
#validationQuery参数必须设置为非空字符串
test-on-return: false
# SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.
#如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录
validation-query: select 1
3.3 编写Dao接口
![](https://img.haomeiwen.com/i18792147/b4524c14a1209b02.png)
package com.common.springcloud.mapper;
@Mapper //将dao交给spring管理 不用写mapper.xml了 自动注册一个接口实现类
@Repository //将dao类声明为bean
public interface DeptDao {
boolean addDept(Dept dept);
Dept queryId(Long id);
List<Dept> queryAll();
}
3.4 Mapper.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.common.springcloud.mapper.DeptDao">
<insert id="addDept" parameterType="Dept">
insert into dept (dname, db_source)
values (#{dname}, DATABASE());
</insert>
<select id="queryId" resultType="Dept" parameterType="java.lang.Long">
select * from dept where deptno = #{deptno};
</select>
<select id="queryAll" resultType="Dept">
select * from dept;
</select>
</mapper>
3.5 编写Service层
![](https://img.haomeiwen.com/i18792147/96882e836f6f8fc5.png)
3.5 Controller层提供Restful服务
![](https://img.haomeiwen.com/i18792147/cbbc8504d687a246.png)
3.6 编写启动类
![](https://img.haomeiwen.com/i18792147/2ec80a06424167ef.png)
4. 创建一个服务的消费者
![](https://img.haomeiwen.com/i18792147/94539cbc71c13eca.png)
4.1 导入依赖
<!-- 实体类依赖,从api中导-->
<dependency>
<groupId>com.common</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- spirngboot的web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
4.2 application.yml配置
只用配端口号
server:
port: 80
4.3 Controller需要RestTemple
a. 配置类ConfigBean中配置
![](https://img.haomeiwen.com/i18792147/39724ad8c429ac7a.png)
b. Controller中调用
![](https://img.haomeiwen.com/i18792147/01db8757b0f9644f.png)
对应提供者的方法
![](https://img.haomeiwen.com/i18792147/452dadbdd06f1e2c.png)
package com.common.springcloud.controller;
@RestController
public class DeptConsumerController {
//消费者 没有servicec层
//RestTemplate ...方法供我们调用就可以了! 注册sring中
//(url, 实体: Map, Class<T> ResponseType)
@Autowired
private RestTemplate restTemplate;
private static final String REST_URL_PREFIX = "http://localhost:8001";
@RequestMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id) {
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/"+id, Dept.class);
}
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept) {
return restTemplate.postForObject(REST_URL_PREFIX +"/dept/add", dept, boolean.class);
}
@RequestMapping("/consumer/dept/list")
public List<Dept> list() {
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
}
}
4.4 编写启动类
![](https://img.haomeiwen.com/i18792147/4af537ad534cb89c.png)
测试拿到数据
![](https://img.haomeiwen.com/i18792147/6d402b58439f328e.png)
网友评论