首页 > 编程语言 >如何使用Java Spring Boot 创建一个微服务项目 二?

如何使用Java Spring Boot 创建一个微服务项目 二?

时间:2023-10-24 10:31:42浏览次数:61  
标签:Java BigDecimal toCurrency Boot fromCurrency Spring org public quantity

如何使用Java Spring Boot 创建一个微服务项目 二?

上一篇我们已经链接了 如何使用Java Spring Boot 创建一个微服务项目 一?这一篇我们接着实现第二部分

微服务2:货币兑换样本服务

如何使用Java Spring Boot 创建一个微服务项目 二?_spring

这也是一个maven项目

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 
							https://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.2.1.RELEASE</version>
		<relativePath/> 
	</parent>
	<groupId>com.gfg.microservices</groupId>
	<artifactId>currency-conversion-sample-service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>currency-conversion-servicce</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Hoxton.RC2</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

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

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</repository>
	</repositories>

</project>

主要重要的java文件

CurrencyConversionSampleServiceApplication.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class CurrencyConversionSampleServiceApplication {
	public static void main(String[] args) {
		SpringApplication.run(CurrencyConversionSampleServiceApplication.class, args);
	}
}

CurrencyConversionSampleBean.java

import java.math.BigDecimal;

public class CurrencyConversionSampleBean {
	// We need to set all the fields that is going to
	// received in response
	private Long id;
	private String from;
	private String to;
	private BigDecimal ConversionMultiple;
	private BigDecimal quantity;
	private BigDecimal totalCalculatedAmount;
	private int port;

	// default constructor
	public CurrencyConversionSampleBean() {}

	// creating constructor
	public CurrencyConversionSampleBean(
		Long id, String from, String to,
		BigDecimal conversionMultiple, BigDecimal quantity,
		BigDecimal totalCalculatedAmount, int port)
	{
		super();
		this.id = id;
		this.from = from;
		this.to = to;
		ConversionMultiple = conversionMultiple;
		this.quantity = quantity;
		this.totalCalculatedAmount = totalCalculatedAmount;
		this.port = port;
	}

	// creating setters and getters
	public Long getId() { return id; }

	public void setId(Long id) { this.id = id; }

	public String getFrom() { return from; }

	public void setFrom(String from) { this.from = from; }

	public String getTo() { return to; }

	public void setTo(String to) { this.to = to; }

	public BigDecimal getConversionMultiple()
	{
		return ConversionMultiple;
	}

	public void
	setConversionMultiple(BigDecimal conversionMultiple)
	{
		ConversionMultiple = conversionMultiple;
	}

	public BigDecimal getQuantity() { return quantity; }

	public void setQuantity(BigDecimal quantity)
	{
		this.quantity = quantity;
	}

	public BigDecimal getTotalCalculatedAmount()
	{
		return totalCalculatedAmount;
	}

	public void setTotalCalculatedAmount(
		BigDecimal totalCalculatedAmount)
	{
		this.totalCalculatedAmount = totalCalculatedAmount;
	}

	public int getPort() { return port; }

	public void setPort(int port) { this.port = port; }
}

CurrencyConversionSampleController.java

package com.gfg.microservices.currencyconversionservice;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class CurrencyConversionSampleController {
	@GetMapping(
		"/currency-converter-sample/fromCurrency/{fromCurrency}/toCurrency/{toCurrency}/quantity/{quantity}")
	
	public CurrencyConversionSampleBean
	convertCurrency(@PathVariable String fromCurrency,
					@PathVariable String toCurrency,
					@PathVariable BigDecimal quantity)
	{

		// setting variables to currency exchange service
		Map<String, String> uriVariables = new HashMap<>();
		// urlParams should match properly
		uriVariables.put("fromCurrency", fromCurrency);
		uriVariables.put("toCurrency", toCurrency);
		// 调用货币兑换示例服务
// http://localhost:8000/currency-exchange-sample/fromCurrency/{fromCurrency}/toCurrency/{toCurrency}
// 是从第一部分调用的服务。它的响应已经接收,并通过 CurrencyConversionSampleBean 我们获取了结果回来
		ResponseEntity<CurrencyConversionSampleBean>
			responseEntity
			= new RestTemplate().getForEntity(
				"http://localhost:8000/currency-exchange-sample/fromCurrency/{fromCurrency}/toCurrency/{toCurrency}",
				CurrencyConversionSampleBean.class,
				uriVariables);
		CurrencyConversionSampleBean response
			= responseEntity.getBody();
		// 创建一个新的响应Bean并获取响应,将其放入Bean中。因此,输出Bean应包含从响应接收到的所有字段。
		return new CurrencyConversionSampleBean(
			response.getId(), fromCurrency, toCurrency,
			response.getConversionMultiple(), quantity,
			quantity.multiply(
				response.getConversionMultiple()),
			response.getPort());
	}
}

也就是说这个项目是在端口8100上启动的。现在我们可以执行以下URLS

http://localhost:8100/currency-converter-sample/fromCurrency/USD/toCurrency/INR/quantity/1000

如何使用Java Spring Boot 创建一个微服务项目 二?_spring_02

 

当这个服务被调用时,它会依次调用。

假设:

currency-exchange-sample 正在端口 8000 中运行,并产生所需的响应

http://localhost:8000/currency-exchange-sample/fromCurrency/USD/toCurrency/INR

然后逻辑写成

ResponseEntity<CurrencyConversionSampleBean>respnotallow=new RestTemplate().getForEntity("http://localhost:8000/currency-exchange-sample/fromCurrency/{fromCurrency}/toCurrency/{toCurrency}",CurrencyConversionSampleBean.class, uriVariables);
        CurrencyConversionSampleBean response=responseEntity.getBody();  
        // 创建一个新的响应 bean 并获取响应并将其放入 Bean 中
        // 因此输出 bean 应该具有从响应接收到的所有字段
        返回新的CurrencyConversionSampleBean(response.getId(),fromCurrency,toCurrency,response.getConversionMultiple(),数量,quantity.multiply(response.getConversionMultiple()),response.getPort());

我们看到totalCalculatedAmount 为78 * 1000,即78000。我们从第一个URL 中获取“conversionMultiple”,并将其与此处的数量值相乘。非常理想的是,我们不需要将交换服务逻辑引入到该应用程序中,即第 1 部分项目可以分开,第 2 部分项目可以在此处调用第 1 部分 URL。因此微服务可以单独运行,其他服务可以使用它们。其余可检查的网址

例子1

http://localhost:8100/currency-converter-sample/fromCurrency/EUR/toCurrency/INR/quantity/5000

这会依次调用

http://localhost:8000/currency-exchange-sample/fromCurrency/EUR/toCurrency/INR

输出

如何使用Java Spring Boot 创建一个微服务项目 二?_spring_03

 

例子2

http://localhost:8100/currency-converter-sample/fromCurrency/AUD/toCurrency/INR/quantity/2000

这会依次调用

http://localhost:8000/currency-exchange-sample/fromCurrency/AUD/toCurrency/INR

输出

如何使用Java Spring Boot 创建一个微服务项目 二?_spring_04

 


标签:Java,BigDecimal,toCurrency,Boot,fromCurrency,Spring,org,public,quantity
From: https://blog.51cto.com/demo007x/8001232

相关文章

  • JavaScript 将对象转换为数组
    JavaScript将对象转换为数组在JavaScript中,你可以使用不同的方法将对象转换为数组,具体取决于对象的结构和你希望在数组中得到什么样的数据。以下是一些常见的方法:Object.keys()方法:这种方法将对象的键转换为数组。constobj={a:1,b:2,c:3};constarr=Object......
  • Java使用多线程异步执行批量更新操作方法
    一、核心技术Java提供了Executor框架来实现多线程任务的执行。我们可以通过创建ExecutorService对象来管理线程池,然后将任务提交给这个线程池执行。Executor框架的优点在于,它可以自动管理线程数量,以最大化利用CPU和内存资源。二、具体实现方法1、创建一个数据更新任务类,实现Run......
  • java.security.provider.getservice blocked
    bug:https://bugs.openjdk.org/browse/JDK-8206333堆栈:"Osp-Common-Business-Thread-572"Id=1723BLOCKEDatjava.security.Provider.getService(Provider.java:1035)atsun.security.jca.ProviderList.getService(ProviderList.java:332)atsun.security.jca......
  • 入门篇-其之六-Java运算符(中)
    祝所有程序员,1024节日快乐!!!......
  • 8、SpringMVC之RESTful案例
    阅读本文前,需要先阅读SpringMVC之RESTful概述8.1、前期工作8.1.1、创建实体类Employeepackageorg.rain.pojo;importjava.io.Serializable;/***@authorliaojy*@date2023/10/19-21:31*/publicclassEmployeeimplementsSerializable{privateInte......
  • 一天吃透Java并发面试八股文
    内容摘自我的学习网站:topjavaer.cn分享50道Java并发高频面试题。线程池线程池:一个管理线程的池子。为什么平时都是使用线程池创建线程,直接new一个线程不好吗?嗯,手动创建线程有两个缺点不受控风险频繁创建开销大为什么不受控?系统资源有限,每个人针对不同业务都可以手动......
  • 华为云服务器+java环境配置
     在华为云耀云服务器L实例(官网地址https://www.huaweicloud.com/product/hecs-light.html)中,我们有着部署管理系统的场景,本期教程中,我们需要开始部署管理系统,在前面教程中我们已经配置好了服务器的数据库以及基本的运行环境,现在我们需要开始部署java环境的配置,来为后期的项目......
  • How to fix EventSource onmessage not working in JavaScript All in One
    HowtofixEventSourceonmessagenotworkinginJavaScriptAllinOneSSE:Server-SentEvents/服务端推送error❌window.addEventListener(`load`,(e)=>{console.log(`pageloaded✅`);if(!!window.EventSource){constimg=document.querySelecto......
  • uboot配置usbhost及代码初步分析--Apple的学习笔记
    一,前言之前uboot没配置过usb,但是现在uboot基于DM模型基本和linuxdriver类似了。那么为了学习linuxdriver,我可以先学习uboot来做技术储备也是一样的。而且usb在uboot上应该也有用武之地,所以有必要进行刻意练习。二,分析1,之前对发现driver用了wraper的方式来打包进行绑定,我理解唯一......
  • Java的第一天
    一:各类的注释"//"双斜杠为当行注释"/*xxxxxxx*/"斜杠星星斜杠为多行注释"/***/"斜杠星星星斜杠为文档注释.二.八大基本数据类型1整数数字:byte<int <short< long    long后面要加上L或者l2小数:float<doublefloat后面要加上f或者F3字符:char......