Spring Cloud Rest的环境搭建详解【服务提供者和服务消费者】
2023-06-13 09:18:27 时间
一.SpringCould父工程
新建一个Maven项目:作为父工程。
父工程的pom.xml配置里,将打包方式改为pom。
<packaging>pom</packaging>
1.1 导入依赖
spring-cloud-dependencies
: Spring Cloud是一个用于构建分布式系统的开发工具包,spring-cloud-dependencies
是一个Maven项目的依赖管理器,它包含了Spring Cloud中所有组件的版本信息,让开发人员可以快速地将各个组件集成到自己的项目中。spring-boot-dependencies
: Spring Boot是一个基于Spring框架的快速应用开发框架,spring-boot-dependencies
同样是一个Maven项目的依赖管理器,它包含了Spring Boot中所有组件的版本信息,让开发人员可以快速地将各个组件集成到自己的项目中。mysql-connector-j
:mysql-connector-j
是Java语言连接MySQL数据库的驱动程序。在Java应用程序中,如果需要连接MySQL数据库,需要使用该驱动程序。junit
: JUnit是一个Java语言的单元测试框架。它提供了一组API,用于编写和运行单元测试。开发人员可以使用JUnit编写单元测试来验证程序的正确性。lombok
:lombok
是一个Java语言的开源库,它可以通过注解自动生成Java类的getter、setter、equals、hashCode等方法,减少了开发人员的重复劳动,提高了代码的可读性和可维护性。log4j
:log4j
是一个Java语言的日志框架,它提供了一组API,用于在应用程序中记录日志。开发人员可以使用log4j
将应用程序的日志记录到文件或数据库中,以便在应用程序出现问题时进行排查和分析。logback-core
:logback-core
是一个Java语言的日志框架,它是log4j
的后继者。与log4j
相比,logback-core
具有更高的性能和更灵活的配置选项。logback-core
提供了一组API,用于在应用程序中记录日志。- Druid 是一种数据库连接池框架,由阿里巴巴开发,它为应用程序提供了高效、可靠、安全、可管理的数据访问解决方案。Druid 连接池能够监控数据库连接的创建和关闭,提供连接泄露检测、SQL 执行监控、SQL 注入检测、代码注入检测等功能,可以帮助开发者更好地管理数据库连接,保证应用程序的性能和安全。
- 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>
数据库:
二.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),以便可以在网络上传输或存储到文件中。
配置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&useSSL=false&serverTimezone=UTC&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);
}
}
访问路由:成功取值
2.3 springcloud-consumer-dept-80 服务消费者
1.配置对应的依赖包:
配置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端口号。
相关文章
- Spring Cloud实战|3.SpringCloud 整合common模块
- 系统架构演进与Spring Cloud Alibaba微服务架构体系
- 万字长文 | Spring Cloud Alibaba组件之Nacos实战及其客户端服务注册源码解析
- 服务容错的必要性与Spring Cloud Alibaba Sentinel 限流配置实战
- Spring Cloud Alibaba:将 Sentinel 熔断限流规则持久化到 Nacos 配置中心
- 如何阅读 Spring Cloud OpenFein 源码
- 【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战
- Spring Cloud相关
- 微服务开发平台 Spring Cloud Blade 部署实践
- 【SCT】Spring Cloud Starter Tencent Metadata Transfer
- Spring Cloud Gateway微服务网关
- Spring Cloud 技术栈和常见的微服务架构模式
- Spring Cloud Gateway路由规则的匹配和优先级(一)
- 在生产环境中使用Spring Cloud Sleuth的注意事项(二)
- Spring Cloud Stream应用程序开发-创建消息处理器和发布器示例
- Spring Cloud Security的核心组件-OAuth2
- Spring Cloud Bus在服务之间发送和接收消息(一)
- Spring Cloud Task 高级特性Task Dependency示例
- 使用 Spring Cloud Bus 在微服务之间传递消息
- Spring Cloud Eureka自我保护机制(服务无法剔除)详解架构师
- Spring Cloud(三):服务提供与调用详解编程语言
- cloud database突破传统,选择云数据库:Oracle Cloud Database(naloracle)