创建maven项目,写一个微服务
将src删除掉
然后添加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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>springcloud-api</module>
<module>springcloud-provider-dept-8001</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<!--打包方法 pom-->
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<!--spring-cloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-boot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 数据库-->
<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.1.10</version>
</dependency>
<!-- spring-boot启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.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>
在该项目springcloud下新建项目springcloud-api
这里看到子模块下面的pom.xml中的下是springcloud,ctrl进去
可以看到父依赖中有了子模块
可以看到跳到了,主项目的pom.xml,说明主项目的pom.xml是用了管理依赖的,再看看右侧maven,发现右边写进去的依赖并没有导入,真正使用还需要在子模块中pom.xml配置
可以看到我们配置了子模块,不用写版本号,因为父依赖中已经有了版本号,如果父依赖中没有,就需要单独写进去
创建数据库
然后连接数据库
然后创建表
这里创建了表名及其注释,然后新建列
这里创建了表名及其注释,然后新建列
然后点击OK
可以看到这个表建好了
那么我们往进插数据
可以看到插入成功
这样我们数据就准备好了
查询一下试试
成功查询
接下来写实体类
pojo.java:
所有实体类,第一步网络,第二步序列化(如果没有序列化,传输会报错),还需要做一点rom对象映射,也就是类表关系映射(将mysql中的表与对应的类映射)
可以看到报错,因为lombok依赖版本不支持,所以我们需要换一个
这样就好了
那么这个微服务就写完了,只管拆分
接下来写服务的提供者
新建springcloud-provider-dept-8001模块作为服务的提供者
要想用到之前模块的类,必须导入之前项目的依赖(不是全部依赖,只写项目名依赖就可以,如上红框)
然后配置该模块其他需要的依赖
<?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>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-provider-dept-8001</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 我们需要拿到实体类,所以要配置api module-->
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</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>
<!-- springboot启动-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- springboot测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<!-- springboot启动web-->
<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>
配置完依赖之后,写配置application.yml
配置端口号,mybatis的配置
发现这里mybatis没有提示,那么说明我们依赖没导进去,是之前依赖写错了
是启动那里写错了,修改如下,不能光写spring-boot-starter
这里依赖启动要用mybatis的方式
这样就好了
然后我们写mybatis配置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="cacheEnable" value="true"/>
</settings>
</configuration>
开始写接口
DeptDao.java
Dao层写完之后对应的mapper文件
这样DAO层就彻底写完了,
接下来写service层
先写service接口层,和dao层方法一样,直接粘贴过来
然后写实现类
接下来写controller层
controller层需要调用service层
接下来写启动类
然后启动
访问http://127.0.0.1:8001/dept/list
访问http://127.0.0.1:8001/dept/get/1
成功写完服务提供者
然后写消费者
创建消费者模块,名为springcloud-consumer-dept-80
对于消费者来说,不需要用数据库,那么只需要用springcloud-api这个微服务就可以,同时只需要web页面就可以
那么引入springcloud-api这个微服务的依赖
接下来写需要的依赖,需要web就可以
<?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>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-consumer-dept-80</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 实体类+web-->
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-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>
接下来写配置文件
就写web端口就行
接下来写controller
这里消费者是不需要service层,消费者通过url去请求,比如http://127.0.0.1:8001/dept/list这个url,但是这个url是在我们之前提供者模块的,那么我们怎么拿到这个url?
springboot是支持restful这种请求
那么就有restTemplate模板,能支持请求对应的模板,供我们直接调用就可以了
但是发现构造@Bean,
那没有怎么办?
我们自己给他配置一个
可以看到我们给他配置了Bean注解,那么我们就可以直接从spring容器中拿了
代码如下:
这里介绍下restTemplate,这是springboot提供的多种便携访问远程http服务的方法,相当于简单的Restful服务模板
用到方法参数,写法如下
分别是获取的url和返回的值类型
接下来写启动类
然后启动
注意(需要先启动提供者,之后在启动消费者)
可以看到消费者可以成功访问得到数据