(编写不易,转载请注明:http://shihlei.iteye.com/blog/2398709)
一 概述 :
基于sring boot 创建 简单的微服务。
spring boot 版本:1.5.7.RELEASE。
二 项目组成
父项目:x.demo.springcloud
module:
1)spring-cloud-microservice:微服务项目,实现获取当前时间服务
2)spring-cloud-webfront:前端项目,根据业务调用各种微服务,这里只是获取时间。
三 Idea 创建 Spring boot工程向导使用
(一)创建父工程:
1) file- > new - > project :
2) 设置 group , artifact 等:我创建父工程,所以Type 选择 Maven Pom
3)依赖选择:暂时不需要依赖啥,统一依赖spring-boot :1.5.8
4)下一步,项目创建完成了,生成的pom 集成了spring-boot的父pom,注意,这里的packaging 我手动改成了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"> <modelVersion>4.0.0</modelVersion> <groupId>x.demo.springcloud</groupId> <artifactId>spring-cloud-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-cloud-demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
(二)创建子工程:
1)file -> new -> module
2) 指定group ,artifact:
3) 指定下module的存放位置
4)默认生成spring boot , maven约定的项目结构:其中pom我改为集成我的父pom
<parent> <groupId>x.demo.springcloud</groupId> <artifactId>spring-cloud</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent>
(三)项目结构
注:方框圈起来的暂时没用,都删掉了
四 微服务demo 开发
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"> <modelVersion>4.0.0</modelVersion> <artifactId>spring-cloud-microservice</artifactId> <packaging>jar</packaging> <name>spring-cloud-microservice</name> <description>Demo project for Spring Boot</description> <parent> <groupId>x.demo.springcloud</groupId> <artifactId>spring-cloud</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <dependencies> <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> <scope>test</scope> </dependency> <!-- utils --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
(一)spring-cloud-microservice:时间微服务实现
server: port: 10001
package x.demo.springcloud.microservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringCloudServiceApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudServiceApplication.class, args); } }
package x.demo.springcloud.microservice.controller; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * rest服务 */ @RestController @RequestMapping("/time/v1") public class RemoteTimeV1Controller { private static final DateTimeFormatter DEFALUT_FORMATER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); /** * 获取时间服务 * * @param format 自定义格式 * @return 时间 */ @GetMapping("/now") public ProtocolResult<String> now(@RequestParam(name = "format", required = false) String format) { String time; try { if (StringUtils.isEmpty(format)) { time = LocalDateTime.now().format(DEFALUT_FORMATER); } else { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); time = LocalDateTime.now().format(dateTimeFormatter); } return new ProtocolResult<>(0, "success", time); } catch (Exception e) { return new ProtocolResult<>(-1, e.getMessage()); } } }
package x.demo.springcloud.microservice.controller; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class ProtocolResult<T> { //0 成功,非0 失败 private int code; //响应提示信息 private String message; //响应实体 private T body; public ProtocolResult(int code, String message) { this.code = code; this.message = message; } }
package x.demo.springcloud.microservice.controller; import static org.assertj.core.api.Assertions.assertThat; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @Slf4j public class RemoteTimeV1ControllerIT { @Resource private TestRestTemplate restTemplate; @Test public void testNowNoFormat() throws Exception { ProtocolResult<String> result = restTemplate.getForObject("/time/v1/now", ProtocolResult.class); assertThat(result.getCode()).isEqualTo(0); log.info("result : " + result); } @Test public void testNowNoFormatYYYY() throws Exception { ProtocolResult<String> result = restTemplate.getForObject("/time/v1/now?format=yyyy", ProtocolResult.class); assertThat(result.getCode()).isEqualTo(0); log.info("result : " + result); } }
(二)spring-cloud-webfront:一般前端业务层组装各个我服务,进行使用,这里做个简单的调用时间服务的客户端
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"> <modelVersion>4.0.0</modelVersion> <groupId>x.demo.springcloud</groupId> <artifactId>spring-cloud-webfront</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-cloud-webfront</name> <description>Demo project for Spring Boot</description> <parent> <groupId>x.demo.springcloud</groupId> <artifactId>spring-cloud</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <dependencies> <!-- test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- spring --> <!-- spring boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- utils --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
server: port: 20001 # 自定义配置 timeMisroService: v1: uri: http://localhost:10001/time/v1
package x.demo.springcloud.webfront; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringCloudWebfrontApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudWebfrontApplication.class, args); } }
package x.demo.springcloud.webfront.web; import javax.annotation.Resource; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import x.demo.springcloud.webfront.service.TimeService; @RestController @RequestMapping("/time") public class TimeController { @Resource(name = "timeV1MicorServiceImpl") private TimeService timeService; @GetMapping("/now") public String now() { return timeService.now(); } }
package x.demo.springcloud.webfront.service; public interface TimeService { /** * 获取当前时间 * @return 当前时间,格式:yyyy-MM-dd HH:mm:ss */ String now(); }
package x.demo.springcloud.webfront.service.impl; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import x.demo.springcloud.webfront.service.TimeService; @Service public class TimeV1MicroServiceImpl implements TimeService { //时间格式 private static final String time_format = "yyyy-MM-dd HH:mm:ss"; @Value("${timeMisroService.v1.uri}") private String timeMicroServiceV1Uri; @Resource private RestTemplate restTemplate; /** * 获取当前时间 * * @return 当前时间,格式:yyyy-MM-dd HH:mm:ss */ @Override public String now() { ProtocolResult<String> result = restTemplate.getForObject(timeMicroServiceV1Uri + "/now", ProtocolResult.class); return result.getBody(); } }
package x.demo.springcloud.webfront.conf; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class SpringConfiguration { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } }
五 总结
spring boot 基于约定,免去了大部分的配置,比如spring mvc ,rest json序列化等
相关推荐
lamp-cloud 基于Jdk11 + SpringCloud + SpringBoot 开发的微服务中后台快速开发平台,专注于多租户(SaaS架构)解决方案,亦可作为普通项目(非SaaS架构)的基础开发框架使用,目前已实现插拔式数据库隔离、SCHEMA隔离...
springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是, 跟...
通过一个使用Spring、Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统。 具体请看附件文件中的:readme.txt 和 [译]Spring构建微服务.png 访问地址:http://localhost:1111/ 运行顺序:...
通过整合SpringMVC+SpringBoot+Mybatis构建一个可用的基于SpringCloud的微服务工程将上述技术组件逐步落地,让大家看得懂做得出学得会。 00、硅谷学习_SpringBoot_源码、课件 01.硅谷学习_SpringCloud_前提概述 ...
该项目的使用方向简单,如果没有个性化定制需要,只需要按如下操作就能马上启动一个Isona来对您使用Spring Cloud构建的微服务系统实现管理。 - 第一步:创建一个基础的Spring Boot应用 - 第二步:`pom.xml`中引入...
介绍Spring Cloud Stream与RabbitMQ集成的代码示例。Spring Cloud Stream是一个建立在Spring Boot和Spring Integration之上的框架,有助于创建事件驱动或消息驱动的微服务。
SpringBoot:旨在简化创建产品级的Spring应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和springcloud联合部署。SpringFramework:即通常所说的spring框架,是一个开源的Java/...
很不错的学习笔记,个人备用。Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。
断路器示意图 SpringCloud Netflix实现了断路器库的名字叫Hystrix. 在微服务架构下,通常会有多个层次的服务调用. 下面是微服架构下, 浏览器端通过API访问后台微服务的一个示意图: hystrix 1 一个微服务的超时...
SpringCloud与微服务 SpringCloud是一套完整的分布式微服务解决方案,基于SpringBoot框架。 2 创建父工程 开启idea注解支持(主要是为了兼容Lombok): 设置<packaging>pom : 意思是使用maven分模块管理,都会有一个...
前面2个资源是第一阶段和第二阶段的,这个是第三阶段,全部加起来一共是214课时,没有面试视频。只有源码和学习视频,谢谢
本项目是一个纯Java编写的的Project,整合了微服务架构的重要组件和深度学习的框架,提供给大家参考学习。 技术选型 Spring Boot 可以轻松创建Spring的应用程序 Spring Cloud Eureka 服务注册与发现组件(已闭源) ...
在基于Spring Boot、Spring Cloud 分布微服务开发过程中,根据实际项目环境,需要选择、集成符合项目需求的各种组件和积累各种解决方案。基于这样的背景下,我开源了本示例项目,方便大家快速上手Spring Boot、...
常见的后端技术栈包括负载均衡、微服务生态、数据库技术、Spring框架等。这些技术可以帮助后端开发者更好地处理请求、优化系统性能、确保数据的完整性和安全性。 此外,后端开发还涉及一些开发工具的使用,如用于...
idea创建springcloud父子工程,用于分布式架构的微服务前提框架,Maven分模块框架, 为后面学习的springcloud的相关内容进行铺垫
####带有eureka客户端和服务器的简单微服务###### ####用户springboot maven项目创建以下服务### 创建微服务eone客户端 创建两个微服务客户端 创建微服务-三个客户端 创建尤里卡发现服务器 创建spring-cloud-...
旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。 Spring Cloud 微服务工具包,为开发者提供了在分布式系统的配置管理、...
目录系列更换成阿里云仓库开通阿里云镜像服务创建仓库本地k8s切换成阿里云...容器化技术与微服务结合—结合springcloud微服务框架进行部署(含切换成阿里云docker仓库)(五) 更换成阿里云仓库 首先,k8s默认的是docke
创建一个APS.NETCore应用程序(2.0版本),然后Nuget安装程序包:在appsettings.json配置文件中,增加下面配置:这样我们启动APS.NETCore应用程序,就会将fortune-service服务注册到Eureka中了。EUREKA-C