一、版本选择?
Release Train | Boot Version |
---|---|
2021.0.x aka Jubilee | 2.6.x |
2020.0.x aka Ilford | 2.4.x, 2.5.x (Starting with 2020.0.3) |
Hoxton | 2.2.x, 2.3.x (Starting with SR5) |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
注意:Spring Cloud 官方已经停止对 Dalston、Edgware、Finchley 和 Greenwich 的版本更新。
二、创建maven父工程
导入相关依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sunl</groupId>
<artifactId>SpringCloud</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式-->
<packaging>pom</packaging>
<!--版本号-->
<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.13.2</junit.version>
<lombok.version>1.18.22</lombok.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<!--依赖管理-->
<dependencyManagement>
<dependencies>
<!--SpringCloud 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringBoot 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<!--SpringBoot 启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--日志测试~-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</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>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
三、创建新的提供者module
1.导入相关依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringCloud</artifactId>
<groupId>com.sunl</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-provider-dept-8001</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--需要拿到实体类,所以要配置api module-->
<dependency>
<groupId>com.sunl</groupId>
<artifactId>cloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--jetty-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!--热部署工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
2.配置提供者文件
server:
port: 8001
mybatis:
type-aliases-package: com.sunl.cloud.entity
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
spring:
application:
name: cloud-provider-dept
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/cloudDB01?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=UTC
username: root
password: 123456
3.配置mybatis文件:mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- configuration核心配置文件 -->
<configuration>
<settings>
<!--开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
4.编写sql文件:DeptMapper.java、DeptMapper.xml
package com.sunl.cloud.mapper;
import com.sunl.cloud.entity.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @program: SpringCloud
* @description: 部门接口
* @author: Sunl
* @create: 2022-05-14 20:41
**/
@Mapper
@Repository
public interface DeptMapper {
/**
* 增加部门
* @param dept
* @return
*/
public boolean addDept(Dept dept);
/**
* 根据id查询部门
* @param id
* @return
*/
public Dept queryDept(Long id);
/**
* 获取所有的部门信息
* @return
*/
public List<Dept> getAllDept();
}
<?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.sunl.cloud.mapper.DeptMapper">
<insert id="addDept" parameterType="com.sunl.cloud.entity.Dept">
insert into dept(dept_name,db_source)
values (#{deptName},DATABASE());
</insert>
<select id="queryDept" resultType="com.sunl.cloud.entity.Dept" parameterType="Long">
select dept_no deptNo, dept_name deptName, db_source dbSource from dept where dept_no = #{deptNo};
</select>
<select id="getAllDept" resultType="com.sunl.cloud.entity.Dept">
select dept_no deptNo, dept_name deptName, db_source dbSource from dept;
</select>
</mapper>
5.编写业务层代码:DeptService.java、DeptServiceImpl.java
package com.sunl.cloud.service;
import com.sunl.cloud.entity.Dept;
import java.util.List;
/**
* @program: SpringCloud
* @description: 部门业务服务层
* @author: Sunl
* @create: 2022-05-14 20:50
**/
public interface DeptService {
/**
* 增加部门
* @param dept
* @return
*/
public boolean addDept(Dept dept);
/**
* 根据id查询部门
* @param id
* @return
*/
public Dept queryDept(Long id);
/**
* 获取所有的部门信息
* @return
*/
public List<Dept> getAllDept();
}
package com.sunl.cloud.service.impl;
import com.sunl.cloud.entity.Dept;
import com.sunl.cloud.mapper.DeptMapper;
import com.sunl.cloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @program: SpringCloud
* @description: 部门业务服务实现类
* @author: Sunl
* @create: 2022-05-14 20:51
**/
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
/**
* 增加部门
*
* @param dept
* @return
*/
@Override
public boolean addDept(Dept dept) {
return deptMapper.addDept(dept);
}
/**
* 根据id查询部门
*
* @param id
* @return
*/
@Override
public Dept queryDept(Long id) {
return deptMapper.queryDept(id);
}
/**
* 获取所有的部门信息
*
* @return
*/
@Override
public List<Dept> getAllDept() {
return deptMapper.getAllDept();
}
}
6.编写控制层代码:DeptController.java
package com.sunl.cloud.controller;
import com.sunl.cloud.entity.Dept;
import com.sunl.cloud.service.DeptService;
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.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @program: SpringCloud
* @description: 部门控制层
* @author: Sunl
* @create: 2022-05-14 20:54
**/
@RestController
public class DeptController {
@Autowired
private DeptService deptService;
@PostMapping("/dept/add")
public boolean addDept(Dept dept){
return deptService.addDept(dept);
}
@GetMapping("/dept/get/{id}")
public Dept getDept(@PathVariable("id") Long id) {
Dept dept = deptService.queryDept(id);
if (dept == null) {
throw new RuntimeException("Fail");
}
return dept;
}
@GetMapping("/dept/list")
public List<Dept> queryAll() {
deptService.getAllDept()
return deptService.getAllDept();
}
}
7.编写提供者启动类
package com.sunl.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @program: SpringCloud
* @description: 启动类
* @author: Sunl
* @create: 2022-05-14 20:58
**/
@SpringBootApplication
public class DeptProvider_8001 {
public static void main(String[] args) {
SpringApplication.run(DeptProvider_8001.class,args);
}
}
三、创建新的消费者module
1.编写提供者启动类:ConsumerDept_80.java
package com.sun.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @program: SpringCloud
* @description: 消费者启动类
* @author: Sunl
* @create: 2022-05-14 22:51
**/
@SpringBootApplication
public class ConsumerDept_80 {
public static void main(String[] args) {
SpringApplication.run(ConsumerDept_80.class,args);
}
}
2.编写控制层代码:DeptConsumerController.java
package com.sun.cloud.controller;
import com.sunl.cloud.entity.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* @program: SpringCloud
* @description: 消费者控制类
* @author: Sunl
* @create: 2022-05-14 21:28
**/
@RestController
public class DeptConsumerController {
/**
* 消费者 : 不应该有service层
* RestTemplate 有很多方法给我们直接调用 ! 它的类中没有Bean所以要我们自己把它注册到Bean中
* public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables)
*/
@Autowired
private RestTemplate restTemplate;
private static final String REST_URL_PREFIX = "http://localhost:8001";
@RequestMapping("/consumer/dept/add")
@ResponseBody
public boolean addDept(Dept dept){
//远程只能用 post 方式请求,那么这里也只能通过 post 方式获取
return Boolean.TRUE.equals(restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class));
}
@RequestMapping("/consumer/dept/get/{id}")
@ResponseBody
public Dept queryDept(@PathVariable("id") Long id){
//service不在本项目中,所以要去远程项目获取
//远程只能用 get 方式请求,那么这里也只能通过 get 方式获取
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);
}
@RequestMapping("/consumer/dept/list")
@ResponseBody
public List<Dept> queryAllDept(){
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
}
}
3.ConfigBean配置代码:ConfigBean.java
package com.sun.cloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @program: SpringCloud
* @description: 配置类
* @author: Sunl
* @create: 2022-05-14 21:32
**/
@Configuration
public class ConfigBean {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
4.导入相关依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringCloud</artifactId>
<groupId>com.sunl</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-consumer-dept-80</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<!--消费者只需要 实体类 + Web 依赖即可-->
<dependencies>
<dependency>
<groupId>com.sunl</groupId>
<artifactId>cloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热部署工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
5.配置提供者文件
server:
port: 80