学习springcloud之前可以参考本文回顾基础知识,需要有Maven+springmvc+mybatis+mysql基础

1.Maven的分包分模块架构

一个Project带着多个Module子模块

ServiceCloud父工程(Project)管理依赖

包含3个子模块(Module)


cloud-api:封装的整体Entity/接口/公共配置等

cloud-provider-dept-8001:微服务落地的服务提供者

cloud-consumer-dept-80:微服务调用的客户端使用

2.创建servicecloud父工程

idea创建一个maven项目,创建好后之后一个src文件和一个pom.xml文件

pom文件内容如下:


<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.shawn</groupId>

<artifactId>service-cloud</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.12</junit.version>

<log4j.version>1.2.17</log4j.version>

<lombok.version>1.16.18</lombok.version>

</properties>


<!--父工程依赖管理-->

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>Dalston.SR1</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>1.5.9.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.0.4</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.0.31</version>

</dependency>

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.3.0</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>

<scope>test</scope>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>${log4j.version}</version>

</dependency>

</dependencies>

</dependencyManagement>


<build>

<finalName>service-cloud</finalName>

<resources>

<resource>

<directory>src/main/resources</directory>

<filtering>true</filtering>

</resource>

</resources>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<configuration>

<delimiters>

<delimit>$</delimit>

</delimiters>

</configuration>

</plugin>

</plugins>

</build>


<!--以下是和其他模块依赖,报错可以先注释掉-->

<modules>

<module>cloud-api</module>

<module>cloud-provider-dept-8001</module>

        <module>cloud-consume-dept-80</module>

    </modules>


</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

servicecloud父工程主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象父类


3.创建cloud-api 封装的整体Entity/接口/公共配置等


直接在父工程上点击右键创建新的Module



next下一步 再Finish

目录结构:



修改Pom文件:


<?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>service-cloud</artifactId>

        <groupId>com.shawn</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>


    <dependencies><!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 -->

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

        </dependency>

       

    </dependencies>


    <artifactId>cloud-api</artifactId>

</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

lombok

在项目中使用Lombok可以减少很多重复代码。比如说getter/setter/toString等方法的编写。

插件安装方法:打开IDEA的Setting –> 选择Plugins选项 –> 选择Browse repositories –> 搜索lombok –> 点击安装 –> 安装完成重启IDEA

如果安装不了可以选择去官网下载jar包,然后本地安装。



配合lombok创建部门Entity:


package com.shawn.springcloud.entites;

import java.io.Serializable;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.experimental.Accessors;


@NoArgsConstructor //无参构造

@AllArgsConstructor//全餐构造

@Data//get/set方法

@Accessors(chain=true)//链式调用

public class Dept implements Serializable// entity --orm--- db_table

{

private Long deptno; // 主键

private String dname; // 部门名称

private String db_source;// 来自那个数据库,因为微服务架构可以一个服务对应一个数据库,同一个信息被存储到不同数据库

public Dept(String dname)

{

super();

this.dname = dname;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

4.创建cloud-provider-dept-8001 服务提供者

参照cloud-api创建cloud-provider-dept-8001工程

修改pom.xml文件

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


    <parent>

        <artifactId>service-cloud</artifactId>

        <groupId>com.shawn</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>


    <artifactId>cloud-provider-dept-8001</artifactId>


    <dependencies>

        <dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->

            <groupId>com.shawn</groupId>

            <artifactId>cloud-api</artifactId>

            <version>${project.version}</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>

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jetty</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

        </dependency>

        <!-- 修改后立即生效,热部署 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>springloaded</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

        </dependency>

    </dependencies>

</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

新建yml文件,并配置信息


server:

  port: 8001


mybatis:

  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路径

  type-aliases-package: com.shawn.springcloud.entites  # 所有Entity别名类所在包

  mapper-locations:

  - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件


spring:

   application:

    name: cloud-dept

   datasource:

    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型

    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包

    url: jdbc:mysql://localhost:3306/clouddb01              # 数据库名称

    username: root

    password: 123456

    dbcp2:

      min-idle: 5                                           # 数据库连接池的最小维持连接数

      initial-size: 5                                       # 初始化连接数

      max-total: 5                                          # 最大连接数

      max-wait-millis: 200                                  # 等待连接获取的最大超时时间

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

工程src/main/resources目录下新建mybatis文件夹后新建mybatis.cfg.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>

1

2

3

4

5

6

7

8

9

MySQL创建部门数据库脚本

新建数据库直接执行就可以了

DROP DATABASE IF EXISTS cloudDB01;

CREATE DATABASE cloudDB01 CHARACTER SET UTF8;

USE cloudDB01;

CREATE TABLE dept

(

  deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,

  dname VARCHAR(60),

  db_source   VARCHAR(60)

);

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());

 

SELECT * FROM dept;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

DeptDao部门接口

@Mapper

public interface DeptDao

{

  public boolean addDept(Dept dept);

 

  public Dept findById(Long id);

 

  public List<Dept> findAll();

}

1

2

3

4

5

6

7

8

9

工程src/main/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.shawn.springcloud.dao.DeptDao">


    <select id="findById" resultType="Dept" parameterType="Long">

   select deptno,dname,db_source from dept where deptno=#{deptno};

  </select>

    <select id="findAll" resultType="Dept">

   select deptno,dname,db_source from dept;

  </select>

    <insert id="addDept" parameterType="Dept">

   INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE());

  </insert>

</mapper>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

DeptService部门服务接口

public interface DeptService

{

    public boolean add(Dept dept);

    public Dept    get(Long id);

    public List<Dept> list();

}

1

2

3

4

5

6

DeptServiceImpl部门服务接口实现类

@Service

public class DeptServiceImpl implements DeptService {

    @Autowired

    private DeptDao dao ;

    @Override

    public boolean add(Dept dept)

    {

        return dao.addDept(dept);

    }

    @Override

    public Dept get(Long id)

    {

        return dao.findById(id);

    }

    @Override

    public List<Dept> list()

    {

        return dao.findAll();

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

DeptController部门微服务提供者REST

@RestController

public class DeptController {

    @Autowired

    private DeptService service;


    @RequestMapping(value="/dept/add",method=RequestMethod.POST)

    public boolean add(@RequestBody Dept dept)

    {

        return service.add(dept);

    }


    @RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)

    public Dept get(@PathVariable("id") Long id)

    {

        return service.get(id);

    }


    @RequestMapping(value="/dept/list",method=RequestMethod.GET)

    public List<Dept> list()

    {

        return service.list();

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

DeptProvider8001_App主启动类DeptProvider8001_App

@SpringBootApplication

public class DeptProvider8001_App {

    public static void main(String[] args) {

        SpringApplication.run(DeptProvider8001_App.class,args);

    }

}

1

2

3

4

5

6

构建完成,打开浏览器测试

http://localhost:8001/dept/get/2


http://localhost:8001/dept/list


补充一下项目结构:


5.创建cloud-consumer-dept-80 消费者

参照上文创建出maven工程cloud-consumer-dept-80

修改Pom文件

<?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>service-cloud</artifactId>

        <groupId>com.shawn</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>

    <dependencies>

        <dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->

            <groupId>com.shawn</groupId>

            <artifactId>cloud-api</artifactId>

            <version>${project.version}</version>

        </dependency>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

        </dependency>

        <dependency>

            <groupId>ch.qos.logback</groupId>

            <artifactId>logback-core</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jetty</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

        </dependency>

        <!-- 修改后立即生效,热部署 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>springloaded</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

        </dependency>

    </dependencies>

    <artifactId>cloud-consume-dept-80</artifactId>

</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

新增yml文件application.yml

server:

  port: 80

1

2

编写配置文件configbean(类似spring里面的applicationContext.xml写入的注入Bean)

package com.shawn.springcloud.cfgbeans;

@Configuration

public class ConfigBean {


    @Bean

    public RestTemplate restTemplate(){

        return new RestTemplate();

    }

}


1

2

3

4

5

6

7

8

9

10

新建DeptController_Consumer部门微服务消费者REST

package com.shawn.springcloud.controller;

@RestController

public class DeptController_Consumer {


    private static final String REST_URL_PREFIX = "http://localhost:8001";


    @Autowired

    private RestTemplate restTemplate;


    @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 restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);

    }


    @RequestMapping("/consumer/dept/list")

    public List<Dept> list(){

        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list",List.class);

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

注:RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集

使用:

restTemplate访问restful接口非常的简单粗暴无脑。(url, requestMap, ResponseBean.class)这三个参数分别代表

REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。


最后主启动类编写

package com.shawn.springcloud;

@SpringBootApplication

public class DeptConsumer80_App

{

  public static void main(String[] args)

  {

   SpringApplication.run(DeptConsumer80_App.class, args);

  }

}

1

2

3

4

5

6

7

8

9



6. 编写完成,最后进行测试

访问消费者接口(注意,是访问消费者的!80端口)

http://localhost/consumer/dept/get/2


http://localhost/consumer/dept/list


END

————————————————

版权声明:本文为CSDN博主「LuckyShawn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_40037053/article/details/85051405


标签: none

添加新评论