SpringCloud微服务项目创建流程

为了模拟微服务场景,学习中为了方便,先创建一个父工程,后续的工程都以这个工程为准,实用maven聚合和继承,统一管理子工程的版本和配置。

后续使用中只需要只有配置和版本需要自己规定之外没有其它区别。

微服务中分为服务提供者和服务调用者。

注意这里只是模拟微服务的实用,核心没有进行演示,比如Eureka注册中心等。

版本对应关系

需要注意的是boot的版本和cloud版本需要对应,可以看表对应。

1、创建父工程

正常的创建maven项目流程,然后编写pom.xml文件即可,将大部分需要用的配置定一下。

注意:这里的配置的是tkmybatis,cloud版本为Greenwich,boot版本为2.1.5,创建完之后记得刷新一下maven配置。

pom.xml

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>com.AE</groupId>
    <artifactId>SpringCloud01</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <-- 以下是需要的大部分依赖 -->

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
        <mapper.starter.version>2.1.5</mapper.starter.version>
        <mysql.version>5.1.46</mysql.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- springCloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- 通用Mapper启动器 -->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>${mapper.starter.version}</version>
            </dependency>
            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2、创建服务提供者模块

在父项目中创建子模块,命名-例:user-service

当前模块主要是给其它的服务模块提供数据库的信息。

这里的pom.xml文件配置跟以前的大部分项目是差不多的。

2.1 pom.xml

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>
    <parent>
        <groupId>com.AE</groupId>
        <artifactId>SpringCloud01</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>user-service</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 通用Mapper启动器 -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>
</project>

2.2 编写application.yml配置文件

空项目可以通过 JBLSpringBootAppGen 插件生成项目入口Application.java文件和application.yml配置文件。

配置端口号和mysql的配置。

application.yml

XML 复制代码
# 端口号
server:
  port: 9002

# 连接池
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
    username: root
    password: 123456
mybatis:
  type-aliases-package: com.AE.user.pojo # 别名扫描 指向你创建的pojo包

2.3 编写代码

2.3.1 实体类

java 复制代码
@Data
@Table(name = "tb_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String userName;

    private String password;

    private String name;
}

2.3.2 mapper层

注意这里导入的是tk.mybatis的包,如果用的是正常的mybatis用法是不同的。该包里有很多已经实现的方法。

java 复制代码
package com.AE.user.mapper;

import com.AE.user.pojo.User;
import tk.mybatis.mapper.common.Mapper;


public interface UserMapper extends Mapper<User> {
}

2.3.3 service层

用来处理业务。

java 复制代码
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User queryById(Long id){
        return userMapper.selectByPrimaryKey(id);
    }
}

2.3.4 controller层

url访问

java 复制代码
@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }
}

2.3.5 Application.java

注意MapperScan这里导入的也是tkmybatis里面的包。

java 复制代码
@MapperScan("com.AE.user.mapper")
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.4 测试

在浏览器访问controller定义的url,例如:localhost:9002/user/1

页面返回数据库中数据即可

3、创建服务调用者模块

创建maven模块,跟user-service创建相同,空项目可以通过 JBLSpringBootAppGen 插件生成项目入口Application.java文件和application.yml配置文件。

3.1 pom.xml文件

因为这里只是处理业务,所以需要的不多,只需要能通过接口去访问其它服务获取信息即可。

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>
    <parent>
        <groupId>com.AE</groupId>
        <artifactId>SpringCloud01</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>consumer</artifactId>

   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

项目结构如下:

3.2 编写代码

3.2.1 启动器

spring提供了RestTemplate模板工具类,对基于HTTP的客户端进行了封装,并且实现了对象与json的序列化和反序列化。RestTemplate并没有限定HTTP的客户端类型,而是进行了抽 象,目前常用的3种都有支持:

HTTPClient

OkHTTP

JDK原生的URLConnection(默认的)

java 复制代码
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3.2.2 实体类

将服务提供者中的实体类粘贴过来即可,将与数据库有关的注解删掉即可。

3.2.3 controller层

直接调用RestTemplate模板中的方法即可进行访问获取数据。

java 复制代码
@RestController
@RequestMapping("consumer")
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("{id}")
    public User query(@PathVariable("id") Long id) {
        String url = "http://localhost:9002/user/" + id;
        return restTemplate.getForObject(url, User.class);
    }
}

3.3 测试

在浏览器中输入controller中定义的url,要保证两个微服务全部开启。获取正确数据即可。

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸3 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象3 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了4 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·4 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王4 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康4 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神5 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342735 小时前
Java实现离线身份证号码OCR识别
java·开发语言