此文主要记录springcloud的eureka的注册与发现,没有过多解释,只是为了提供后期拷贝使用
主要模块分为:
0.父工程模块:主要用来作为版本管理
1.公共模块Common-API:用来封装其他模块的共同的功能,比如bean类,共同的异常处理等
2.Eureka注册中心:EurekaServer7001,EurekaServer7002
3.服务提供者:EurekaClientProvider8001,EurekaClientProvider8002
4.服务消费者:EurekaClientConsumer80
具体配置如下:
父工程(此工程只有一个pom.xml文件)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qwy</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>EurekaServer7001</module>
<module>Common-API</module>
<module>EurekaServer7002</module>
<module>EurekaClientProvider8001</module>
<module>EurekaClientConsumer80</module>
<module>EurekaClientProvider8002</module>
<module>ZookeeperClientProvider8001</module>
<module>ZookeeperClientProvider8002</module>
<module>ZookeeperClientConsumer80</module>
</modules>
<!--表明是父工程-->
<packaging>pom</packaging>
<!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>2.2.2</mybatis.spring.boot.version>
<mybatis.plus.boot.version>3.5.2</mybatis.plus.boot.version>
</properties>
<!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>2.7.6</version>
</dependency>-->
<!--spring boot 2.7.6-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 2021.0.5-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
公共模块Common-API
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Common-API</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</project>
application.yml(无)
无
主启动类(无)
bean类
Users.java
package com.qwy.bean;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @Author:齐
* @Package:com.qwy.bean
* @Project:springcloud1
* @name:Users
* @Date:2022/12/11 2:33
* @Filename:Users
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "tb_user")
public class Users {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
@TableField(exist = false)
private Integer age;
@TableField(exist = false)
private Date birthday;
private String address;
}
Orders
package com.qwy.bean;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @Author:齐
* @Package:com.qwy.bean
* @Project:springcloud1
* @name:Orders
* @Date:2022/12/11 3:52
* @Filename:Orders
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_order")
public class Orders {
@TableId(type = IdType.AUTO)
private Long id;
@TableField(exist = false)
private Date createTime;
@TableField(value = "user_id")
private Long usersId;
private String name;
private Long price;
private Integer num;
}
ExtendsOrders(扩展类)
package com.qwy.bean;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author:齐
* @Package:com.qwy.bean
* @Project:springcloud1
* @name:ExtendsOrders
* @Date:2022/12/11 4:06
* @Filename:ExtendsOrders
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExtendsOrders extends Orders {
@TableField(exist = false)
private Users users;
}
Code.java(共同的返回状态码封装类)
package com.qwy.bean;
public class Code {
public static final Integer SAVE_OK=20021;
public static final Integer DELETE_OK=20022;
public static final Integer UPDATE_OK=20023;
public static final Integer SELECT_OK=20024;
public static final Integer SAVE_ERR=20011;
public static final Integer DELETE_ERR=20012;
public static final Integer UPDATE_ERR=20013;
public static final Integer SELECT_ERR=20014;
public static final Integer SYSTEM_ERR=20031;
public static final Integer BUSINESS_ERR=20032;
public static final Integer UNKNOWN_ERR=20033;
}
CommonResult.java(用来作为Controller共同的返回结果)
package com.qwy.bean;
/**
* @Author:齐
* @Package:com.qwy.bean
* @Project:springcloud1
* @name:CommonResult
* @Date:2022/12/11 2:36
* @Filename:CommonResult
*/
public class CommonResult<T> {
private Integer code;
private T data;
private String message;
public CommonResult() {
}
public CommonResult(Integer code, T data) {
this.code = code;
this.data = data;
}
public CommonResult(Integer code,T data, String message) {
this.code = code;
this.data = data;
this.message = message;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public Object getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
共同的异常处理类#### BusinessException.java(用户自定义业务异常处理类)
package com.qwy.exception;
/**
* 定义业务异常处理类
*/
public class BusinessException extends RuntimeException {
private Integer code;
public BusinessException(Integer code) {
this.code = code;
}
public BusinessException(Integer code, String message) {
super(message);
this.code=code;
}
public BusinessException(Integer code, String message, Throwable cause) {
super(message, cause);
this.code=code;
}
}
SystemExcetion.java(系统异常处理类)
package com.qwy.exception;
/**
* 定义系统异常处理类
*/
public class SystemException extends RuntimeException {
private Integer code;
public SystemException( Integer code) {
this.code = code;
}
public SystemException(Integer code, String message) {
super(message);
this.code=code;
}
public SystemException(Integer code,String message, Throwable cause) {
super(message, cause);
this.code=code;
}
}
ExceptionResultAdvice.java(AOP实现异常的处理类)
package com.qwy.exception;
import com.qwy.bean.Code;
import com.qwy.bean.CommonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice//该注解表明该类为异常处理类
public class ExceptionResultAdvice {
@ExceptionHandler({SystemException.class})
public CommonResult doSystemException(SystemException sx){
return new CommonResult(Code.SYSTEM_ERR,null,sx.getMessage());
}
@ExceptionHandler({BusinessException.class})
public CommonResult doBusinessException(BusinessException bx){
return new CommonResult(Code.SYSTEM_ERR,null,bx.getMessage());
}
@ExceptionHandler({Exception.class})
public CommonResult doException(Exception e){
return new CommonResult(Code.SYSTEM_ERR,null,e.getMessage());
}
}
注册中心EurekaServer7001
该模块主要作为Eureka的注册中心存在。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>EurekaServer7001</artifactId>
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.qwy.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!--boot web actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 7001
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7002.com:7002/eureka
instance:
hostname: eureka7001.com
prefer-ip-address: true
ip-address: eureka7001
主启动类
package com.qwy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Author:齐
* @Package:com.qwy
* @Project:springcloud1
* @name:EurekaServer7001
* @Date:2022/12/11 2:47
* @Filename:EurekaServer7001
*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaServer7001.class,args);
}
}
注册中心EurekaServer7002
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>EurekaServer7002</artifactId>
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.qwy.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!--boot web actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 7002
spring:
application:
name: eureka-server
eureka:
instance:
hostname: eureka7002.com
ip-address: eureka7002
prefer-ip-address: true
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka
主启动类
package com.qwy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Author:齐
* @Package:com.qwy
* @Project:springcloud1
* @name:EurekaServer7002
* @Date:2022/12/11 2:58
* @Filename:EurekaServer7002
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServer7002 {
public static void main(String[] args) {
SpringApplication.run(EurekaServer7002.class,args);
}
}
服务提供者EurekaClientProvider8001
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>EurekaClientProvider8001</artifactId>
<dependencies>
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.qwy</groupId>
<artifactId>Common-API</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 8001
spring:
application:
name: eureka-client-provider
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/mydb
username: root
password: xxxx
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
主启动类
package com.qwy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Author:齐
* @Package:com.qwy
* @Project:springcloud1
* @name:EurekaClientProvider8001
* @Date:2022/12/11 3:22
* @Filename:EurekaClientProvider8001
*/
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientProvider8001 {
public static void main(String[] args) {
SpringApplication.run(EurekaClientProvider8001.class,args);
}
}
业务类
Mapper代理类
package com.qwy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qwy.bean.Users;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author:齐
* @Package:com.qwy.mapper
* @Project:springcloud1
* @name:UsersMapper
* @Date:2022/12/11 3:03
* @Filename:UsersMapper
*/
@Mapper
public interface UsersMapper extends BaseMapper<Users>{
}
服务类service接口
package com.qwy.service;
import com.qwy.bean.Users;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author:齐
* @Package:com.qwy.service
* @Project:springcloud1
* @name:UsersService
* @Date:2022/12/11 3:09
* @Filename:UsersService
*/
@Transactional
public interface UsersService {
boolean save(Users users);
Users findById(Long id);
}
服务类Service实现类
package com.qwy.service.impl;
import com.qwy.bean.Users;
import com.qwy.mapper.UsersMapper;
import com.qwy.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author:齐
* @Package:com.qwy.service.impl
* @Project:springcloud1
* @name:UsersServiceImpl
* @Date:2022/12/11 3:10
* @Filename:UsersServiceImpl
*/
@Service
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersMapper usersMapper;
@Override
public boolean save(Users users) {
int insert = usersMapper.insert(users);
return insert>0?true:false;
}
@Override
public Users findById(Long id) {
return usersMapper.selectById(id);
}
}
控制层Controller类
package com.qwy.controller;
import com.qwy.bean.Code;
import com.qwy.bean.CommonResult;
import com.qwy.bean.Users;
import com.qwy.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
/**
* @Author:齐
* @Package:com.qwy.controller
* @Project:springcloud1
* @name:UsersController
* @Date:2022/12/11 3:12
* @Filename:UsersController
*/
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
private UsersService usersService;
@Value("${server.port}")
private String port;
@PostMapping
public CommonResult<Users> save(@RequestBody Users users){
boolean save = usersService.save(users);
System.out.println("port:"+port);
return new CommonResult(save? Code.SAVE_OK:Code.SAVE_ERR,save);
}
@GetMapping("/{id}")
public CommonResult<Users> findById(@PathVariable("id") Long id){
Users users = usersService.findById(id);
Integer code = users != null ? Code.SELECT_OK : Code.SELECT_ERR;
String message = users != null ? "" : "查询失败,请稍后再次查询";
System.out.println("port:"+port);
return new CommonResult<>(code,users,message);
}
}
服务提供者EurekaClientProvider800
参照服务提供者EurekaClientProvider8001
服务消费者EurekaClientConsumer80
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>EurekaClientConsumer80</artifactId>
<dependencies>
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.qwy</groupId>
<artifactId>Common-API</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
</dependencies>
</project>
application.yml
server:
port: 80
spring:
application:
name: eureka-client-order
datasource:
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/mydb2
username: root
password: admin
type: com.alibaba.druid.pool.DruidDataSource
cloud:
config:
allow-override: false
eureka:
instance:
instance-id: eureka80
prefer-ip-address: true
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
主启动类
package com.qwy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Author:齐
* @Package:com.qwy
* @Project:springcloud1
* @name:EurekaClientConsumer80
* @Date:2022/12/11 3:50
* @Filename:EurekaClientConsumer80
*/
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientConsumer80 {
public static void main(String[] args) {
SpringApplication.run(EurekaClientConsumer80.class,args);
}
}
Spring的配置类
package com.qwy.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Author:齐
* @Package:com.qwy.config
* @Project:springcloud1
* @name:ApplicationConfig
* @Date:2022/12/11 4:04
* @Filename:ApplicationConfig
*/
@Configuration
public class ApplicationConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
mapper代理
package com.qwy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qwy.bean.ExtendsOrders;
import com.qwy.bean.Orders;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author:齐
* @Package:com.qwy.mapper
* @Project:springcloud1
* @name:OrderMapper
* @Date:2022/12/11 3:51
* @Filename:OrderMapper
*/
@Mapper
public interface OrderMapper extends BaseMapper<Orders> {
}
服务类接口
package com.qwy.service;
import com.qwy.bean.ExtendsOrders;
import com.qwy.bean.Orders;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author:齐
* @Package:com.qwy.service
* @Project:springcloud1
* @name:OrdersService
* @Date:2022/12/11 4:00
* @Filename:OrdersService
*/
@Transactional
public interface OrdersService {
boolean save(Orders orders);
Orders findById(Long id);
}
服务类实现类
package com.qwy.service.impl;
import com.qwy.bean.ExtendsOrders;
import com.qwy.bean.Orders;
import com.qwy.bean.Users;
import com.qwy.mapper.OrderMapper;
import com.qwy.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* @Author:齐文勇
* @Package:com.qwy.service.impl
* @Project:springcloud1
* @name:OrdersServiceImpl
* @Date:2022/12/11 4:02
* @Filename:OrdersServiceImpl
*/
@Service
public class OrdersServiceImpl implements OrdersService {
@Autowired
private OrderMapper orderMapper;
@Override
public boolean save(Orders orders) {
int insert = orderMapper.insert(orders);
return insert>0?true:false;
}
@Override
public Orders findById(Long id) {
Orders orders = orderMapper.selectById(id);
return orders;
}
}
控制层类
package com.qwy.controller;
import com.alibaba.fastjson2.JSONObject;
import com.qwy.bean.*;
import com.qwy.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
/**
* @Author:齐
* @Package:com.qwy.controller
* @Project:springcloud1
* @name:OrderController
* @Date:2022/12/11 4:15
* @Filename:OrderController
*/
@RestController
@RequestMapping("/orders")
public class OrderController {
private final String EUREKA_CLIENT_PROVIDER_URL="http://EUREKA-CLIENT-PROVIDER";
@Autowired
private OrdersService ordersService;
@Autowired
private RestTemplate restTemplate;
@PostMapping
public CommonResult save(@RequestBody Orders orders){
boolean save = ordersService.save(orders);
return new CommonResult(save? Code.SAVE_OK:Code.SAVE_ERR,save);
}
@GetMapping("/{id}")
public CommonResult findOrderAndUserById(@PathVariable("id") Long id){
Orders orders = ordersService.findById(id);
Long usersId = orders.getUsersId();
CommonResult commonResult = restTemplate.getForObject(EUREKA_CLIENT_PROVIDER_URL+"/users/"+usersId, CommonResult.class, usersId);
String josn = JSONObject.toJSONString(commonResult.getData());
Users users = JSONObject.parseObject(josn, Users.class);
ExtendsOrders extendsOrders= new ExtendsOrders();
extendsOrders.setUsers(users);
extendsOrders.setCreateTime(orders.getCreateTime());
extendsOrders.setId(orders.getId());
extendsOrders.setName(orders.getName());
Integer code = orders != null ? Code.SELECT_OK : Code.SELECT_ERR;
String message = orders != null ? "" : "查询失败";
return new CommonResult(code,extendsOrders,message);
}
}