springCloud入门,版本说明,单机Eureka服务注册与发现
篇幅过长,只有部分代码,记录学习过程和解决的问题。最终会上传码云,供大家下载学习,共勉。
1、SpringCloud是什么
2、SpringCloud与SpringBoot关系
3、SpringCloud与Dubbo的区别
4、Spring Boot和Spring Cloud的版本选择
-
Spring Boot版本使用数字表示,Spring Cloud版本使用字母表示,版本对应官网有说明。
-
Spring Boot强烈建议升级到2.0及以上
-
Spring Cloud版本说明
-
本次学习技术版本
5、Cloud升级之后
- 红叉代表停更,但仍然可以使用,推荐使用✔。
- 官网和中文资料
6、从头开始,始于足下
约定>配置>编码
创建module——引入依赖pom——配置yml——主启动类——业务编码
- 创建父工程,只做版本声明,并不引入依赖,依赖爆红说明本地仓库没有,子模块会自动下载的。
<!-- 统一管理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.10</druid.version>
<mybatis.spring.boot.version>1.3.1</mybatis.spring.boot.version>
</properties>
<!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</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>
<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>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>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
7、创建子模块cloud-provide-payment8081
<dependencies>
<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.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>
- 配置文件
server:
port: 8081
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource #数据源类型
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/db2021?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123123
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: cn.demo.springcloud.entities #别名类所在包
-
启动类略
-
dao层
- @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应。
public Payment findById(@Param("id") Integer id);
useGeneratedKeys="true" keyProperty="id"
:设置使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中
- @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应。
-
service层
- @Resource:引入实体对象。
-
controller层
- 返回数据包装类 CommonResult。
POST请求必须加注解@RequestBody
@Data @NoArgsConstructor @AllArgsConstructor public class CommonResult<T> { //返回给前端的结果类 private Integer code; private String message; private T data; public CommonResult(Integer code,String message){ this(code,message,null); } }
8、创建子模块cloud-consumer-order80
- 浏览器访问此模块,再通过 RestTemplate 请求调用 Payment8081 接口,所以只有 controller 层。
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
9、公共接口子模块cloud-api-commons
- 把其他模块共有的东西放在此模块中。
clear——》install
10、Eureka注册中心
- springCloud推荐使用 Eureka,但是已经停更,还是可以使用。那为什么使用注册中心?,由上面代码可以看到,消费者调用服务时使用 "http://localhost:8081" 调用服务,如果服务端改变端口号或者 IP,那么消费端也必须修改。所以不能硬编码,可以将服务注册到 Eureka,通过 Eureka 动态找到需要的服务。
- Eureka Server
//依赖
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
//application.yml配置
server:
port: 7001
#Eureka配置
eureka:
instance:
hostname: localhost #服务端名称
client:
register-with-eureka: false #是否向 eureka 注册
fetch-registry: false #是否向 eureka 获取信息
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
//启动类的注解
@SpringBootApplication
@EnableEurekaServer
- Eureka Client就是之前的 payment 和 order 服务
//依赖
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
//payment 提供方 application.yml配置
#Eureka配置,注册服务
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
//启动类注解
@SpringBootApplication
@EnableEurekaClient
//order 消费方 application.yml配置
#eureka配置
eureka:
client:
register-with-eureka: false #不向eureka注册
service-url:
defaultZone: http://localhost:7001/eureka/
//消费方使用**服务名**调用服务
//eureka 通过服务名访问
private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDE";
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept){
System.out.println(dept);
return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,Boolean.class);
}
- 服务发现
//启动类注解
@EnableDiscoveryClient
//服务发现
@Resource
private DiscoveryClient discoveryClient;
@GetMapping("/payment/discovery")
public Object discovery(){
//得到服务列表
List<String> services = discoveryClient.getServices();
for (String element : services){
log.info("*****element:"+element);
}
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance instance : instances){
log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
}
return this.discoveryClient;
}
作 者:凑数的园丁
出 处:https://www.cnblogs.com/lq-404/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。