1. SpringCloud版本选择
大版本说明
实际开发版本关系
2. 环境搭建
2.1 搭建父项目
2.1.1 更改打包方式
在pom.xml中
<!--打包方式-->
<packaging>pom</packaging>
2.1.2 导入依赖
<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.20</lombok.version>
<log4j.version>4.1.12</log4j.version>
<logback-core.version>1.2.3</logback-core.version>
</properties>
<dependencyManagement>
<dependencies>
<!--springcloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springboot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<!--springboot启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!--日志测试-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback-core.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
2.2 数据库搭建
创建表
CREATE TABLE `dept` (
`deptno` int(11) NOT NULL AUTO_INCREMENT,
`dname` varchar(60) NOT NULL,
`db_source` varchar(60) NOT NULL,
PRIMARY KEY (`deptno`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='部门表'
插入数据
insert into dept(`dname`,`db_source`) values ('开发部',DATABASE());
insert into dept(`dname`,`db_source`) values ('测试部',DATABASE());
insert into dept(`dname`,`db_source`) values ('运维部',DATABASE());
insert into dept(`dname`,`db_source`) values ('安全部',DATABASE());
insert into dept(`dname`,`db_source`) values ('财务部',DATABASE());
2.3 创建实体与表的关系映射springcloud-api
在父项目中创建一个普通的maven普通的子工程,并命名为springcloud-api
2.3.1 导入依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2.3.2 创建实体类
@Data
@NoArgsConstructor
@Accessors(chain = true)//链式写法 .完可以继续点
public class Dept implements Serializable {
private Long deptno;//主键
private String dname;
//同样的数据可能存在不同的数据库
private String db_source;
public Dept(String dname) {
this.dname = dname;
}
}
2.4 创建服务提供者springcloud-provider-dept-8001
在父项目中创建一个普通的maven普通的子工程,并命名为springcloud-provider-dept-8001
2.4.1 导入依赖
<!--我们需要实体类,所以需要把api model引过来-->
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!--springboot启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!--日志测试-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</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 web服务器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<!--热部署工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
2.4.2 编写配置文件
在resources资源目录下创建application.yml
server:
port: 8001
# mybatis配置
mybatis:
type-aliases-package: com.test.springcloud.pojo
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
#配置spring
spring:
application:
name: springcloud-provider-dept
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/db01?userUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
2.4.3 编写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>
<settings>
<!--显示的开启全局缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
2.4.4 编写Dao层
DeptDao.java
@Mapper
@Repository
public interface DeptDao {
public boolean addDept(Dept dept);
public Dept queryById(Long deptno);
public List<Dept> quertAll();
}
2.4.5 创建DeptMapper.xml
在resources资源目录下创建mybatis/mapper/DeptMapper.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.test.springcloud.dao.DeptDao">
<insert id="addDept" parameterType="Dept">
insert into dept(`dname`,`db_source`) values (#{dname},DATABASE())
</insert>
<select id="queryById" parameterType="_long" resultType="Dept">
select * from dept where deptno=#{deptno}
</select>
<select id="quertAll" resultType="Dept">
select * from dept
</select>
</mapper>
2.4.6 编写Service层
DeptService.java
public interface DeptService {
public boolean addDept(Dept dept);
public Dept queryById(Long deptno);
public List<Dept> quertAll();
}
2.4.7 编写Service层实现类
DeptServiceImpl.java
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptDao deptDao;
@Override
public boolean addDept(Dept dept) {
return deptDao.addDept(dept);
}
@Override
public Dept queryById(Long deptno) {
return deptDao.queryById(deptno);
}
@Override
public List<Dept> quertAll() {
return deptDao.quertAll();
}
}
2.4.8 编写controller
对外暴露接口进行访问
/**
* 提供restful服务
*/
@RestController
@RequestMapping("/dept")
public class DeptController {
@Autowired
private DeptService deptService;
@PostMapping("/add")
public boolean addDept(Dept dept) {
return deptService.addDept(dept);
}
@GetMapping("/get/{id}")
public Dept queryById(@PathVariable("id") Long id) {
return deptService.queryById(id);
}
@GetMapping("/list")
public List<Dept> quertAll() {
return deptService.quertAll();
}
}
2.4.9 创建启动类
DeptProvider_8001.java
/**
* 启动类
*/
@SpringBootApplication
public class DeptProvider_8001 {
public static void main(String[] args) {
SpringApplication.run(DeptProvider_8001.class,args);
}
}
2.4.10 启动测试
在浏览器输入:http://localhost:8001/dept/list
在浏览器输入:http://localhost:8001/dept/get/2
2.5 创建服务消费者springcloud-consumer-dept-80
在父项目中创建一个普通的maven普通的子工程,并命名为springcloud-consumer-dept-80
2.5.1 导入依赖
pom.xml
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.5.2 编写配置文件
在resources资源目录下创建application.yml
server:
port: 80
2.5.3 创建配置Bean类
ConfigBean.java
@Configuration
public class ConfigBean {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
2.5.4 创建Controller
DeptConsumerController.java
消费者,不应该有service层~
RestTemplate …供我们直接调用就可以了!注册到Spring中
@RestController
@RequestMapping("/consumer/dept")
public class DeptConsumerController {
//理解:消费者,不应该有service层~
//RestTemplate ....供我们直接调用就可以了!注册到Spring中
//getForObject(URI url,实体:Map, Class<T> responseType)
@Autowired
public RestTemplate restTemplate;
public static final String REST_URL_PREFIX = "http://localhost:8001";
@RequestMapping("/add")
public boolean addDept(Dept dept) {
return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,Boolean.class);
}
@GetMapping("/get/{id}")
public Dept queryById(@PathVariable("id") Long id) {
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);
}
@GetMapping("/get/list")
public List<Dept> quertAll() {
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list",List.class);
}
}
2.5.5 创建启动类
DeptConsumer80.java
/**
* 启动类
*/
@SpringBootApplication
public class DeptConsumer80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer80.class,args);
}
}
2.5.6 启动测试
在浏览器输入:http://localhost/consumer/dept/get/list
在浏览器输入:http://localhost/consumer/dept/get/2
内容参考:https://www.bilibili.com/video/BV1jJ411S7xr
仅用于学习!