2.项目第一阶段服务者+消费者+架构

0.数据库

1.父项目pom(使用dependencyManagement标签管理依赖的版本)

<?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.wu</groupId>
    <artifactId>springcloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>springcloud-api</module>
        <module>springcloudproviderdept8001</module>
        <module>springcloudconsumerdept80</module>
    </modules>
    <!--打包方式 pom-->
    <packaging>pom</packaging>
    <properties>
        <projecy.build.sourceEncoding>UTF-8</projecy.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
    </properties>
    <dependencyManagement>
        <dependencies>
<!-- 一定要pom+import导入不然子项目会找不到父项目-->
            <!-- springCloud依赖 -->
            <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>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <!--mybatis启动器-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!--单元测试 版本不写死-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.20</version>
            </dependency>
            <!-- log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
            <!--日志相关-->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

2.springcloud-api项目,用于存放pojo

2.1 pom--》导入了lombok

2.2 存放了pojo类

@Data
@NoArgsConstructor
@Accessors(chain=true)//链式写法 dept.setDeptNo(1).setDname("123")
//实体类必须实现序列化
public class Dept implements Serializable {
    private Long deptno;
    private String dname;
//微服务是一个服务对于到一个数据库,同一个信息可能存在不同的数据库
    private String db_source;//查看这个数据是存在于哪个数据库的
    public Dept(String dname) {
        this.dname = dname;
    }
}

3.springcloudproviderdept8001服务者项目

3.1项目结构

 

3.2Dao层以及DeptMapper

@Mapper//是一个mapper
@Repository//给spring托管
public interface DeptDao {
    public boolean addDept(Dept dept);
    public Dept queryById(Long id);
    public List<Dept> queryAll();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wu.springcloud.dao.DeptDao">
    <insert id="addDept" parameterType="Dept">
    insert into dept(dname,db_source) values (#{dname},DATABASE());
    </insert>
    <select id="queryById" resultType="Dept" parameterType="Long">
        select * from dept where deptno=#{deptno};
    </select>
    <select id="queryAll" resultType="Dept">
        select * from dept;
    </select>
</mapper>

3.3Service层

public interface DeptService {
    public boolean addDept(Dept dept);
    public Dept queryById(Long id);
    public List<Dept> queryAll();
}
@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();
    }
}

3.4 Controller层

//提供restful服务
@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 get(@PathVariable("id") Long id){
        return deptService.queryById(id);
    }
    @GetMapping("/dept/list")
    public List<Dept> queryAll(Dept dept){
        return deptService.queryAll();
    }
}

3.5配置文件

mybatis-config

<?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>

application.yml

server:
  port: 8001
  #mybatis的配置
mybatis:
  type-aliases-package: com.wu.springcloud.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml
  config-location: classpath:mybatis/mybatis-config.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?useSSL=true&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root

3.6主程序入口

@SpringBootApplication
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class,args);
    }
}

4.springcloudConsumerdept80消费者项目

4.1项目结构

4.2Controller层

/**
 * @author wuyimin
 * @create 2021-06-30-16:51
 * @description 在进行此项目请求的时候需要把8001端口先跑起来
 */
@RestController
public class DeptConsumerController {
    //消费者不应该有service层
    //restTemplate模板有很多可以直接调用的方法,首先需要在配置文件注册到spring中
    //(url,实体:map,Class<T>responseType)
    @Autowired
    private RestTemplate restTemplate;//提供便捷访问远程http服务的方法,是一个简单的restful服务模板

    private static final String REST_URL_PREFIX="http://localhost:8001";
    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id")Long id){
        //请求的地址,返回值类型
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);
    }

    @RequestMapping("/consumer/dept/add")
    public boolean add(Dept dept){
        //请求的地址,参数,返回值类型
        return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,Boolean.class);
    }
    @RequestMapping("/consumer/dept/list")
    public List<Dept> add(){
        //请求的地址,参数,返回值类型
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list",List.class);
    }

}

4.3配置类

@Configuration//相当于spring中的applicationContext
public class ConfigBean {
    //注册RestTemplate模板
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

4.4配置文件以及主程序入口

#80配置之后localhost可以直接访问
server:
  port: 80
@SpringBootApplication
public class DeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_80.class,args);
    }
}

 

posted @ 2021-06-30 18:01  一拳超人的逆袭  阅读(32)  评论(0编辑  收藏  举报