2つのマイクロサービスモジュールを構築するために(サブ記事)春ブーツ

詳細なデモンストレーションユーザーサービスの構築プロセスは、ユーザー・消費ビルドプロセスは、違いのその部分のみを示し、同様です。
これら二つのプロジェクトは、完全なマイクロサービスのデモを構成し、フルメインの記事を参照してくださいする必要はありませんでした。

1.エンジニアリングおよびユーザーサービスモジュールを作成します。

1.1空のプロジェクトを作成します

宇宙工学における1.2の新モジュール

モジュールは、プロジェクト、マイクロサービスです。

(:のURLにアクセスするために春Initializr、上記JDK1.8と、デフォルトのURLを選択しhttps://start.spring.ioを、ページ上のモジュールをビルドし、プロジェクトをダウンロードするように選択することができます)

グループおよびアーティファクト情報を記入

モジュールを選択

我々はインターフェイス、クエリを提供したいとデータを返すので、それは、対応するモジュールのWebおよびSQLが必要です。

ポイント次へ - > [完了が完了します。

示すように、アイテムの構造:

  • UserServiceApplication:メイン関数の内部で起動し、プロジェクトを開始することができるようになります。
  • リソース:静的リソースを入れて、静電放電は、一般的にイメージ、スクリプトやCSSで、テンプレートは、フロントエンドの静的ページのデフォルトの保存場所(この場合は静的なページを含まない)です。
  • application.yml:SpringBootプロジェクトの全体的なプロファイルは、JDBC接続プーリングやその他の属性を含んで構成することができます。このファイルには、文法YMLより簡潔、YMLするように変更することができ、デフォルトのファイル拡張子のプロパティです。
  • pom.xml:このプロジェクトのために必要なさまざまな依存関係を紹介するMavenプロジェクト、です。

2.プロファイル

2.1のpom.xml

除了自动生成的部分,我还添加了三个依赖

  • javax.persistence-api:java持久层API,用于pojo类的@Table等注解,关联实体类和数据库表
  • lombok: 用于pojo类的@Data注解,用于自动生成get,set方法。
  • mapper-spring-boot-starter: 通用mapper,继承通用mapper后能直接使用其包含的查询方法查询,不必再写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>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.vplus.demo</groupId>
    <artifactId>user-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>user-service</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--*******************自己添加的依赖开始*****************-->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
        <!--*******************自己添加的依赖结束*****************-->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.2 application.yml

  • SpringBoot里面自带tomcat,配置端口为8081即可使用
  • 自带hikariCP数据源,直接配置即可。我的mysql版本为5.7,url属性需要加上useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC来解决时区和乱码问题。
  • mybatis只需要指明pojo类在哪里即可。
server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: 你的数据库用户名
    password: 你的数据库用户密码
    hikari:
      maximum-pool-size: 20
      minimum-idle: 10
mybatis:
  type-aliases-package: com.vplus.demo.userservice.pojo

3. 代码

3.1 代码目录结构

3.2 UserController

@RestController注解相当于@Controller注解外加给所有方法加上@ResponseBody注解。表现为:每个方法返回的都是json字符串。

@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserService userService;

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

3.3 UserService

为了简便,不再写service接口和Impl实现了,直接合成一个Service类。

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

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

3.4 UserMapper

继承通用Mapper,由于@Mapper注解的存在,和通用Mapper重名,因此通用Mapper写成全类名tk.mybatis.mapper.common.Mapper<User>

@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{
}

3.5 启动

启动UserServiceApplication的main函数,访问http://localhost:8081/user/20即可查到ID为20的用户。

至此user-service模块搭建完成

4. 创建user-consume模块

搭建流程和创建user-service模块一致,需要注意一点:选择依赖时只选Web模块,不需要SQL模块。因为数据是从user-service提供的接口里面读的。

添加第二个模块后,Idea会提示你是否显示Run DashBoard,要选择显示。

4.1 配置文件

pom.xml

  • 我们使用RestTemplate请求接口,底层Http客户端使用Okhttp实现,所以添加其依赖。
  • pojo类需要@Data注解生成get/set方法,添加lombok依赖。
省略......
</dependencies>
        省略.......
        <!--添加OKhttp支持-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
</dependencies>
省略......

application.yml

配置项目的tomcat端口为8082

server:
  port: 8082

4.2 代码

项目结构

UserConsumeApplication

注册RestTemplate

@SpringBootApplication
public class UserConsumeApplication {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
    }
    public static void main(String[] args) {
        SpringApplication.run(UserConsumeApplication.class, args);
    }
}

User

这个项目还需要User类来承载数据,但不需要关联数据表了,所以@Table注解就不用写了

@Data
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    private String username;
    private String phone;
}

ConsumerController

@RestController
@RequestMapping("consume")
public class ConsumerController {
    @Autowired
    private UserService userService;
    @GetMapping
    public List<User> consume(@RequestParam("ids") List<Long> ids) {
        return this.userService.queryUserByIds(ids);
    }
}

UserService

@Service
public class UserService {
    @Autowired
    private UserDao userDao;
    public List<User> queryUserByIds(List<Long> ids){
        List<User> users = new ArrayList<>();
        for (Long id : ids) {
            User user = this.userDao.queryUserById(id);
            users.add(user);
        }
        return users;
    }
}

UserDao

这里的Dao并不是“真正的Dao”,不是从数据库查询数据,而是使用RestTemplate访问远程的rest接口。

@Component
public class UserDao {
    @Autowired
    private RestTemplate restTemplate;

    public User queryUserById(Long id){
        String url = "http://localhost:8081/user/" + id;
        return this.restTemplate.getForObject(url, User.class);
    }
}

4.3 启动运行

从Run DashBoard中依次启动两个项目。访问:http://localhost:8082/consume?ids=20,21即可查询id=20和21的两个用户的信息

5. 参考资料

  • 黑马培训的乐优商城笔记
  • spring官网

おすすめ

転載: www.cnblogs.com/qianbixin/p/10936464.html