1. 微服务场景模拟
首先,我们需要模拟一个服务调用的场景。例如:提供一个获取人员信息的服务。
2. 服务提供者
我们新建一个项目,对外提供查询人员的服务。
3. 创建数据库
create table `tb_person` (
`id` double ,
`name` varchar (60),
`age` double ,
`sex` double ,
`birthday` date ,
`created` datetime ,
`updated` datetime ,
`remarks` varchar (75)
);
4. 使用eclipse创建工程
4.1. 借助于Spring提供的快速搭建工具:
![193e4dc1800899d86ffa92c22021710c.png](https://i-blog.csdnimg.cn/blog_migrate/490acbf6daf47aefa43cf692e09f86a8.jpeg)
4.2. 填写项目信息:
![476f831b5139de26caa209c1512e40d8.png](https://i-blog.csdnimg.cn/blog_migrate/dd568d26da1b5e169ea7b2b4b1d7cb44.jpeg)
4.3. 添加web依赖,mysql依赖
![16c81a736aaec0e5d4827949d7bd5ae3.png](https://i-blog.csdnimg.cn/blog_migrate/ca82c09f60c87e3b717dea1f38e595c2.jpeg)
4.4. 添加mybatis依赖
![b7aa9d2abafe6c60c8f608ea758ece6b.png](https://i-blog.csdnimg.cn/blog_migrate/6ea6dc10c4687ed45cce88b92f7c7f67.jpeg)
4.5. 生成项目的结构
![101ab9084d708a8d6ccd3e63db21019b.png](https://i-blog.csdnimg.cn/blog_migrate/f5ff7f15bd1fd97f1011db2dae7a9791.jpeg)
4.6. 依赖也已经全部自动引入:
<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.bootspring-boot-starter-parent2.1.1.RELEASEcom.dwkperson-service-demo0.0.1-SNAPSHOTwarperson-service-demoDemo project for Spring Boot1.8org.springframework.bootspring-boot-starter-jdbcorg.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-starter1.3.2mysqlmysql-connector-javaruntimeorg.springframework.bootspring-boot-starter-tomcatprovidedorg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-maven-plugin
当然,因为要使用通用mapper,所以我们需要手动加一条依赖:
tk.mybatis mapper-spring-boot-starter 2.0.4
ok!
注意:SpringCloud中mysql驱动包默认是8.x,太高了,可能会引起问题,所以需要修改成5.x
mysql mysql-connector-java runtime5.1.47
5. 编写代码
添加一个对外查询的接口:
@RestController@RequestMapping("person")public class PersonController { @Autowired private PersonService personService; @GetMapping("/{id}") public Person queryById(@PathVariable("id") Long id) { return this.personService.queryById(id); }}Service:@Servicepublic class PersonService { @Autowired private PersonMapper personMapper; public Person queryById(Long id) { return this.personMapper.selectByPrimaryKey(id); }}mapper:@Mapperpublic interface PersonMapper extends tk.mybatis.mapper.common.Mapper{}
实体类:
@Table(name = "tb_person")public class Person implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 姓名 private String name; // 年龄 private Integer age; // 性别,1男性,2女性 private Integer sex; // 出生日期 private Date birthday; // 创建时间 private Date created; // 更新时间 private Date updated; // 备注 private String remarks; // 。。。省略getters和setters}
属性文件,这里我们采用了yaml语法,而不是properties:
server:
port: 8082
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: user-service # 应用名称
main:
allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
# druid:
# initial-size: 1
# min-idle: 1
# max-active: 20
# test-on-borrow: true
# stat-view-servlet:
# allow: true
eureka:
client:
service-url: # EurekaServer地址
defaultZone: http://127.0.0.1:10086/eureka
instance:
prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称
ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找
6. 项目结构:
![68940d311cc25959005ae650ab4bb5b5.png](https://i-blog.csdnimg.cn/blog_migrate/bec3a5b7c724d2c247bf720b34d35c77.jpeg)
7. 启动并测试:
启动项目,访问接口:http://localhost:89/person/findAll
![4e2675a6a42359d7e58da15c0eb2f81b.png](https://i-blog.csdnimg.cn/blog_migrate/4ec45cf796c012ecbb2326d4f5622a38.jpeg)