这里创建一个服务提供者,为了简便,操作步骤就不做截图了,直接上代码
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.springcloud</groupId>
<artifactId>product-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>product-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- 配置连接池dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
applicaion.yml
server:
port: 7001
spring:
application:
# 项目名称/微服务节点名称
name: product-provider
datasource:
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&serverTimezone=UTC&characterEncoding=utf8
username: root
password: 100200
type: org.apache.commons.dbcp2.BasicDataSource
dbcp2:
#最大空闲时间
max-idle: 10
#最大等待时间,单位ms,超过抛异常
max-wait-millis: 10000
#最大连接数
max-total: 50
#初始化连接数
initial-size: 5
eureka:
client:
#是否自动拉去注册中心服务列表,默认true,这里可以不用配置
fetch-registry: true
#是否将当前服务注册到注册中心,默认true,这里可以不用配置
register-with-eureka: true
service-url:
# 服务治理中心地址
defaultZone: http://localhost:7000/eureka/,http://localhost:8000/eureka/
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.springcloud.productprovider.pojo
#type-handlers-package: com.springcloud.productprovider.typehandler
configuration:
#启用从经典数据库列名A_COLUMN到驼峰式经典Java属性名aColumn的自动映射
map-underscore-to-camel-case: true
#控制结果集的提取数量大小
default-fetch-size: 100
#设置驱动程序等待数据库响应的秒数
default-statement-timeout: 30
#为空值指定JDBC类型
jdbc-type-for-null: nvarchar
#指定日志实现 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
#log-impl:
#日志前缀字符
log-prefix: mybatis
程序入口
package com.springcloud.productprovider;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.stereotype.Repository;
/**
*
* @date 2020/7/27 16:31
* @author wei.heng
*/
@SpringBootApplication
@EnableEurekaClient
@MapperScan(basePackages={"com.springcloud.productprovider.*"}
, annotationClass = Repository.class)
public class ProductProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProductProviderApplication.class, args);
}
}
dao
package com.springcloud.productprovider.dao;
import com.springcloud.productprovider.pojo.Product;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/**
*
* @date 2020/7/27 16:33
* @author wei.heng
*/
@Repository
public interface ProductDao {
/**
* 获取产品对象
* @param id 主键ID
* @return com.springcloud.productprovider.pojo.Product
* @date 2020/7/27 16:33
* @author wei.heng
*/
Product getProduct(@Param("id") Long id);
}
pojo
package com.springcloud.productprovider.pojo.base;
import java.util.Date;
/**
* 基础对象(存放基础字段)
* @date 2020/7/27 16:35
* @author wei.heng
*/
public class BaseEntity {
protected Long id;
protected Date createDate;
protected String createBy;
protected String createUser;
protected Date updateDate;
protected String updateBy;
protected String updateUser;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public String getUpdateUser() {
return updateUser;
}
public void setUpdateUser(String updateUser) {
this.updateUser = updateUser;
}
}
package com.springcloud.productprovider.pojo;
import com.springcloud.productprovider.pojo.base.BaseEntity;
import org.apache.ibatis.type.Alias;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 产品对象
* @date 2020/7/27 16:36
* @author wei.heng
*/
@Alias(value = "product")
public class Product extends BaseEntity implements Serializable{
private String name;
private BigDecimal price;
private String note;
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
}
service
package com.springcloud.productprovider.service;
import com.springcloud.productprovider.pojo.Product;
/**
*
* @date 2020/7/27 16:37
* @author wei.heng
*/
public interface ProductService {
/**
*
* 获取产品对象
* @param id 产品ID
* @return com.springcloud.productprovider.pojo.Product
* @date 2020/7/27 16:38
* @author wei.heng
*/
Product getProduct(Long id);
}
package com.springcloud.productprovider.service.impl;
import com.springcloud.productprovider.dao.ProductDao;
import com.springcloud.productprovider.pojo.Product;
import com.springcloud.productprovider.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
* @date 2020/7/27 16:31
* @author wei.heng
*/
@Service
public class ProductServiceImpl implements ProductService {
private ProductDao productDao;
@Autowired
public ProductServiceImpl(ProductDao productDao) {
this.productDao = productDao;
}
@Override
public Product getProduct(Long id) {
return productDao.getProduct(id);
}
}
controller
package com.springcloud.productprovider.controller;
import com.springcloud.productprovider.pojo.Product;
import com.springcloud.productprovider.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
*
* @date 2020/7/27 16:40
* @author wei.heng
*/
@RestController
public class ProductController {
private ProductService productService;
@Autowired
public ProductController(ProductService productService) {
this.productService = productService;
}
@GetMapping("/product/{id}")
public Product product(@PathVariable Long id){
System.out.println("============ 7001:" + id);
return productService.getProduct(id);
}
}
productMapper.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.springcloud.productprovider.dao.ProductDao">
<select id="getProduct" parameterType="long" resultType="product">
select name ,price ,note from t_product where id = #{id}
</select>
</mapper>
OK,这个用于测试的项目,大概就是这个样子了
把这个项目再复制两份,端口改为7002、7003,然后启动,可以在eureka里看到如下界面:
这里的 PRODUCT-PROVIDER 服务,由三个地址在执行服务。到这里服务注册就结束了。