(编写不易,转载请注明: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隔离...
Spring Cloud和Spring Boot是两个非常重要的Java开发框架,它们在微服务架构中扮演着核心角色。Spring Boot简化了创建独立的、生产级别的基于Spring的应用程序的过程,而Spring Cloud则为开发者提供了快速构建分布式...
在实际项目中,SpringBoot用于快速构建单个服务,而SpringCloud则用于管理和协调这些服务,形成一个完整的微服务生态系统。通过视频学习教程,你可以逐步掌握如何创建、配置、测试和部署这些服务,从而构建出高效、...
Spring Boot作为Spring框架的一个子项目,旨在简化应用程序的创建和配置过程,而Spring Cloud则提供了全面的服务治理工具,使得在分布式系统中进行服务发现、负载均衡、配置管理和熔断等操作变得更加便捷。...
springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是, 跟...
整合这些技术,首先需要创建Spring Boot项目,然后引入Spring Cloud的相关依赖,包括Spring Cloud Netflix Eureka(服务发现)、Spring Cloud Config(配置中心)、Spring Cloud OpenFeign(服务调用)等。...
SpringCloud是基于SpringBoot实现的一系列微服务解决方案,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等)...
总之,Snowy-Cloud项目通过集成SpringCloud Alibaba与SpringBoot,构建了一个完善的微服务架构,实现了服务的注册与发现、流量控制、分布式事务、消息队列等功能,为企业级应用提供了高效、稳定和可扩展的运行环境。...
在这个例子中,我们看到一个基于Spring Boot 2.x、Spring Cloud、Spring Data JPA、Consul、Feign和Swagger构建的微服务系统。以下是这些技术在系统中的关键应用和知识点: 1. **Spring Boot 2.x**: 是一个快速开发...
在IT行业中,微服务架构已经成为了现代应用程序开发的主流趋势,SpringBoot框架则是实现这一架构的强大工具。本文将深入探讨如何使用SpringBoot构建和管理微服务,并基于提供的"microservices:使用SpringBoot玩...
在本项目中,我们将探讨如何使用SpringBoot和SpringCloud构建一个微服务架构的演示系统。SpringBoot以其便捷的启动和管理特性,简化了Java应用程序的开发过程,而SpringCloud则为构建分布式系统提供了全面的工具集。...
SpringBoot和SpringCloud是两个非常重要的Java开发框架,它们在微服务领域有着广泛的应用。SpringBoot简化了Spring应用的初始搭建以及开发过程,而SpringCloud则为构建分布式系统提供了工具集,包括服务发现、负载...
2. SpringBoot与SpringCloud的结合:SpringBoot简化了Spring应用的初始搭建和配置过程,而SpringCloud则是基于SpringBoot实现的一套微服务解决方案,两者结合可以快速构建微服务应用。 3. 创建并部署第一个Spring...
例如,首先使用SpringBoot创建微服务,然后通过Eureka实现服务的注册与发现,接着利用Zuul作为API网关,统一处理请求,同时配合Hystrix实现服务容错保护。配置中心Spring Cloud Config则用于集中管理和动态更新各个...
在《Spring Cloud与Docker微服务架构实战》中,你将学习如何使用Spring Boot创建微服务,并通过Spring Cloud进行服务治理。同时,你会了解到如何利用Docker构建和部署这些微服务,包括编写Dockerfile、使用Docker ...
Spring Boot简化了Spring应用程序的创建,而Spring Cloud则提供了微服务开发的一整套解决方案。本文将深入探讨Spring Boot 2.6、Spring Cloud 2021.1以及Spring Alibaba Cloud 2021.1的相关知识点,同时也会关注...
【标题】"Snowy-Cloud是小诺团队下基于SpringCloud Alibaba + SpringBoot+AntDes.zip" 提供的信息表明,这是一款由小诺团队开发的软件项目,它采用了微服务架构,具体技术栈包括SpringCloud Alibaba、SpringBoot以及...
总结来说,这个压缩包提供了一个基于Spring Boot和Spring Cloud构建的微服务架构实例,包含了一些关键的微服务组件、文档和可能的脚本配置,对于学习和实践微服务架构是一个很好的资源。通过理解每个组件的作用和...
标题中的“anan基于JDK11、Spring Boot 2.5.x、Spring Cloud 生态体系技术,采用微服务前后端”表明这是一个使用最新技术栈构建的微服务项目。在这个项目中,开发人员选择了Java 11(JDK11)作为编程语言,Spring ...