springcloud 在资源 springcloud 安装和部署下下载文件
文章目录
- 一、springcloud 学习环境简介
- 二、总的maven容器的搭建
- 三、搭建实体类服务 springcloud-api
- 四、服务提供者的搭建 springcloud-provider-dept-8081
- 五、服务消费者的搭建 springcloud-consumer-dept-8080
- 六、Eureka 注册中心的搭建 springcloud-eureka-7001
一、springcloud 学习环境简介
在进行具体的环境搭建之前,我们要知道 springcloud 和 springboot 是有版本要求的,反正我是踩了好长时间的坑。如果你觉得你的环境没有问题,但是就是跑不起来,那么你要看一看你的 springcloud 和 springboot 的版本是否匹配。
如果你在启动时遇到如下的报错,那么说明你的 springcloud 和 springboot 的版本不匹配。
java.lang.ClassNotFoundException: org.springframework.boot.context.properties.Xxxxxxx
我使用的是 Hoxton.SR3
的 springcloud 和 2.2.5.RELEASE
的 springboot。
下面是 spring 官网给出的版本选择:
下面我们将会一次搭建 实体类服务、服务提供者、服务消费者、注册中心。他们的关系大概如下图所示:
正常情况搭建环境的时候,应该是放在多台服务上的,但是条件有限,我都放在一个maven项目中,通过一个maven项目进行统一管理
(主要是方便,因为 Intellij IDEA 中一个窗口只能打开一个项目)。结构如下:
二、总的maven容器的搭建
第一步:搭建一个空的 maven 项目
略…
第二步:设置打包方式(pom.xml)
<!-- 打包方式:pom-->
<packaging>pom</packaging>
第三步:管理相关依赖
<!-- 设置全局属性-->
<properties>
<!--版本控制:举个例子-->
<junnit.version>4.12</junnit.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- springcloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<!-- <version>Greenwich.SR1</version>-->
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springboo依赖-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 连接数据库:注意 如果你使用的mysql版本是8.0+,那么这里要使用8.0.26版依赖
因为,我们需要com.mysql.cj.jdbc.Driver-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<!-- mybatis-springboot启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- Druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<!-- junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junnit.version}</version>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<!-- log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- logback-core-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
第四步:静态资源导出配置(在进行打包时保证 java 下的静态资源可以成功导出到 target 中)
<!--在java目录下的资源时导不出的,所以我们需要手动配xml文件-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
三、搭建实体类服务 springcloud-api
第一步:创建一个空的maven子项目
略…
第二步:导入 lombok 依赖
当然你也可以不使用 lombok,而是手动创建 实体类 的构造方法、get 方法、set 方法和 toString方法。
<dependencies>
<!-- 从父pom中获取lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
第三步:编写实体类
略…
四、服务提供者的搭建 springcloud-provider-dept-8081
所谓的服务提供者其实就是我们在 springboot 阶段的 service 和 controller 还有 mapper。通常我们都会将将该服务对应的端口号写在最后。
第一步:在总的 maven 中创建一个 springboot 项目
略…
第二步:导入相关的依赖
因为存在 mapper 所以需要与数据库打交道,需要与数据库相关的依赖。
值得注意的是其中有一个 "导入实体类服务"的操作
,因为数据库操作需要用到实体类,所以我们需要导入上面我们搭建的 “实体类服务”。
<dependencies>
<!-- jdbc 启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- web 启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis-spring整合 启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- 导入实体类服务:此服务中需要用到pojo,配置 springcloud-api 模本-->
<dependency>
<groupId>com.tiger</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 驱动器 连接器-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- druid 数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<!-- logback-core-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<!-- junit 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第三步:编写配置文件(application.yaml)
server:
port: 8081
spring:
application:
name: springcloud-provider-dept-8081
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
username: root
password: root123123
type: com.alibaba.druid.pool.DruidDataSource
mybatis:
type-aliases-package: com.tiger.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
configuration:
cache-enabled: true
第四步:创建编写 mapper 、service、controller
略…
五、服务消费者的搭建 springcloud-consumer-dept-8080
第一步:在总的 maven 中创建一个 springboot 项目
略…
第二步:导入相关的依赖
消费者服务不需要和数据库直接打交道,消费者服务直接面对的是 service 、所以不需要与数据库和实体类相关的依赖导入。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 此服务中需要用到pojo,配置 springcloud-api 模本-->
<dependency>
<groupId>com.tiger</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- junit 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第三步:配置服务器端口(application.yaml)
server:
port: 8081
第四步:创建编写 controller
大家是不是会很好奇,即使吧 controller 编写完成,但是也是调不到 service 的,因为服务消费者服务中就没有 service。
其实消费者服务要调的 service 是 服务提供者的 service,更加准确的是简介调用 服务提供者的 service,具体看图解:
如果我们想要调用 controller ,那么我们需要有 url,我们很是容易就可以得到提供者服务的controller中的url(因为url是我自己规定的)。
在浏览器中执行 url 十分的简单,但是在消费者服务的 controller 中想要执行 url 貌似是我们第一次接触。
我们知道之所以 springcloud 可以实现微服务,一部分原因是因为 springcloud 使用的是基于 Rest 风格的通信。那么在 spring 中 有没有对 Rest 进行封装使得我们可以在服务之间进行通信。答案是肯定的。
在spring 有 RestTemplate
模版类,其中又如下几种方法
getForObject:使用 get 方法执行 url 。String/URL 指的是需要实行的 url;Class 表示响应值的类型;Object/Map<> 表示 url 带有的参数,当然你也可以将参数拼接到url中。
postForObject:使用 post 方法执行 url。
这样我们就可以实现在消费者服务的 controller 中想要执行 url 。我们在使用 RestTemplate 之前需要将 RestTemplate 注入到 bean 中,所以我们可以编写一个 BeanConfig 类实现 RestTemplate 的注入
:
package com.tiger.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class BeanConfig {
@Bean
public RestTemplate restTemplateBean(){
return new RestTemplate();
}
}
接下来我们就可以在消费者服务中编写 controller:
http://localhost:8081//dept/select/ 是提供者服务中的controller请求(提供者服务中 controller 的代码 ‘‘略’’ 了)
private static final String URL_HEAD = "http://localhost:8081/";
@Autowired
private RestTemplate restTemplatel;
@RequestMapping("/list/{id}")
public Department queryOne(@PathVariable("id") int dNum){
return restTemplatel.getForObject(URL_HEAD+"/dept/select/"+dNum,Department.class);
}
@RequestMapping("/lists")
public List<Department> queryAll(){
return restTemplatel.getForObject(URL_HEAD+"/dept/select/",List.class);
}
测试:
启动 springcloud-provider-dept-8081
和 springcloud-consumer-dept-8080
,然后访问 http://localhost:8080/list/5
。
六、Eureka 注册中心的搭建 springcloud-eureka-7001
第一步:在总的 maven 中创建一个 springboot 项目
略…
第二步:导入相关的依赖
这里大家要注意一点:Eureka 的依赖有 spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server 两种,我们使用 spring-cloud-starter-netflix-eureka-server
,原因如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
第三步:配置配置文件(application.yaml)
server:
port: 7001
# Eureka 配置
eureka:
instance:
hostname: localhost # Eureka 服务端的实例名
client:
register-with-eureka: false # 是否注册自己
fetch-registry: false # false 表示自己为注册中心
service-url: # 别人向注册中心申请时所用的地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
第四步:开启Eureka服务可用
在主启动类上添加上 @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer //Eureka 的服务端,允许别人注册进来
public class SpringcloudEureka7001Application {
public static void main(String[] args) {
SpringApplication.run(SpringcloudEureka7001Application.class, args);
}
}
测试:
启动 springcloud-eureka-7001
,访问 http://localhost:7001
。
至此,我们的环境搭建就完成了,下一节我们将着重介绍一下服务注册、信息配置与自我保护机制。