1、项目结构
1.1Feign-api工程
1.1.1Feign-api 工程结构![在这里插入图片描述](https://img-blog.csdnimg.cn/8b20188d6c6e4d0c9cfa63bc45a4f29e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA4oSS4oS0duKEr-W_teW_g-qnlOqmv-C_kA==,size_10,color_FFFFFF,t_70,g_se,x_16)
clients类
SchoolClient类
package com.czxy.feign.clients;
import com.czxy.feign.pojo.School;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(value = "schoolservice")
public interface SchoolClient {
@GetMapping("/school/{sid}")
School queryBySid(@PathVariable Integer sid);
}
TeacherClient类
package com.czxy.feign.clients;
import com.czxy.feign.pojo.Teacher;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@FeignClient("teacherservice")
public interface TeacherClient {
@GetMapping("/teacher/list")
List<Teacher> list();
}
TypeClient类
package com.czxy.feign.clients;
import com.czxy.feign.pojo.Types;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(value = "typeservice")
public interface TypeClient {
@GetMapping("/types/{tid}")
Types queryByTid(@PathVariable Integer tid);
}
pojo类
School类
在这里插入代码片
package com.czxy.feign.pojo;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "t_school")
public class School {
@Id
private Integer id;
@Column(name = "school_name")
private String schoolName;
}
Teacher类
package com.czxy.feign.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@Table(name = "t_teacher")
public class Teacher {
@Id
private Integer id;
@Column(name = "teacher_name")
private String teacherName;
private String pwd;
private String sex;
private String salary;
@Column(name = "type_id")
private Integer typeId;
@Column(name = "school_id")
private Integer schoolId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@Column(name = "hire_date")
private Date hireDate;
private String remark;
private School school;
private Types types;
}
Types类
package com.czxy.feign.pojo;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "t_type")
public class Types {
@Id
private Integer id;
private String city;
}
1.2 SchoolService工程
1.2.1 SchoolService工程结构
SchoolMapper接口
package com.czxy.mapper;
import com.czxy.feign.pojo.School;
import tk.mybatis.mapper.common.Mapper;
public interface SchoolMapper extends Mapper<School> {
}
SchoolService类
package com.czxy.service;
import com.czxy.feign.clients.SchoolClient;
import com.czxy.mapper.SchoolMapper;
import com.czxy.feign.pojo.School;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class SchoolService implements SchoolClient {
@Autowired
private SchoolMapper schoolMapper;
@Override
public School queryBySid(Integer sid) {
return schoolMapper.selectByPrimaryKey(sid);
}
}
SchoolController类
package com.czxy.web;
import com.czxy.feign.pojo.School;
import com.czxy.service.SchoolService;
import org.springframework.beans.factory.annotation.Autowired;
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;
@RestController
@RequestMapping("/school")
public class SchoolController {
@Autowired
private SchoolService service;
@GetMapping("{sid}")
public School queryBySid(@PathVariable Integer sid){
return service.queryBySid(sid);
}
}
SchoolApplication驱动类
package com.czxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(value = "com.czxy.mapper")
@EnableFeignClients(basePackages = "com.czxy.feign.clients")
public class SchoolApplication {
public static void main(String[] args) {
SpringApplication.run(SchoolApplication.class,args);
}
}
1.2.2resource配置文件
application.yml文件
server:
port: 8081
spring:
application:
name: schoolservice
datasource:
url: jdbc:mysql://localhost:3306/ssm_vue?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
mybatis:
type-aliases-package: com.czxy.feign.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
bootstrap.yml文件
spring:
application:
name: schoolservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
config:
file-extension: yaml # 文件后缀名
feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
1.3TeacherService工程
1.3.1TeacherService结构
TeacherMapper接口
package com.czxy.mapper;
import com.czxy.feign.pojo.Teacher;
import tk.mybatis.mapper.common.Mapper;
public interface TeacherMapper extends Mapper<Teacher> {
}
TeacherService类
package com.czxy.service;
import com.czxy.feign.clients.SchoolClient;
import com.czxy.feign.clients.TeacherClient;
import com.czxy.feign.clients.TypeClient;
import com.czxy.mapper.TeacherMapper;
import com.czxy.feign.pojo.Teacher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TeacherService implements TeacherClient {
@Autowired
private TeacherMapper teacherMapper;
@Autowired
private SchoolClient schoolClient;
@Autowired
private TypeClient typeClient;
@Override
public List<Teacher> list() {
List<Teacher> teacherList = teacherMapper.selectAll();
for (Teacher te : teacherList) {
te.setSchool(schoolClient.queryBySid(te.getSchoolId()));
te.setTypes(typeClient.queryByTid(te.getTypeId()));
}
return teacherList;
}
}
TeacherController类
package com.czxy.web;
import com.czxy.feign.pojo.Teacher;
import com.czxy.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/teacher")
@CrossOrigin
public class TeacherController {
@Autowired
private TeacherService teacherService;
@GetMapping("list")
public List<Teacher> list(){
return teacherService.list();
}
}
TeacherApplication启动器
package com.czxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import tk.mybatis.spring.annotation.MapperScan;
@EnableFeignClients(basePackages = "com.czxy.feign.clients")
@SpringBootApplication
@MapperScan(value = "com.czxy.mapper")
public class TeacherApplication {
public static void main(String[] args) {
SpringApplication.run(TeacherApplication.class,args);
}
}
1.3.2resource配置文件
application.yml文件
server:
port: 8080
spring:
application:
name: teacherservice
datasource:
url: jdbc:mysql://localhost:3306/ssm_vue?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
mybatis:
type-aliases-package: com.czxy.feign.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
bootstrap.yml文件
spring:
application:
name: teacherservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
config:
file-extension: yaml # 文件后缀名
feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
1.4 TypesService工程
1.4.1 TypesService工程结构
TypeMapper接口
package com.czxy.mapper;
import com.czxy.feign.pojo.Types;
import tk.mybatis.mapper.common.Mapper;
public interface TypeMapper extends Mapper<Types> {
}
TypeService类
package com.czxy.service;
import com.czxy.feign.clients.TypeClient;
import com.czxy.mapper.TypeMapper;
import com.czxy.feign.pojo.Types;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TypeService implements TypeClient {
@Autowired
private TypeMapper typeMapper;
@Override
public Types queryByTid(Integer tid) {
return typeMapper.selectByPrimaryKey(tid);
}
}
TypeController类
package com.czxy.web;
import com.czxy.feign.pojo.Types;
import com.czxy.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
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;
@RestController
@RequestMapping("/types")
public class TypeController {
@Autowired
private TypeService typeService;
@GetMapping("{tid}")
public Types queryByTid(@PathVariable Integer tid){
return typeService.queryByTid(tid);
}
}
TypeApplication启动器
package com.czxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@EnableFeignClients(basePackages = "com.czxy.feign.clients")
@MapperScan(value = "com.czxy.mapper")
public class TypeApplication {
public static void main(String[] args) {
SpringApplication.run(TypeApplication.class,args);
}
}
1.4.2resource配置文件
application.yml文件
server:
port: 8082
spring:
application:
name: typeservice
datasource:
url: jdbc:mysql://localhost:3306/ssm_vue?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
mybatis:
type-aliases-package: com.czxy.feign.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
bootstrap.yml文件
spring:
application:
name: typeservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
config:
file-extension: yaml # 文件后缀名
feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别