配置文件太多了,还是保存一下,同时梳理一下。
服务端
- 服务端pom文件,中间的cloud-api-commons是我自己的,不需要的删除就行。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--复用组件-->
<dependency>
<groupId>com.hello</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${parent.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>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
- application.yml
server:
port: 7001
eureka:
instance:
#设置自己的主机名
hostname: eureka7001.com
client:
#设置不注册自己
register-with-eureka: false
#设置不注册自己
fetch-registry: false
service-url:
#集群配置,7001注册7002,相互注册
defaultZone: http://eureka7002.com:7002/eureka/
#单机版的配置
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# server:
# #关闭eureka自我保护,一般不开启
# enable-self-preservation: false
# #设置删除时间间隔为2秒
# eviction-interval-timer-in-ms: 2000
- 主启动类上的两个注解
@EnableEurekaServer
@SpringBootApplication
客户端
- pom文件,同样通用组件是我自己的,不需要的删除
<dependencies>
<dependency>
<groupId>com.hello</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${parent.version}</version>
</dependency>
<!-- 包含了sleuth zipkin 数据链路追踪-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</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.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.24</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>
</project>
- application.yml
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://127.0.0.1:3306/springcloud2020?userUnicode=true&&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
eureka:
client:
#是否注册自己到服务端,客户端是true
register-with-eureka: true
#服务端的url配置,多个要用,隔开全部加上
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002:7002/eureka
#是否从服务端抓取已有的注册信息,默认为true,单节点无所谓,但是集群必须要true才能配合ribbon使用负载均衡
fetch-registry: true
instance:
#不再使用主机名,而是使用自己的id名
instance-id: payment8001
#访问路径可以显示IP地址
prefer-ip-address: true
# #客户端向服务端发送心跳的时间间隔,默认是30秒
# lease-renewal-interval-in-seconds: 1
# #服务端等待最后一次心跳的等待时间上限,默认是90秒,超时将剔除服务
# lease-expiration-duration-in-seconds: 2
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.hello.springcloud.entities #所有Entity别名类所在包
- resources下面mapper下的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hello.springcloud.dao.PaymentDao">
<insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
insert into payment(serial) values(#{serial});
</insert>
<resultMap id="BaseResultMap" type="com.hello.springcloud.entities.Payment">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="serial" property="serial" jdbcType="VARCHAR"/>
</resultMap>
<select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap">
select * from payment where id=#{id}
</select>
</mapper>
- controller类
package com.hello.springcloud.controller;
import com.hello.springcloud.entities.CommonResult;
import com.hello.springcloud.entities.Payment;
import com.hello.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author :QiuShi
* @Date :2020/10/31 20:00
* @Version 1.0
*/
@RestController
@Slf4j
public class PaymentController
{
@Resource
private PaymentService paymentService;
@Value("${server.port}")
private String serverPort;
@PostMapping(value = "/payment/create")
public CommonResult create(@RequestBody Payment payment)
{
int result= paymentService.create(payment);
log.info("插入结果:"+result);
int x=90/2;
if(result>0)
{
return new CommonResult(200,"插入数据库成功,"+serverPort,result);
}else {
return new CommonResult(444,"插入数据库失败",null);
}
}
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id)
{
Payment payment= paymentService.getPaymentById(id);
log.info("插入结果:"+payment);
if(payment!=null)
{
return new CommonResult(200,"查询成功,serverPort:"+serverPort,payment);
}else {
return new CommonResult(444,"没有对应记录,查询ID:"+id,null);
}
}
}
- 返回前端的通用类
package com.hello.springcloud.entities;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author :QiuShi
* @Date :2020/10/31 15:50
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {
private Integer code;
private String message;
private T data;
public CommonResult(Integer code,String message){
this(code,message,null);
}
}
- 实体类上使用lombok的三个注解,get和set方法,全参和无参构造,没有的自己写
@Data
@AllArgsConstructor
@NoArgsConstructor
- 主启动类上的两个注解
@SpringBootApplication
@EnableEurekaClient