Spring Cloud 入门(1)-- 第一个 Kotlin 微服务

来源:互联网 发布:搞笑视频配音软件 编辑:程序博客网 时间:2024/05/23 23:49

最近公司需要使用 Spring Cloud 开发后台应用,为了以后能够看懂后台代码,所以决定学习一下 Spring Cloud。对于Spring Cloud和微服务的介绍,各位自行网上搜索吧。本系列文章是入门级别的学习文章,最终的目的就是入门,想要深入学习,请不要看本系列文章。

由于本人不是后端开发,能力有限,文章难免出错,如果出现错误,还请留言指出。

1 工具

本系列使用的工具为 Intellij idea,Spring Cloud 版本为 Edgware.RELEASE。

2 目标

本文使用 Spring boot 创建一个简单的用户微服务,对外能够查询用户信息。

3 Spring Boot

Spring Boot 确切的来说不算是Spring Cloud 中的一员,但是对于以Spring 为基础搭建的微服务,它是一个重要的组成部分。原来搭建服务的时候,基本上都是编写好代码,达成war包,然后部署到 Web 容器当中,步骤繁琐。Spring Boot 简化了这个步骤,它将程序和 Web 容易一起大成一个 jar 包,然后使用命令就能够启动这个 jar 包。这样一个服务就搭建起来了,比原来方便多了。另外 Spring Boot 里面集成了许多 Spring 的东西,例如 Spring MVC,所以 Spring MVC 原来的注解基本都可以使用。

4 创建用户微服务

4.1 创建项目

使用Idea,点击 File -> New -> Spring Initializr,这里默认就好,点击 Next,输入对应的信息,这里语言选择 kotlin,ArtifactId 为 user-service(这里可以不一致,最好一致,因为后面也会用到)。点击 Next, 选择第一列 Web,第二列 选中 Web,然后Next,选择存储地址,点击 Finish 保存。
这时候开始下载依赖的包。下载完成后打开对应的 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>io.mshare.study</groupId>    <artifactId>user-service</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>user-service</name>    <description>Demo project for Spring Boot</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.9.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <properties>        <kotlin.compiler.incremental>true</kotlin.compiler.incremental>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>        <kotlin.version>1.1.61</kotlin.version> <!-- kotlin 版本-->    </properties>    <dependencies>        <dependency>            <!--这个是spring boot 的依赖包,如果没有可以手动添加-->            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--下面这两个都是 kotlin 依赖的东西 保持原状就好了-->        <dependency>            <groupId>org.jetbrains.kotlin</groupId>            <artifactId>kotlin-stdlib-jre8</artifactId>            <version>${kotlin.version}</version>        </dependency>        <dependency>            <groupId>org.jetbrains.kotlin</groupId>            <artifactId>kotlin-reflect</artifactId>            <version>${kotlin.version}</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>        <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>            <!-- 这个是kotlin 编译相关的插件 如果使用java 语言不需要-->            <plugin>                <artifactId>kotlin-maven-plugin</artifactId>                <groupId>org.jetbrains.kotlin</groupId>                <version>${kotlin.version}</version>                <configuration>                    <compilerPlugins>                        <plugin>spring</plugin>                    </compilerPlugins>                    <jvmTarget>1.8</jvmTarget>                </configuration>                <executions>                    <execution>                        <id>compile</id>                        <phase>compile</phase>                        <goals>                            <goal>compile</goal>                        </goals>                    </execution>                    <execution>                        <id>test-compile</id>                        <phase>test-compile</phase>                        <goals>                            <goal>test-compile</goal>                        </goals>                    </execution>                </executions>                <dependencies>                    <dependency>                        <groupId>org.jetbrains.kotlin</groupId>                        <artifactId>kotlin-maven-allopen</artifactId>                        <version>${kotlin.version}</version>                    </dependency>                </dependencies>            </plugin>        </plugins>    </build></project>

4.2 创建实体类

添加 entity package,然后创建 User 类,该类即为程序中用到的Entity类,Kotlin 中提供了 data class 的概念,这里可以使用它。在与 JPA 结合的时候需要添加一些注解,注释的代码是与 JPA 结合的例子。由于本文重点不是 JPA,所以就当做普通的Model 类使用即可。

package io.mshare.study.userservice.entityimport java.math.BigDecimal/* 这个是配合 jpa 使用的时候,data class 声明的方式 *//*@Entitydata class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0,                @Column val username: String = "",                @Column val name: String = "",                @Column val age: String ="",                @Column val balance: BigDecimal = BigDecimal.ZERO) */data class User(val id: Long = 0,                val username: String = "",                val name: String = "",                val age: Int =0,                val balance: BigDecimal = BigDecimal.ZERO)

4.3 创建控制类

在 Spring 开发的过程中,经常使用 Controller 表示对外提供接口的类,使用 Service 表示业务的处理,使用 DAO 表示数据访问层,使用 Entity 表示数据模型。由于本文是简单入门,没有必要都具备,所以只是谢了 Controller。添加 controller package,然后创建 UserController。

其中使用 @RestController 表示这个 Controller 被 Spring 管理,另外能够提供 Web 服务。方法 findById 使用 @GetMapping 注解,表示提供 Get 服务。其中配置 “/{id}”,表示路径中 id,会被映射成方法中 @PathVariable 的参数 id。关于 Spring MVC 的注解还有很多,有兴趣的可以看看文档。

package io.mshare.study.userservice.controllerimport io.mshare.study.userservice.entity.Userimport org.springframework.web.bind.annotation.GetMappingimport org.springframework.web.bind.annotation.PathVariableimport org.springframework.web.bind.annotation.RestControllerimport java.math.BigDecimal// 这里模拟只有一个用户 实际项目中应该去查找数据库val userMap = mapOf<Long, User>(1L to User(1, "account1", "张三", 20, BigDecimal(234)))@RestControllerclass UserController {    @GetMapping("/{id}")    fun findById(@PathVariable id: Long): User? {        val user = userMap[id]        return  user    }}

4.4 修改配置文件

修改工程 resource 目录下的 application.properties 为 application.yml。这里推荐使用 yml 配置工程,两者功能一样,只是在格式上有差别,当配置项层级多的时候,yml 会更加清晰。下面给出相同配置的两个版本。

本例子只需要配置服务端口和名称就好了。
application.properties

server.port=9000spring.application.name=user-service

application.yml

server:  port: 9000spring:  application:    name: user-service

4.5 启动服务

找到 UserServiceApplication.kt,然后执行 main 方法,这样我们额 user service 就启动起来了。

我们注意到 UserServiceApplication 上有注解 @SpringBootApplication, 这个注解标志着启动的类。

package io.mshare.study.userserviceimport org.springframework.boot.SpringApplicationimport org.springframework.boot.autoconfigure.SpringBootApplication@SpringBootApplicationclass UserServiceApplicationfun main(args: Array<String>) {    SpringApplication.run(UserServiceApplication::class.java, *args)}

控制台输出了启动中的日志,其中能够看到 Tomcat started on port(s): 9000 (http),没有报错,说明启动成功了。

4.6 测试

在浏览器中输入 http://localhost:9000/1, 输出如下,说明服务正常:

{  "id": 1,  "username": "account1",  "name": "张三",  "age": 20,  "balance": 234}

5 总结

本文只是 Spring Boot 的入门文章,文中涉及到配置都尽量简化,以求快速上手的目的。建议有兴趣的人认真看一下官方文档。此外文中使用的是 Kotlin,如果对 Kotlin 不熟悉,可以看看官方文档中文版入个门。

源码:http://download.csdn.net/download/mengxiangyue/10148662

原创粉丝点击