SpringCloud 版本和 SpringBoot版本的选择:
1、父项目搭建新建Maven项目作为父项目,Packageing是pom模式
导入依赖:
2、实体类模块搭建4.0.0 org.example SpringCloud 1.0-SNAPSHOT pom Hoxton.SR12 2.3.12.RELEASE 8.0.27 1.2.8 2.2.0 4.12 2.17.1 org.springframework.cloud spring-cloud-dependencies ${spring-cloud-version} pom import org.springframework.boot spring-boot-dependencies ${spring-boot-version} pom import mysql mysql-connector-java ${mysql-connector-java-vesion} com.alibaba druid ${druid-version} org.mybatis.spring.boot mybatis-spring-boot-starter ${mybatis-starter-version} junit junit ${junit-version} test org.apache.logging.log4j log4j-core ${log4j-core-sersion}
新建子模块 springcloud-api :
依赖:
SpringCloud org.example 1.0-SNAPSHOT 4.0.0 springcloud-api org.projectlombok lombok
IDEA 连接数据库: jdbc:mysql://localhost:3306?serverTimezone=Asia/Shanghai
创建数据库:
新建表:
CREATE TABLE `dept` (
`dept_no` bigint(20) NOT NULL AUTO_INCREMENT,
`dept_name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`db_source` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`dept_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO dept(dept_name, db_source) VALUES ("开发部", DATAbase());
INSERT INTO dept(dept_name, db_source) VALUES ("人事部", DATAbase());
INSERT INTO dept(dept_name, db_source) VALUES ("财务部", DATAbase());
INSERT INTO dept(dept_name, db_source) VALUES ("市场部", DATAbase());
INSERT INTO dept(dept_name, db_source) VALUES ("运维部", DATAbase());
数据库写完后写实体类:
package com.example.springcloud.pojo;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true) // 链式写法
public class Dept implements Serializable {
private Long deptNo;
private String deptName;
// 看一下这个数据是存在哪个数据库中的字段
// 微服务,一个服务对应一个数据库,同一个信息可能存在不同的数据库中
private String dbSource;
public Dept(String deptName) {
this.deptName = deptName;
}
}
3、服务提供者模块搭建
新建子模块 springcloud-provider-dept-8001
配置文件SpringCloud com.example 1.0-SNAPSHOT 4.0.0 springcloud-provider-dept-8001 com.example springcloud-api 1.0-SNAPSHOT junit junit test mysql mysql-connector-java com.alibaba druid ch.qos.logback logback-core org.mybatis.spring.boot mybatis-spring-boot-starter org.springframework.boot spring-boot-starter-test org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-jetty org.springframework.boot spring-boot-devtools
application.yml 配置文件:
server:
port: 8001
# myBaits 配置
mybatis:
type-aliases-package: com.example.springcloud.pojo
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
# spring 配置
spring:
application:
name: spring-provider-dept
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/workers?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password:
mybatis-config.xml 配置文件:
Dao层
DeptDao
package com.example.springcloud.dao;
import com.example.springcloud.pojo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface DeptDao {
boolean addDept(Dept dept);
Dept queryDept(Long id);
List queryAllDept();
}
deptMapper.xml
Service层insert into db_01.dept(dept_name, db_source) VALUES (#{deptName}, DATAbase()) select * from db_01.dept where dept_no = #{id}
package com.example.springcloud.service;
import com.example.springcloud.pojo.Dept;
import java.util.List;
public interface DeptService {
boolean addDept(Dept dept);
Dept queryDept(Long id);
List queryAllDept();
}
package com.example.springcloud.service.impl;
import com.example.springcloud.dao.DeptDao;
import com.example.springcloud.pojo.Dept;
import com.example.springcloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptDao deptDao;
public boolean addDept(Dept dept) {
return deptDao.addDept(dept);
}
public Dept queryDept(Long id) {
return deptDao.queryDept(id);
}
public List queryAllDept() {
return deptDao.queryAllDept();
}
}
Controller层
package com.example.springcloud.controller;
import com.example.springcloud.pojo.Dept;
import com.example.springcloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class DeptController {
@Autowired
private DeptService deptService;
@PostMapping("/dept/add")
public boolean addDept(@RequestBody Dept dept){
return deptService.addDept(dept);
}
@GetMapping("/dept/get/{id}")
public Dept get(@PathVariable("id") Long id){
return deptService.queryDept(id);
}
@GetMapping("/dept/list")
public List queryAll(){
return deptService.queryAllDept();
}
}
主启动器
package com.example.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DeptProvider_8001 {
public static void main(String[] args) {
SpringApplication.run(DeptProvider_8001.class, args);
}
}
启动访问测试接口。
4、服务消费者模块搭建引入依赖pom.xml;
配置文件SpringCloud com.example 1.0-SNAPSHOT 4.0.0 springcloud-consumer-dept-80 com.example springcloud-api 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools
server: port: 80controller层
package com.example.springcloud.controller;
import com.example.springcloud.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
public class DeptConsumerController {
// 消费者,不应该有service层
// RestTemplate , 有对应的请求方法,供我们直接调用,要注册到 Spring 中
private static final String REST_URL_PREFIX = "http://localhost:8001";
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept){
return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add", dept, Boolean.class);
}
@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/list")
public List list(){
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
}
}
配置 RestTemplate
package com.example.springcloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
启动项目并测试接口。



