创建父工程
- 父工程:springcloud 注意 Packageing是pom模式
- 作用:主要是定义POM文件,将后续各个子模块公用的jar包等统一提取出来,类似一个抽象父类
父工程的 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.niu</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>springcloud-api</module>
<module>springcloud-provider-dept-8001</module>
</modules>
<!-- 打包方式:pom-->
<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.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<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>
<!--springboot-->
<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>8.0.29</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--Springboot启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</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>
-
注意父工程这里只有 而非
- :是依赖管理!并不会实际安装各种依赖
-
搭配依赖中的 ${lombok.version} 进行版本管理
-
Springcloud-api :
-
pojo实体
-
package com.niu.springcloud.pojo; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; /** * 所有的实体类无比实现序列化 */ @Data @NoArgsConstructor @Accessors(chain = true) // 链式写法 public class Dept implements Serializable { // Dept 实体类 orm 类表关系映射 // 主键 private Long deptno; // 名字 private String dname; // 来自哪个数据库 // 这个数据存在哪个数据库的字段 ~ 微服务:一个服务对应一个数据库,同一个信息可能存在不同的数据库 private String db_source; public Dept(String dname) { this.dname = dname; } /* 链式写法 Dept dept = new Dept() 支持: dept.setDept(11).setDname('sss').setDb_source('001') */ }
-
pom.xml
-
<!--我们需要拿到实体类,所以要配置api module--> <dependency> <groupId>com.haust</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--当前的module自己要用的依赖,如果父依赖已经配置了版本,这里就不用写了--> <!-- 这里的 dependencies 才实际上加载了依赖--> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
-
-
Springcloud-provider-dept-8001
-
Application.yml配置!
-
server: port: 8001 # mybatis 配置!!! mapper 和 config 都要配置好! mybatis: type-aliases-package: com.niu.springcloud.pojo config-location: classpath:mybatis/mybatis-config.xml # 这里我们在mapper中手写sql语句,所以要配置好 mapper-locations: classpath:mybatis/mapper/*.xml # spring的配置 spring: application: name: springcloud-provider-dept datasource: type: com.alibaba.druid.pool.DruidDataSource # 数据源 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/DB01?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=true username: root password: NiuXiYe030312
-
-
serviceImpl中直接调用dao中的方法
-
@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 id) { return deptDao.queryById(id); } @Override public List<Dept> queryAll() { return deptDao.queryAll(); } }
-
-
pom.xml!
-
springcloud-provider-dept-8001的dao接口调用springcloud-api模块下的pojo,可使用在springcloud-provider-dept-8001的pom文件导入springcloud-api模块依赖的方式:
-
<dependencies> <!--我们需要拿到实体类 api module--> <dependency> <groupId>org.niu</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--junit--> <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> <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> <!--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>
-
热部署:之前我们改逻辑代码需要重新运行项目才能生效,热部署后我们只需等待即可
-
-
Springcloud-consumer-dept-80
-
pom.xml
-
<!--消费者就不用连数据库,他只需要 实体类+web --> <dependencies> <!--拿到实体类--> <dependency> <groupId>org.niu</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</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-devtools</artifactId> </dependency> </dependencies>
-
-
controller层
-
/** * 完全解耦,没有service层,只有实体类 */ @RestController public class DeptConsumerController { // 注意消费者不应该又service层 // springboot支持 RestFul 风格 // RestTemplate 模板:里面有很多方法供我们 直接来来调用 // 但是这个里面没有 @Bean 所以需要我们手动配置一下 // 我们需要通过RestFul风格来请求它 // 相应的类型 // 里面方法的参数核心是: (String url, 实体:map , Class<T> responseType ) // 先注入 @Autowired private RestTemplate restTemplate; private static final String REST_URL_PREFIX = "http://localhost:8001"; @RequestMapping("/consumer/dept/add") public Boolean add(Dept dept) { return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class); } @RequestMapping("/consumer/dept/get/{id}") public Dept get(@PathVariable("id") Long id) { // 这里我们没法直接 return service.方法 // === > 需要跑到远程的http://localhost:8001/dept/list 来拿 // 这里用restTemplate来请求 这个里的 get 是我们provider里面的controller 对应方法是GetMapper来要求的 return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class); } @RequestMapping("/consumer/dept/list") public List<Dept> getAll() { return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class); } }
-
-
config
-
@Configuration public class ConfigBean { //@Configuration 相当于spring 里面的 applicationContext.xml @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
-
-
启动类正常
-