开发者学堂课程【微服务框架 Spring Cloud 快速入门:部门服务提供者】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/614/detail/9341
部门服务提供者
内容介绍
一、设置步骤
二、总结
一、设置步骤
1、新建 microservicecloud-provider-dept-8001
创建完成后回到父工程查看 pom 文件变化
<module> microservicecloud-provider-dept-8001</module>
父类子类直接继承,对microservicecloud-provider-dept-8001
进行构建。一般情况下,现在的开发基本上有这样一句算是业内通用的语言规则,约定大于配置大于编码,Maven中就有配置这样规则,所以说完成工程以后。第一步,以现在的开发思路,老师会带着大家教正确、规范、专业的构建思路和编码流程。建完maven 以后,不要先去编码,配置和约定,先去解决pom、resources 的配置问题,先解决软件环境的配置问题,再去编码。
2、POMZ
<project xmIns= "http://maven.apache.org/PON/4.0.0” xmIns:xsi="http;/ow.w3.org/2001/XML Schema-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>
<parent>
<groupId>com.atguigu.springcloud</groupId>
<artifactId>microservicecloud</ artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
父类
<artifactId>microservicecloud-provider-dept-8001</artifactId>
子类 8001这个子类继承了microservicecloud 这个父类,
<dependencies>
<dependency><!
--引入自己定义的api通用包,可以使用 Dept部门 Entity --> //在以往我们做工程时,如果自己的工程需要用到部门 Entity 会去新建一个 package cn.guigu. Entity 在里面放Dept.java。如果另外一个工程,也需要使用部门 entity,再放一个 Dept.java。每个工程干一份,只要知道一段代码重复了两次以上,公共部分提取出来。
<groupid>com.atguigu. springcloud</groupId>
<artifactId>microservicecloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</ artifactId>
</dependency>
//解压mysql驱动包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid< / artifactId>
</dependency>
//阿里巴巴的连接池
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
//日志
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</ artifactId>
</dependency> //mybatis
整合
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> //
boot
的接器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--修改后立即生效,热部署-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
3、YML
YML配置相关文件的安装和编写,只要是boot和相关的工程,都理解 application.yml
Server:
port: 8001
mybatis: #整合
config- location: classpath:mybatis/mybatis.cfg.xml
# mybatis配置文件所在路径
type-aliases-package:com.atguigu.springcloud.entities
#所有Entity别名类所在包
mapper- locations :
- classpath:mybatis/mapper/**/*.xml
# mapper映射文件
Mybatis在dio层有两种解析方式一种是 xxxmap.xel 用配置的方式进行完成,第二种以注解的方式完成。以前写 DeptDao 时候,如果说没有使用 mybatis 框架一定会写 DeptDaoImpl,但是已经没有了DeptDaoImpl 而是写DeptMapper.xml。由 DeptMapper.xml 来完成增删改查这些功能,完成对 DeptDao 这个接口的落地实现。
spr
i
ng:
application:
name:microservicecloud-dept
// 对外暴露的微服务名字
datasource:
type:com.alibaba.druid.pool.DruidDataSource
#当前数据源操作类型
driver-class-name:org.gjt.mm.mysql.Driver
# mysql驱动包
url: jdbc:mysql://localhost:3306/cloudDB01 #数据库名称
username:root
password:123456
dbcp2:
min-idle: 5
#数据库连接池的最小维持连接数
initial-size: 5
#初始化连接数
max-total: 5
#最大连接数
max-wait-millis: 200
#等待连接获取的最大超时时间
4、工程 src/main/resources 目录下新建 mybatis 文件夹后新建mybatis.cfg.xml 文件
当第一次学习 mybatis only one 这个独立框架的时候了解到mybatis本身就有一些配置,但是与 spring 整合之后,几乎全部配置到 spring application cfg html 里,实际而言里面也没有什么,但是从标准的构建而言,还是有 mybatis 这个文件存在的。
<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE conf iguration
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>
5、MySQL 创建部门数据库脚本
DROP DATABASE IF EXISTS cloudDB01;
CREATE DATABASE cloudDB01 CHARACTER SET UTF8;
USE cloudDB01 ;
CREATE TABLE dept
(
deptno BIGINT NOT NULL PRIMARY KEY AUTO_ INCREMENT,
dname VARCHAR(60) ,
db_ source
VARCHAR(60)
);
INSERT INTO dept(dname,db_source) VALUES
(‘开发部‘
,DATABASE());
INSERT INTO dept(dname,db_source) VALUES
(‘人事部'’,DATABASE());
INSERT INTO dept(dname,db_source) VALUES
(‘财务部' ,DATABASE());
INSERT INTO dept(dname,db_source) VALUES
(‘市场部' ,DATABASE());
INSERT INTO dept(dname,db_source) VALUES
(‘运维部', DATABASE());
数据源也叫做当前这条记录插进数据库的名字。
DATABASE 是 mysql 自带的函数跟 NOW,currdate 是一个意思。
把这段代码直接放到数据库当中,直接执行
执行结果:
一个微服务可以单独连一个数据库。
6、DeptDao 部门接口
新建一个 Java Package 并命名为 com.atguigu.springcloud.dao,再建立一个 DeptDao
输入:
package com. atguigu.springcloud.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.atguigu.springcloud.entities.Dept;
//????????
@Mapper
public interface DeptDao
{
public boolean addDept(Dept dept);
public Dept findById(Long id);
public List<Dept> findAll();
}
7、工程 src/main/resources/mybatis 目录下新建 mapper 文件夹后再建 DeptMapper.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.atguigu.springcloud.dao.
DeptDao">
<select id="findById" resultType="Dept" parameterType= "Long">
select deptno,dname,db_source from dept where deptno=#{ deptno};
</select>
<select id="findAlL" resultType= "Dept">
select deptno, dname ,db_ source from dept ;
</select>
<insert id= "addDept" parameterType= "Dept ">
INSERT INTO dept(dname,db_source) VALUES(#{dname},
DATABASE());
</insert>
</mapper>
点开 com.atguigu.springcloud.dao.DeptDao
里面有这三个方法
//????????
@Mapper
public interface DeptDao
{
public boolean addDept(Dept dept);
public Dept findById(Long id);
public List<Dept> findAll();
}
8、DeptService 部门服务接口
从数据库到 DAO 接口,充分体会约定>配置>编码这句话。第一步做了pom,第二部做了 yml,第三步建了 SQL 脚本,第四步 Dao层和 Dao 层的实现,第五步进行相关 service 层的构建,因为 Dao 层有 DeptDao 所以 service 当中也有一个 DeptService 接口,里面内容为:
package com.atguigu.springcloud.service;
import java.util.List;
import com.atguigu.springcloud.entities.Dept;
public interface DeptService
{
public boolean add(Dept dept) ;
public Dept
get(Long id);
public List<Dept> list();
}
9、DeptServicelmpl 部门服务接口实现类
package com.atguigu.springcloud.service.impl;
import java.util.List;
import com. atguigu. springc loud. entities .Dept;
import com. atguigu. springcloud. service . DeptService;
@
Service
public class DeptServiceImpl implements DeptService
{
@
Autowired
Private DeptDao dao;
@Override
public boolean add(Dept dept)
{
return dao.addDept(dept
)
;
}
@Override
public Dept get(Long id)
{
return dao.findById(id);
}
@Override
public List<Dept> list()
{
return dao.findAll();
}
10、DeptController 部门微服务提供者 REST
package com.atguigu.springcloud.controller;
import org.springframework.beans.factory.annotation.
Autowired;
Import org.springframework.web.bind.annotation.
RestController;
import com. atguigu. springcloud.service.DeptService;
@RestController
public class DeptController
{
@Autowired
private DeptService service;
@RequestMapping(value="/dept/add",method=RequestMethod. POST)
public boolean add(@RequestBody Dept dept)
{
return service.add(dept);
}
@RequestMapping(value="/dept/get/{id}" ,method=RequestMethod .GET)
public Dept get(@PathVariabl("id") Long. id)
{
return service.get(id);
}
@RequestMapping(value="/dept/list",method=RequestMethod. GET)
public List<Dept> list()
{
return service.list();
}
}
11、DeptProvider8001_App 主启动类 DeptProvider800
1_App
package com.atguigu.springcloud;
import org.springframework . boot.SpringApplication;
import org.springframework.boot.autoconfigure.Spring
BootApplication;
@SpringBootApplication
public class DeptProvider8001 App
{
public static void main(String[ ] args)
{
SpringApplication.run(DeptProvider8001_App.class, args);
}
}
12、测试
启动程序,如看到 Started DeptProvider8001_App in 2.8seconds在这启动,说明微服务架构成功。
如果有 com.cation 会默认 localhost 8080 但是现在是独立的。我们的默认端口是8001,所以浏览器输入 localhost:8001/dept/list
如果一切顺利,程序编码没有任何问题,就可以直接启动,在DeptController里的dept/list,就相当于访问底层 list,最终相当于执行 SELECT deptno, dname, db source FROM dept 这条语句,查出这五条记录。
执行之后浏览器显示结果:
刚好是五条记录
13、最终工程展现
二、总结:
第一、新建 microservicecloud-provider-dept-8001
第二、形成肌肉化记忆,架构正确了,填细节才能充实,microservicecloud 先解决pom.xml。再次体会约定大于配置大于编码这句话,一定先把配置环境之类的解决掉,才能更好的编码。
Microservicecloud-
>
application.yml->
数据库脚本->DeptDao.java->DeptMapper.xml->DeptService.java->DeptServicelmpl.java->DeptCotoller.java->DeptProvider8001_App->
浏览器里看到效果