目录
1、案例说明
2、创建数据库
3、服务提供者搭建:
(1)创建普通maven工程
(2)引入相关依赖
(3)配置application.yml文件
(4)创建主启动类
(5)创建实体类
(6)创建dao层
(7)创建service层
(8)创建controller层
4、服务消费者
(1)创建maven工程,同上。
(2)导入依赖
(3)配置application.yml
(4)创建主启动类
(5)创建实体类
(6)创建配置类
(7)创建controller
5、测试
1、案例说明
创建一个服务提供者和一个服务消费者,服务提供者中有添加,查找功能,服务消费者远程调用服务提供者实现数据添加,查找功能。如下图:
2、创建数据库
CREATE DATABASE IF NOT EXISTS springcloud DEFAULT CHARACTER SET utf8 ;
USE springcloud ;
DROp TABLE IF EXISTS payment ;
CREATE TABLE payment (
id BIGINT (20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
SERIAL VARCHAr (300) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 33 DEFAULT CHARSET = utf8 ;
INSERT INTO payment (id, SERIAL) VALUES(31, '小明'),(32, '小张') ;
3、服务提供者搭建:
(1)创建普通maven工程
(1)创建普通maven工程
(2)引入相关依赖
注意:引入的lombok依赖还需要去下载lombok插件
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.mybatis.spring.boot
mybatis-spring-boot-starter
com.alibaba
druid-spring-boot-starter
1.1.10
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-jdbc
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
(3)配置application.yml文件
①配置服务端口号(port),端口号为8002。
②配置服务名称(name),相同服务名称相同,不同服务名称·一定不能相同。
③配置数据库数据源,以下数据库为mysql8.0.
④配置mybatis映射文件位置。
server:
port: 8002
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: 数据库用户名
password: 数据库密码
mybatis:
mapperLocations: classpath:/mapper/*.xml
type-aliases-package: com.su.pojo
(4)创建主启动类
@SpringBootApplication:启动类注解
@SpringBootApplication
public class Provider8002 {
public static void main(String[] args) {
SpringApplication.run(Provider8002.class,args);
}
}
(5)创建实体类
实体类上注解为lombok提供
①@Data:属性的get和set方法。
②@AllArgConstructor:实体类的有参构造。
③@NoArgsConstructor:实体类无参构造。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建dao层
PaymentMapper接口
@Mapper:mybatis提供生命bean注解。
@Mapper
public interface PaymentMapper {
//添加数据
void insertPayment(Payment payment);
//查询数据
Payment findById(Integer id);
}
PaymentMapper.xml映射文件:
useGeneratedKeys="true" keyProperty="id":为主键回填,即主键id自动生成后,回填到实体类中,确保实体类id不为空。
insert into payment (serial) values (#{serial})
(7)创建service层
PaymentService接口:
public interface PaymentService {
//添加数据
void insertPayment(Payment payment);
//查询数据
Payment findById(Integer id);
}
PaymentServiceImpl实现接口类:
@Service:service层注册到spring容器中
@Autrowired:自动注入PaymentMapper并创建bean容器
@Service
public class PaymentServiceImpl implements PaymentService{
@Autowired
private PaymentMapper paymentMapper;
@Override
public void insertPayment(Payment payment) {
paymentMapper.insertPayment(payment);
}
@Override
public Payment findById(Integer id) {
return paymentMapper.findById(id);
}
}
(8)创建controller层
@RestController:@ResponeBody+@Controller
@GetMapping:get请求注解
@PathVariable:获取请求url中的参数
@RestController
public class PaymentController {
@Autowired
private PaymentService paymentService;
@PostMapping("/insert")
public String insertPay(@RequestBody Payment payment){
paymentService.insertPayment(payment);
return "success";
}
@GetMapping("/find/{id}")
public String findById(@PathVariable("id") Integer id){
Payment payment = paymentService.findById(id);
if (payment==null){
return "无此数据";
}else {
return "查询成功,id:"+payment.getId()+",serial:"+payment.getSerial();
}
}
}
4、服务消费者
(1)创建maven工程,同上。
(2)导入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
(3)配置application.yml
配置端口号和服务名称
server:
port: 8001
spring:
application:
name: cloud-consumer-order80
(4)创建主启动类
@SpringBootApplication
public class Consumer8001 {
public static void main(String[] args) {
SpringApplication.run(Consumer8001.class,args);
}
}
(5)创建实体类
可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建配置类
配置类创建远程调用容器:
@Configuration:标志为注解类
@Configuration
public class ResConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(7)创建controller
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
@RestController
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("insert")
public String insert(@RequestBody Payment payment){
restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
return "success";
}
@GetMapping("find/{id}")
public String find(@PathVariable("id") Integer id){
return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
}
}
5、测试
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
注意:引入的lombok依赖还需要去下载lombok插件
①配置服务端口号(port),端口号为8002。
②配置服务名称(name),相同服务名称相同,不同服务名称·一定不能相同。
③配置数据库数据源,以下数据库为mysql8.0.
④配置mybatis映射文件位置。
server:
port: 8002
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: 数据库用户名
password: 数据库密码
mybatis:
mapperLocations: classpath:/mapper/*.xml
type-aliases-package: com.su.pojo
(4)创建主启动类
@SpringBootApplication:启动类注解
@SpringBootApplication
public class Provider8002 {
public static void main(String[] args) {
SpringApplication.run(Provider8002.class,args);
}
}
(5)创建实体类
实体类上注解为lombok提供
①@Data:属性的get和set方法。
②@AllArgConstructor:实体类的有参构造。
③@NoArgsConstructor:实体类无参构造。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建dao层
PaymentMapper接口
@Mapper:mybatis提供生命bean注解。
@Mapper
public interface PaymentMapper {
//添加数据
void insertPayment(Payment payment);
//查询数据
Payment findById(Integer id);
}
PaymentMapper.xml映射文件:
useGeneratedKeys="true" keyProperty="id":为主键回填,即主键id自动生成后,回填到实体类中,确保实体类id不为空。
insert into payment (serial) values (#{serial})
(7)创建service层
PaymentService接口:
public interface PaymentService {
//添加数据
void insertPayment(Payment payment);
//查询数据
Payment findById(Integer id);
}
PaymentServiceImpl实现接口类:
@Service:service层注册到spring容器中
@Autrowired:自动注入PaymentMapper并创建bean容器
@Service
public class PaymentServiceImpl implements PaymentService{
@Autowired
private PaymentMapper paymentMapper;
@Override
public void insertPayment(Payment payment) {
paymentMapper.insertPayment(payment);
}
@Override
public Payment findById(Integer id) {
return paymentMapper.findById(id);
}
}
(8)创建controller层
@RestController:@ResponeBody+@Controller
@GetMapping:get请求注解
@PathVariable:获取请求url中的参数
@RestController
public class PaymentController {
@Autowired
private PaymentService paymentService;
@PostMapping("/insert")
public String insertPay(@RequestBody Payment payment){
paymentService.insertPayment(payment);
return "success";
}
@GetMapping("/find/{id}")
public String findById(@PathVariable("id") Integer id){
Payment payment = paymentService.findById(id);
if (payment==null){
return "无此数据";
}else {
return "查询成功,id:"+payment.getId()+",serial:"+payment.getSerial();
}
}
}
4、服务消费者
(1)创建maven工程,同上。
(2)导入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
(3)配置application.yml
配置端口号和服务名称
server:
port: 8001
spring:
application:
name: cloud-consumer-order80
(4)创建主启动类
@SpringBootApplication
public class Consumer8001 {
public static void main(String[] args) {
SpringApplication.run(Consumer8001.class,args);
}
}
(5)创建实体类
可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建配置类
配置类创建远程调用容器:
@Configuration:标志为注解类
@Configuration
public class ResConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(7)创建controller
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
@RestController
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("insert")
public String insert(@RequestBody Payment payment){
restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
return "success";
}
@GetMapping("find/{id}")
public String find(@PathVariable("id") Integer id){
return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
}
}
5、测试
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
@SpringBootApplication:启动类注解
实体类上注解为lombok提供
①@Data:属性的get和set方法。
②@AllArgConstructor:实体类的有参构造。
③@NoArgsConstructor:实体类无参构造。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建dao层
PaymentMapper接口
@Mapper:mybatis提供生命bean注解。
@Mapper
public interface PaymentMapper {
//添加数据
void insertPayment(Payment payment);
//查询数据
Payment findById(Integer id);
}
PaymentMapper.xml映射文件:
useGeneratedKeys="true" keyProperty="id":为主键回填,即主键id自动生成后,回填到实体类中,确保实体类id不为空。
insert into payment (serial) values (#{serial})
(7)创建service层
PaymentService接口:
public interface PaymentService {
//添加数据
void insertPayment(Payment payment);
//查询数据
Payment findById(Integer id);
}
PaymentServiceImpl实现接口类:
@Service:service层注册到spring容器中
@Autrowired:自动注入PaymentMapper并创建bean容器
@Service
public class PaymentServiceImpl implements PaymentService{
@Autowired
private PaymentMapper paymentMapper;
@Override
public void insertPayment(Payment payment) {
paymentMapper.insertPayment(payment);
}
@Override
public Payment findById(Integer id) {
return paymentMapper.findById(id);
}
}
(8)创建controller层
@RestController:@ResponeBody+@Controller
@GetMapping:get请求注解
@PathVariable:获取请求url中的参数
@RestController
public class PaymentController {
@Autowired
private PaymentService paymentService;
@PostMapping("/insert")
public String insertPay(@RequestBody Payment payment){
paymentService.insertPayment(payment);
return "success";
}
@GetMapping("/find/{id}")
public String findById(@PathVariable("id") Integer id){
Payment payment = paymentService.findById(id);
if (payment==null){
return "无此数据";
}else {
return "查询成功,id:"+payment.getId()+",serial:"+payment.getSerial();
}
}
}
4、服务消费者
(1)创建maven工程,同上。
(2)导入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
(3)配置application.yml
配置端口号和服务名称
server:
port: 8001
spring:
application:
name: cloud-consumer-order80
(4)创建主启动类
@SpringBootApplication
public class Consumer8001 {
public static void main(String[] args) {
SpringApplication.run(Consumer8001.class,args);
}
}
(5)创建实体类
可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建配置类
配置类创建远程调用容器:
@Configuration:标志为注解类
@Configuration
public class ResConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(7)创建controller
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
@RestController
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("insert")
public String insert(@RequestBody Payment payment){
restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
return "success";
}
@GetMapping("find/{id}")
public String find(@PathVariable("id") Integer id){
return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
}
}
5、测试
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
PaymentMapper接口
@Mapper:mybatis提供生命bean注解。
PaymentMapper.xml映射文件:
useGeneratedKeys="true" keyProperty="id":为主键回填,即主键id自动生成后,回填到实体类中,确保实体类id不为空。
PaymentService接口:
public interface PaymentService {
//添加数据
void insertPayment(Payment payment);
//查询数据
Payment findById(Integer id);
}
PaymentServiceImpl实现接口类:
@Service:service层注册到spring容器中
@Autrowired:自动注入PaymentMapper并创建bean容器
@Service
public class PaymentServiceImpl implements PaymentService{
@Autowired
private PaymentMapper paymentMapper;
@Override
public void insertPayment(Payment payment) {
paymentMapper.insertPayment(payment);
}
@Override
public Payment findById(Integer id) {
return paymentMapper.findById(id);
}
}
(8)创建controller层
@RestController:@ResponeBody+@Controller
@GetMapping:get请求注解
@PathVariable:获取请求url中的参数
@RestController
public class PaymentController {
@Autowired
private PaymentService paymentService;
@PostMapping("/insert")
public String insertPay(@RequestBody Payment payment){
paymentService.insertPayment(payment);
return "success";
}
@GetMapping("/find/{id}")
public String findById(@PathVariable("id") Integer id){
Payment payment = paymentService.findById(id);
if (payment==null){
return "无此数据";
}else {
return "查询成功,id:"+payment.getId()+",serial:"+payment.getSerial();
}
}
}
4、服务消费者
(1)创建maven工程,同上。
(2)导入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
(3)配置application.yml
配置端口号和服务名称
server:
port: 8001
spring:
application:
name: cloud-consumer-order80
(4)创建主启动类
@SpringBootApplication
public class Consumer8001 {
public static void main(String[] args) {
SpringApplication.run(Consumer8001.class,args);
}
}
(5)创建实体类
可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建配置类
配置类创建远程调用容器:
@Configuration:标志为注解类
@Configuration
public class ResConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(7)创建controller
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
@RestController
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("insert")
public String insert(@RequestBody Payment payment){
restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
return "success";
}
@GetMapping("find/{id}")
public String find(@PathVariable("id") Integer id){
return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
}
}
5、测试
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
@RestController:@ResponeBody+@Controller
@GetMapping:get请求注解
@PathVariable:获取请求url中的参数
(1)创建maven工程,同上。
(2)导入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
(3)配置application.yml
配置端口号和服务名称
server:
port: 8001
spring:
application:
name: cloud-consumer-order80
(4)创建主启动类
@SpringBootApplication
public class Consumer8001 {
public static void main(String[] args) {
SpringApplication.run(Consumer8001.class,args);
}
}
(5)创建实体类
可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建配置类
配置类创建远程调用容器:
@Configuration:标志为注解类
@Configuration
public class ResConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(7)创建controller
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
@RestController
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("insert")
public String insert(@RequestBody Payment payment){
restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
return "success";
}
@GetMapping("find/{id}")
public String find(@PathVariable("id") Integer id){
return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
}
}
5、测试
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
(3)配置application.yml
配置端口号和服务名称
server:
port: 8001
spring:
application:
name: cloud-consumer-order80
(4)创建主启动类
@SpringBootApplication
public class Consumer8001 {
public static void main(String[] args) {
SpringApplication.run(Consumer8001.class,args);
}
}
(5)创建实体类
可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
private int id;
private String serial;
}
(6)创建配置类
配置类创建远程调用容器:
@Configuration:标志为注解类
@Configuration
public class ResConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(7)创建controller
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
@RestController
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("insert")
public String insert(@RequestBody Payment payment){
restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
return "success";
}
@GetMapping("find/{id}")
public String find(@PathVariable("id") Integer id){
return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
}
}
5、测试
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
配置端口号和服务名称
可以发现Provider服务中也有实体类,那么我们可以将创建一个公共maven,放置相同部分,然后让两个服务导入该maven坐标。
配置类创建远程调用容器:
@Configuration:标志为注解类
@Configuration
public class ResConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(7)创建controller
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
@RestController
public class PaymentController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("insert")
public String insert(@RequestBody Payment payment){
restTemplate.postForObject("http://localhost:8002/insert",payment,String.class);
return "success";
}
@GetMapping("find/{id}")
public String find(@PathVariable("id") Integer id){
return restTemplate.getForObject("http://localhost:8002/find/"+id,String.class);
}
}
5、测试
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
RestTemplate远程调用服务Provider:
①psotForObject(”远程调用url“,”参数“,”调用服务返回类型“);
②getForObject(”远程调用url“,”调用服务返回类型“)。
访问 http://localhost:8001/find/31:
consumer8001远程调用provider8002服务,结构如下图:
测试成功!!



