1.创建一个新的项目模块【micro】,该模块提供有API程序类,包括:公共接口,DTO类。
2.创建一个DTO信息的DTO类,该类的组成和vo类结构相同。(如果说现在的项目使用的是 MyBatis,那么对于当前的DTO设计就比较鸡肋了,但是如果现在要使用的是 SpringDataJPA,那么DTO类就可以帮助使用者隐藏PO类(有一系列的重要注解)的组成结构。)
package com.yootk.dto; import java.io.Serializable; public class DeptDTO implements Serializable { private Long deptno; private String dname; private String loc; //setter(),getter(),toString()方法略... }
3.【micro】修改pom文件,追加api模块的依赖配置:将micro-api定义成依赖包,方便后面在其他模块引入此模块。
4.【micro】创建"micro-provider-dept-8001"微服务,并引入相应的依赖库。
5.【micro-provider-dept-8001】创建描述部门的vo类,这个vo类只存活在当前的RPC服务端
6.【micro-provider-dept-8001】修改mybatis.cfg.xml配置文件,将自动配置的别名进行包的修改:
<package name="com.yootk.cloud.vo"/>
7.【micro-provider-dept-8001】定义IDeptDAO接口,实现数据查询操作:写了三个方法
@Mapper
public interface IDeptDAO {
public boolean doCreate(Dept dept);
public List<Dept> findAll();
public Dept findById(Long id);
}
8.【micro-provider-dept-8001】创建Dept.xml配置文件,设置接口的数据操作
9.【micro-provider-dept-8001】修改src/main/resources/application.yml配置文件,配置数据库的连接。
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver url: jdbc:mysql://localhost:3306/yootk_8001 username: root password: mysqladmin dbcp2: min-idle: 5 initial-size: 3 max-total: 5 max-wait-millis: 100 messages: basename: i18n/Message # 定义要读取的资源文件名称 server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # MyBatis的核心配置文件 mapper-locations: - classpath:mybatis/mapper/**/*.xml
10.【micro-api】 定义IDeptService业务接口,业务接口一定是暴露在远程端的。
package com.yootk.service; import com.yootk.dto.DeptDTO; import java.util.List; public interface IDeptService { /** * 执行数据的增加处理操作,增加的时候将数据保存在DTO类中 * @param dto 包含有要增加的数据(dname,loc) * @return 如果增加成功返回一个不为空的DTO对象,同时将增加后的id保存在此对象之中 */ public DeptDTO add(DeptDTO dto); public List<DeptDTO> list(); public DeptDTO get(long id); }
11.【micro-provider-dept-8001】在具体的业务提供模块上进行IDeptService接口的实现,不要忘记采用spring内部的@Service注解
12.【micro-provider-dept-8001】在根包下编写程序启动类:
package com.yootk.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class StartDeptService {
public static void main(String[] args) {
SpringApplication.run(StartDeptService.class, args);
}
}
13.【micro-provider-dept-8001】编写测试类,进行代码的测试处理。
package com.yootk.cloud.test;
import com.yootk.cloud.StartDeptService;
import com.yootk.dto.DeptDTO;
import com.yootk.service.IDeptService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration // 表示需要启动Web配置才可以进行测试
@SpringBootTest(classes = StartDeptService.class) // 定义要测试的启动类
public class TestDeptService {
@Autowired
private IDeptService deptService ;
@Test
public void testAdd() {
DeptDTO dto = new DeptDTO() ;
dto.setDname("【dept-8001】测试部门名称");
dto.setLoc("【dept-8001】测试部门位置");
System.out.println("【部门增加测试】" + this.deptService.add(dto));
}
@Test
public void testGet() {
System.out.println("【部门ID查询测试】" + this.deptService.get(1));
}
@Test
public void testList() {
System.out.println("【部门列表测试】" + this.deptService.list());
}
}
14.【micro-provider-dept-8001】定义一个DeptRest程序类,进行请求的处理
package rest; import com.yootk.dto.DeptDTO; import com.yootk.service.IDeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController public class DeptRest { @Autowired private IDeptService deptService ; @PostMapping("/dept/add") public Object add(@RequestBody DeptDTO dto) { return this.deptService.add(dto) ; } @GetMapping("/dept/get/{deptno}") public Object get(@PathVariable("deptno") long deptno) { return this.deptService.get(deptno) ; } @GetMapping("/dept/list") public Object list() { return this.deptService.list() ; } }
15.【windows】由于需要模拟多台主机之间的访问,所以设置不同的主机名称,修改 hosts文件:
● 路径:C: Windows System32 driversletchosts:127.0.0.1 dept-8001.com
● 访问路径:http://dept-8001.com:8001/dept/list;
建立Boot消费端
本次的项目还没有在整个的程序里面启动 SpringCloud的相关配置,仅仅只是进行了 SpringBoot与Rest基本实现,在整个的SpringCloud微服务设计里面,最为核心的部分就是Rest交互,而后围绕着Rest交互产生了许多的新的依赖,本次将在“ microclient”模块里面进行Rest服务的调用,该模块运行在80端口(模拟WEB服务器)。
16.【micro-client】创建micro-client模块并导入相应的依赖包
17.【micro-client】创建配置类:如果要想进行Rest服务的基本调用,那么在 Spring里面提供有一个 RestTemplate的操作模版,使用这个模版可以将接收到的JSON数据自动的转为指定的对象。
package com.yootk.boot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestfulConfig {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate() ;
}
}
利用这种方式配置不管在项目之中使用多少次的 RestTemplate实际上整个的 Spring只会提供有一个对象实例,得到的好处就
是避免对象重复的实例化所带来的GC处理问题。
17.【micro-client】创建DeptConsumerAction程序类,进行所有服务调用: