1. 创建父工程 Maven Project
新建父工程microservicecloud,packaging是pom模式,pom.xml内容如下:
<!-- SpringBoot父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> <relativePath /> </parent> <properties> <!-- jdk version --> <java.version>1.8</java.version> <!-- springcloud version --> <cloud.version>Finchley.RELEASE</cloud.version> <!-- mysql version --> <mysql.version>5.1.48</mysql.version> <!-- druid version --> <druid.version>1.1.6</druid.version> <!-- junit version --> <junit.version>4.12</junit.version> <!-- log4j version --> <log4j.version>1.2.17</log4j.version> </properties> <!-- dependencyManagement 主要是对dependency的版本进行管理,如果dependency没有生命版本,则继承该标签声明的版本 --> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- druid datSource --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.5</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </dependencyManagement>
2. 公共模块
(1) 右键父项目名称,创建Maven Module,项目名称是microservicecloud-api,packaging是jar模式即可,这是一个子项目。
(2) 新建部门Entity
public class Dept { private Long deptNo; private String deptName; private String dbSource; public Dept(){} public Dept(Long deptNo, String deptName, String dbSource) { this.deptNo = deptNo; this.deptName = deptName; this.dbSource = dbSource; } public Long getDeptNo() { return deptNo; } public void setDeptNo(Long deptNo) { this.deptNo = deptNo; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getDbSource() { return dbSource; } public void setDbSource(String dbSource) { this.dbSource = dbSource; } @Override public String toString() { return "Dept [deptNo=" + deptNo + ", deptName=" + deptName + ", dbSource=" + dbSource + "]"; } }
公共模块可以达到通用目的,也即需要用到部门实体的话,不用每个工程都定义一份,直接引用本模块即可。
3. 微服务提供者
(1) 右键父项目名称,新建Maven Module, 名称为microservicecloud-provider-dept-8001,packaging是jar模式即可,pom.xml内容如下:
<dependencies> <!-- 引入自己定义的api通用包,可以使用Dept部门Entity --> <dependency> <groupId>com.linhw.demo</groupId> <artifactId>microservicecloud-api</artifactId> <version>${project.version}</version> </dependency> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- druid datSource --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!-- mybatis-spring --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- 修改后立即生效,热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
(2) 在src/main/resources目录下创建application.properties
server.port=8001 #mybatis #全局配置文件所在路径 mybatis.config-location=classpath:mybatis/mybatis.cfg.xml #所有Entity别名类所在包 mybatis.type-aliases-package=com.linhw.demo.entities #mapper映射文件 mybatis.mapper-locations=classpath:mybatis/mapper/**/*.xml #应用名称 spring.application.name=microservicecloud-dept #当前数据源操作类型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #mysql驱动包 spring.datasource.driver-class-name=org.gjt.mm.mysql.Driver spring.datasource.url=jdbc:mysql://192.168.178.5:12345/cloudDB01?characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=123456 #数据库连接池的最小维持连接数 spring.datasource.dbcp2.min-idle=5 #初始化连接数 spring.datasource.dbcp2.initial-size=5 #最大连接数 spring.datasource.dbcp2.max-idle=5 #等待连接获取的最大超时时间 spring.datasource.dbcp2.max-wait-millis=200
(3) 在src/main/resources目录下创建mybatis文件夹,并在文件夹下创建mybatis.cfg.xml,这是mybatis的全局配置文件
<?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>
(4) 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()); SELECT * FROM dept;
(5) DAO接口和映射文件
@Mapper public interface DeptDao { public boolean addDept(Dept dept); public Dept findById(Long deptno); public List findAll(); }
在src/main/resources/mybatis目录下创建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.linhw.demo.dao.DeptDao"> <select id="findById" resultType="Dept" parameterType="Long"> select deptno as deptNo,dname as deptName,db_source as dbSource from dept where deptno=#{deptno}; </select> <select id="findAll" resultType="Dept"> select deptno as deptNo,dname as deptName,db_source as dbSource from dept; </select> <insert id="addDept" parameterType="Dept"> insert into dept(dname, db_source) values(#{deptName},DATABASE()); </insert> </mapper>
(6) 服务接口
public interface DeptService { public boolean add(Dept dept); public Dept get(Long id); public List list(); }
@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 list() { return dao.findAll(); } }
(7) 微服务提供者REST(Controller)
@RestController @RequestMapping("/dept") public class DeptController { @Autowired private DeptService service; @RequestMapping(value = "/add", method = RequestMethod.POST) public boolean add(@RequestBody Dept dept) { return service.add(dept); } @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) public Dept get(@PathVariable("id") Long id) { return service.get(id); } @RequestMapping(value = "/list", method = RequestMethod.GET) public List list() { return service.list(); } }
(8) 启动类:放在包的最顶层,一边可以扫描同级包或子包的相关注解类
@SpringBootApplication public class Provider_8001_App { public static void main(String[] args) { SpringApplication.run(Provider_8001_App.class, args); } }
(9) 启动服务提供者,访问测试:http://localhost:8001/dept/list
4. 微服务消费者
(1) 右键父项目名称,新建Maven Module, 名称为microservicecloud-consumer-dept-80,packageing是jar模式即可,pom.xml内容如下:
<dependencies> <!-- 引入自己定义的api通用包,可以使用Dept部门Entity --> <dependency> <groupId>com.linhw.demo</groupId> <artifactId>microservicecloud-api</artifactId> <version>${project.version}</version> </dependency> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!-- 修改后立即生效,热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
(2) 在src/main/resources目录下创建application.properties
server.port=80
(3) 配置类
@Configuration //添加该注解,相当于是applicationContext.xml配置文件 public class ConfigBean { @Bean //添加该注解相当于是<bean id=".." class="" /> public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
RestTemplate提供了多种便捷访问远程Http服务的方法, 是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集
(4) 微服务消费者(Controller)
@RestController @RequestMapping("/consumer") public class DeptController_Consumer { private static final String REST_URL_PREFIX = "http://localhost:8001"; @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/dept/add") public boolean add(Dept dept) { return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class); } @RequestMapping(value = "/dept/get/{id}") public Dept get(@PathVariable("id") Long id) { return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class); } @RequestMapping(value = "/dept/list") public List list() { return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class); } }
(5) 启动类
@SpringBootApplication public class Consumer_80_App { public static void main(String[] args) { SpringApplication.run(Consumer_80_App.class, args); } }
(6) 启动项目,测试访问:http://localhost/consumer/dept/list