200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 手把手搭建springcloud微服务 使用Eureka

手把手搭建springcloud微服务 使用Eureka

时间:2021-03-13 08:19:40

相关推荐

手把手搭建springcloud微服务 使用Eureka

父工程

pom

父工程没啥,只有一个pom要配置

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.meng</groupId><artifactId>cloud</artifactId><version>1.0-SNAPSHOT</version><!--<modules><module>cloud-provider-payment8001</module><module>cloud-consumer-order80</module><module>cloud-api-commons</module><module>cloud-eureka-server7001</module></modules>--><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><piler.source>1.8</piler.source><piler.target>1.8</piler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>8.0.21</mysql.version><druid.version>1.1.23</druid.version><mybatis.spring.boot.version>2.1.3</mybatis.spring.boot.version></properties><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><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><!--log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></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></project>

在父工程配好了版本,子工程可以不指定版本,默认调用父工程的版本。

创建一个公共接口

创建子Module,cloud-api-commons包含需要的通用实体类

pom配置

首先配置pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>cloud</artifactId><groupId>com.meng</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-api-commons</artifactId><dependencies><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><!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version><scope>compile</scope></dependency></dependencies></project>

公共实体类

然后是两个实体类

Payment.java

package com.meng.entity;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.apache.ibatis.type.Alias;import java.io.Serializable;/*** @author Administrator*/@Data@AllArgsConstructor@NoArgsConstructor@Alias("Payment")public class Payment implements Serializable {private Long id;private String serial;}

CommonResult.java

package com.meng.entity;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/*** @author Administrator*/@Data@AllArgsConstructor@NoArgsConstructorpublic class CommonResult<T> {private Integer code;private String message;private T data;public CommonResult(Integer code,String message){this(code,message,null);}}

8001端口

pom配置

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>cloud</artifactId><groupId>com.meng</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-provider-payment8001</artifactId><dependencies><dependency><groupId>com.meng</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!--web--><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><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--devtool--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--lombok--><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><!--eureka client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies></project>

yml

application.yml

server:port: 8001spring:application:name: cloud-payment-servicedatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:8080/spring-cloud-1?useUnicode=true&useSSL=false&characterEncoding=utf-8username: rootpassword: 123456mybatis:type-aliases-package: com.meng.entitymapper-locations: classpath:mapper/*.xmleureka:client:#表示将自己注册进Eureka Server,默认为trueregister-with-eureka: true#是否从Eureka Server抓取已有的注册信息,默认为truefetchRegistry: trueservice-url:defaultZone: http://localhost:7001/eureka

主启动类

PaymentMain8001.java

package com.meng;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author Administrator*/@SpringBootApplication@EnableEurekaClientpublic class PaymentMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentMain8001.class,args);}}

mapper接口

PaymentMapper.java

package com.meng.mapper;import com.meng.entity.Payment;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;/*** @author Administrator*/@Mapperpublic interface PaymentMapper {/*** 新增* @param payment* @return*/int create(Payment payment);/*** 按id查询* @param id* @return*/Payment getPaymentById(@Param("id")Long id);

mapper通过xml实现

PaymentMapper.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.meng.mapper.PaymentMapper"><insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">insert into payment(serial)values (#{serial})</insert><resultMap id="BaseResultMap" type="Payment"><result property="id" column="id" jdbcType="BIGINT"></result><result property="serial" column="serial" jdbcType="VARCHAR"></result></resultMap><select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap">select *from paymentwhere id=#{id}</select></mapper>

service层

PaymentService.java接口

package com.meng.service;import com.meng.entity.Payment;import org.apache.ibatis.annotations.Param;/*** @author Administrator*/public interface PaymentService {/*** 新增* @param payment* @return*/int create(Payment payment);/*** 按id查询* @param id* @return*/Payment getPaymentById(@Param("id")Long id);}

service接口的实现PaymentServiceImpl.java

package com.meng.service.impl;import com.meng.entity.Payment;import com.meng.mapper.PaymentMapper;import com.meng.service.PaymentService;import org.springframework.stereotype.Service;import javax.annotation.Resource;/*** @author Administrator*/@Servicepublic class PaymentServiceImpl implements PaymentService {@Resourceprivate PaymentMapper paymentMapper;@Overridepublic int create(Payment payment) {return paymentMapper.create(payment);}@Overridepublic Payment getPaymentById(Long id) {return paymentMapper.getPaymentById(id);}}

controller层

PaymentController.java

package com.meng.controller;import com.monResult;import com.meng.entity.Payment;import com.meng.service.PaymentService;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;/*** @author Administrator*/@RestController@Slf4jpublic class PaymentController {@Resourceprivate PaymentService paymentService;@PostMapping("/payment/create")public CommonResult create(@RequestBody Payment payment){int result=paymentService.create(payment);log.info("*****插入结果:"+result);if (result>0){return new CommonResult(200,"插入数据库成功",result);}else {return new CommonResult(444,"插入数据库失败");}}@GetMapping("/payment/getPaymentById/{id}")public CommonResult getPaymentById(@PathVariable("id") Long id){Payment payment=paymentService.getPaymentById(id);log.info("*****查询结果:"+payment);if (payment!=null){return new CommonResult(200,"查询成功",payment);}else {return new CommonResult(444,"没有对应记录,查询ID:"+id+"失败");}}}

客户端80端口

pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>cloud</artifactId><groupId>com.meng</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-consumer-order80</artifactId><dependencies><dependency><groupId>com.meng</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</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.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><!--eureka client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies></project>

yml

application.yml

server:port: 80spring:application:name: cloud-order-serviceeureka:client:#表示将自己注册进Eureka Server,默认为trueregister-with-eureka: true#是否从Eureka Server抓取已有的注册信息,默认为truefetchRegistry: trueservice-url:defaultZone: http://localhost:7001/eureka

主启动类

OrderMain80.java

package com.meng;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author Administrator*/@SpringBootApplication@EnableEurekaServerpublic class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class,args);}}

restTemplate配置类

ApplicationContextConfig.java

package com.meng.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;/*** @author Administrator*/@Configurationpublic class ApplicationContextConfig {@Beanpublic RestTemplate getRestTemplate(){return new RestTemplate();}}

controller层

都配置好了之后客户端的访问只需要controller就行了,不需要service层以及数据库的访问

OrderController.java

package com.meng.controller;import com.monResult;import com.meng.entity.Payment;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;/*** @author Administrator*/@RestController@Slf4jpublic class OrderController {public static final String PAYMENT_URL="http://localhost:8001";@Resourceprivate RestTemplate restTemplate;@GetMapping("/consumer/payment/create")public CommonResult<Payment> create(Payment payment){return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);}@GetMapping("/consumer/payment/getPaymentById/{id}")public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){return restTemplate.getForObject (PAYMENT_URL + "/payment/getPaymentById/" + id, CommonResult.class);}}

eureka服务7001端口

pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>cloud</artifactId><groupId>com.meng</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-eureka-server7001</artifactId><dependencies><!--引入自定义的api,包括实体类--><dependency><groupId>com.meng</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!--eureka server--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!--web--><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><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

yml

application.yml

server:port: 7001eureka:instance:hostname: localhostclient:#表示不像注册中心注册自己register-with-eureka: falsefetch-registry: false#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

主启动类

EurekaMain7001.java

package com.meng;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.flix.eureka.server.EnableEurekaServer;/*** @author Administrator*/@SpringBootApplication@EnableEurekaServerpublic class EurekaMain7001 {public static void main(String[] args) {SpringApplication.run(EurekaMain7001.class,args);}}

配置好之后启动主启动类就可以在端口访问http://localhost:7001

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。