Spring Cloud Rest的环境搭建详解【服务提供者和服务消费者】

一.SpringCould父工程

新建一个Maven项目:作为父工程。

父工程的pom.xml配置里,将打包方式改为pom。

<packaging>pom</packaging>

1.1 导入依赖

  1. spring-cloud-dependencies: Spring Cloud是一个用于构建分布式系统的开发工具包,spring-cloud-dependencies是一个Maven项目的依赖管理器,它包含了Spring Cloud中所有组件的版本信息,让开发人员可以快速地将各个组件集成到自己的项目中。
  2. spring-boot-dependencies: Spring Boot是一个基于Spring框架的快速应用开发框架,spring-boot-dependencies同样是一个Maven项目的依赖管理器,它包含了Spring Boot中所有组件的版本信息,让开发人员可以快速地将各个组件集成到自己的项目中。
  3. mysql-connector-j: mysql-connector-j是Java语言连接MySQL数据库的驱动程序。在Java应用程序中,如果需要连接MySQL数据库,需要使用该驱动程序。
  4. junit: JUnit是一个Java语言的单元测试框架。它提供了一组API,用于编写和运行单元测试。开发人员可以使用JUnit编写单元测试来验证程序的正确性。
  5. lombok: lombok是一个Java语言的开源库,它可以通过注解自动生成Java类的getter、setter、equals、hashCode等方法,减少了开发人员的重复劳动,提高了代码的可读性和可维护性。
  6. log4j: log4j是一个Java语言的日志框架,它提供了一组API,用于在应用程序中记录日志。开发人员可以使用log4j将应用程序的日志记录到文件或数据库中,以便在应用程序出现问题时进行排查和分析。
  7. logback-core: logback-core是一个Java语言的日志框架,它是log4j的后继者。与log4j相比,logback-core具有更高的性能和更灵活的配置选项。logback-core提供了一组API,用于在应用程序中记录日志。
  8. Druid 是一种数据库连接池框架,由阿里巴巴开发,它为应用程序提供了高效、可靠、安全、可管理的数据访问解决方案。Druid 连接池能够监控数据库连接的创建和关闭,提供连接泄露检测、SQL 执行监控、SQL 注入检测、代码注入检测等功能,可以帮助开发者更好地管理数据库连接,保证应用程序的性能和安全。
  9. Spring Boot DevTools 是 Spring Boot 提供的一个工具包,用于提高开发者的开发效率,包括自动重启、热部署、内置应用服务器等特性,可以大大提高开发和测试的速度。

使用新版本的SpringCould版本:SpringCould依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>2022.0.2</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

SpringBoot依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.8</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

数据库依赖:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.32</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.15</version>
</dependency>

junit依赖:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
</dependency>

设置版本号:

<properties>
      <junit.version>3.8.1</junit.version>
</properties>

Lombok依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
</dependency>

版本号:

<properties>
      <junit.version>3.8.1</junit.version>
      <lombok.version>1.18.24</lombok.version>
</properties>

log4j依赖:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>2.17.2</version>
</dependency>

logback-core依赖:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.11</version>
</dependency>

数据库:

image-20230405162426773

二.SpringCould子工程

2.1 SpringCould-api

新建Maven项目SpringCould-api。

新建实体类:Dept

@Data
@NoArgsConstructor
@Accessors(chain = true)
public class Dept implements Serializable {
    
    
    private long depton;  //主键
    private String dname;
    //判断这个数据库存放在哪个数据库的字段 微服务,每个服务对应一个数据量。同一个信息可能在不同的数据库
    private String db_source;

    public Dept(String dname) {
    
    
        this.dname = dname;
    }
}
  • @Data 是 Lombok 提供的一个注解,用于自动生成Java Bean的相关代码,包括类的构造方法、Getter/Setter 方法、equals、hashCode和toString方法。使用 @Data 注解可以简化代码编写,提高开发效率。

  • @NoArgsConstructor 是 Lombok 提供的一个注解,用于自动生成一个无参构造方法。如果类中已经有了一个无参构造方法,则 Lombok 不会生成该方法。

  • @Accessors(chain = true) 是 Lombok 提供的一个注解,用于生成链式调用方法,即将多个 Setter 方法连成一条链,可以在代码中实现一行代码完成多个属性的赋值操作,提高代码的可读性和编写效率。

  • Serializable是一个标记接口(marker interface),用于指示该类的对象可以被序列化(serialize)成一个字节序列(byte stream),以便可以在网络上传输或存储到文件中。

image-20230405143651205

配置application.yml:配置SpringBoot、mybatis。

server:
  port:8001
# mybatis配置:
mybatis:
  type-aliases-package: com.zhu.springcloud.pojo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

# spring的配置:
spring:
    application:
      name: springcloud-provider-dept
    datasource:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springcoulddemo?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true
      username: root
      password: 123456

开启mybatis的二级缓存:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--   开启二级缓存-->
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

</configuration>

2.2 springcloud-provider-dept-8001 服务提供者

配置子项目的Maven:

1.配置application.yml

配置端口号:

server:
  port: 8001

mybatis配置

mybatis:
  type-aliases-package: com.zhu.springcloud.pijo
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

spring的配置:

spring:
    application:
      name: springcloud-provider-dept
    datasource:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezoneGMT%2B8&useSSL=true&rewriteBatchedStatements=true"
      username: "root"
      password: "123456"

2.Dao层:

public boolean addDept (Dept dept);
public Dept queryById(Long id);
public List<Dept> queryAll();

3.service层:

定义一个接口:

public interface DeptService {
    
    
    public boolean addDept (Dept dept);

    public Dept queryById(Long id);

    public List<Dept> queryAll();
}

定义一个实现类:

@Autowired
public DeptDao deptDao;

public boolean addDept(Dept dept) {
    
    
    return deptDao.addDept(dept);
}

public Dept queryById(Long id) {
    
    
    return deptDao.queryById(id);
}

public List<Dept> queryAll() {
    
    
    return deptDao.queryAll();
}

配置对应的SQl语句:DpetMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhu.springcloud.dao.DeptDao">
    <insert id="addDept" parameterType="Dept">
        insert into dept (dname, db_source)
        values (#{dname},DATAVASE())
    </insert>
    <insert id="queryById" parameterType="Long" >
        select * from dept where depton = #{depton};
    </insert>
    <insert id="queryAll" parameterType="Dept">
        select * from dept;
    </insert>
</mapper>

配置启动器:

@SpringBootApplication
public class DeptProvider_8001 {
    
    
    public static void main(String[] args){
    
    
        SpringApplication.run(DeptProvider_8001.class,args);
    }
}

image-20230406000131890

访问路由:成功取值

image-20230406001506891

image-20230406001646362

2.3 springcloud-consumer-dept-80 服务消费者

1.配置对应的依赖包:

image-20230406111510394

配置yaml文件:(只需设置端口号即可。)

server:
  port: 80

消费者不应该有service层:

config:

@Repository("RestTemplate")
public class ConfigBean {
    
    
    @Bean
    public RestTemplate getRestTemplate(){
    
    
        return new RestTemplate();
    }
}

转发Url拼接:

@Autowired
private RestTemplate restTemplate;
private static final String  REST_URL_PREFIX = "http://localhost:8001";
@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<Dept> list(){
    
    
    return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
}

效果,直接访问消费者的链接就可以中转到我们的8001端口号。

image-20230406143757175

猜你喜欢

转载自blog.csdn.net/weixin_52908342/article/details/129980406