SpringCloud環(huán)境搭建過(guò)程之Rest使用小結(jié)
今天來(lái)到SpringCloud的學(xué)習(xí),我們從spring boot微服務(wù)階段,學(xué)習(xí)到了用springboot去創(chuàng)建很多的微服務(wù),但是這么多微服務(wù)我們?nèi)绻ス芾?,以及相互之間的聯(lián)系呢?
而到了我們學(xué)習(xí)springcloud階段,其實(shí)相對(duì)而言是變簡(jiǎn)單的,不需要寫(xiě)很多代碼以及什么操作,主要就是接收思想,了解其中的機(jī)制,而springCloud項(xiàng)目基于springboot項(xiàng)目,只需要幾行簡(jiǎn)單的配置即可開(kāi)始使用;
那來(lái)到了我們最熟悉的官網(wǎng):https://spring.io/
進(jìn)入spring cloud的學(xué)習(xí),可以去讀讀這里的話,我讀懂了,不告訴你
從springcloud的學(xué)習(xí),我們可以看這張圖,我們學(xué)習(xí)這里面幾個(gè)部分
Rest環(huán)境搭建
環(huán)境說(shuō)明:jdk1.8,idea2019,maven3.6.X,springcloud最新版2021.0.3,mybatis-plus
我們首先搭建一個(gè)父工程項(xiàng)目,創(chuàng)建一個(gè)空的普通的maven項(xiàng)目,我們直接把src目錄刪除掉,pom文件寫(xiě)下面的使用父工程管理依賴,這里都是與文章日期最新依賴。
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombok.version>1.18.24</lombok.version> <springcloud-version>2021.0.3</springcloud-version> </properties> <dependencyManagement> <dependencies> <dependency> <!--springcloud依賴--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${springcloud-version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- springboot依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.0</version> <type>pom</type> <scope>import</scope> </dependency> <!--mysql驅(qū)動(dòng)--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!--日志測(cè)試--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <!--父工程的項(xiàng)目名稱--> <finalName>springcloud</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <!--以$開(kāi)頭結(jié)尾 符合在src/main/resources路徑下面訪問(wèn)到 主要是yml文件或者properties文件--> <delimiters> <delimit>$</delimit> </delimiters> </configuration> </plugin> </plugins> </build>
有了父工程項(xiàng)目,我們?cè)贉?zhǔn)備一個(gè)數(shù)據(jù)庫(kù)環(huán)境,寫(xiě)一個(gè)api類,這里我們新建一個(gè)簡(jiǎn)單的賬戶表,往里面插入幾條簡(jiǎn)單的數(shù)據(jù)
DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `account_id` int(11) NOT NULL, `account_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `account_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, PRIMARY KEY (`account_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of account -- ---------------------------- INSERT INTO `account` VALUES ('1', 'zhangsan', '333'); INSERT INTO `account` VALUES ('2', 'lisi', '444'); INSERT INTO `account` VALUES ('3', 'wangwu', '555'); INSERT INTO `account` VALUES ('4', 'zhangliu', '666'); INSERT INTO `account` VALUES ('5', 'qiqi', '777'); INSERT INTO `account` VALUES ('6', 'baba', '888');
新建一個(gè)maven普通項(xiàng)目起名叫springcloud-api,里面呢,放一個(gè)這樣的實(shí)體類,與表的關(guān)系對(duì)應(yīng)起來(lái)的一個(gè)簡(jiǎn)單對(duì)象,使用了lombok,這里大家可以自行去了解
1、導(dǎo)入依賴
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
我們可以看到這里如果正確會(huì)有一個(gè)小圓圈,如果你這里沒(méi)有,那就要檢查下父工程依賴了
2、編寫(xiě)配置,這里沒(méi)有什么配置,所以就是濾過(guò)
3、編寫(xiě)對(duì)應(yīng)代碼
provider-服務(wù)端提供者
再新建一個(gè)maven普通項(xiàng)目模塊,我們做服務(wù)的提供者
1、導(dǎo)入依賴
<dependencies> <dependency> <groupId>com.xuexi</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
2、編寫(xiě)配置
新建一個(gè)application.yml文件,內(nèi)容如下:
server: port: 8001 spring: application: name: springcloud-provider-account datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/lianxi?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8 username: root password: type: com.alibaba.druid.pool.DruidDataSource #使用阿里的數(shù)據(jù)源 # mybatis-plus配置日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl type-aliases-package: com.xuexi.pojo mapper-locations: classpath:mapper/*.xml global-config: db-config: table-underline: true #實(shí)體類駝峰轉(zhuǎn)下劃線,默認(rèn)就是
3、編寫(xiě)代碼,服務(wù)提供者我們只需要編寫(xiě)dao層和service層,這里使用了mybaits-plus所以比較簡(jiǎn)單,直接給大家截圖
dao層
service層
這里我們可以編寫(xiě)一個(gè)controller進(jìn)行下測(cè)試
@RestController public class AccountController { @Autowired AccountService accountService; @PostMapping("/account/add") public boolean addAccount(Account account){ return accountService.save(account); } @GetMapping("/account/get/{id}") public Account get(@PathVariable("id") long id){ return accountService.getById(id); } @GetMapping("/account/list") public List<Account> getAll(){ return accountService.list(null); } }
測(cè)試成功
consumer-消費(fèi)者
同樣的我們?cè)俳ㄒ粋€(gè)普通的maven子工程項(xiàng)目,我們進(jìn)行服務(wù)的消費(fèi)
1、導(dǎo)入依賴
<dependencies> <dependency> <groupId>com.xuexi</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
2、編寫(xiě)配置
新建一個(gè)application.yml
server: port: 80
3、編寫(xiě)代碼
代碼編寫(xiě)前,我們認(rèn)識(shí)一個(gè)東西,就是我們的標(biāo)題,REST這個(gè)東西,這里我覺(jué)得你學(xué)到這里應(yīng)該很容易理解,所以我覺(jué)得還是先上代碼吧
首先編寫(xiě)一個(gè)config配置類,我們把RestTemplate這個(gè)對(duì)象接管到spring容器中
@Configuration public class BeanConfig { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
接著編寫(xiě)我們的消費(fèi)代碼,ConsumerController
@RestController public class ConsumerController { private static final String REST_URL_PREFIX = "http://localhost:8001"; @Autowired RestTemplate restTemplate; @PostMapping("/cousumer/add") public boolean addAccount(Account account) { return restTemplate.postForObject(REST_URL_PREFIX+"/account/add",account,boolean.class); } @GetMapping("/cousumer/get/{id}") public Account get(@PathVariable("id") long id) { return restTemplate.getForObject(REST_URL_PREFIX+"/account/get/"+id,Account.class); } @GetMapping("/cousumer/list") public List<Account> getAll() { return restTemplate.getForObject(REST_URL_PREFIX+"/account/list",List.class); } }
上面我都沒(méi)有給大家說(shuō)編寫(xiě)springboot啟動(dòng)類,別到這里還沒(méi)啟動(dòng)呀,每一個(gè)項(xiàng)目下面,編寫(xiě)一個(gè)這樣的啟動(dòng)類
@SpringBootApplication public class Consumer_80 { public static void main(String[] args) { SpringApplication.run(Consumer_80.class,args); } }
我們啟動(dòng)下消費(fèi)方,看下是否可以遠(yuǎn)程調(diào)用服務(wù)方服務(wù),測(cè)試成功,遠(yuǎn)程調(diào)用了我們的服務(wù)消費(fèi)掉
其實(shí)我們都學(xué)過(guò)網(wǎng)絡(luò)請(qǐng)求,RestTemplate其實(shí)就是封裝好的一個(gè)請(qǐng)求對(duì)象,然后可以通過(guò)get|post|delete|put請(qǐng)求,里面也沒(méi)有多少方法,點(diǎn)以下就都出來(lái)了,這么簡(jiǎn)單,很容易看懂并學(xué)會(huì)吧!
其實(shí)就像前后段分離,發(fā)送異步請(qǐng)求,通過(guò)不斷地請(qǐng)求服務(wù),然后去實(shí)現(xiàn)功能,一種直連的方式,對(duì)地址和端口請(qǐng)求服務(wù)
但是我們可以發(fā)現(xiàn),這樣是有缺點(diǎn)的,比如provider宕機(jī)了,consumer請(qǐng)求是請(qǐng)求不到了的,而且也不能做一些檢測(cè),負(fù)載均衡,輪詢等方式;那我們接著學(xué)習(xí)再加一層
下一篇我們嘗試下使用Eureka注冊(cè)中心,持續(xù)更新中·····
到此這篇關(guān)于SpringCloud環(huán)境搭建 --- Rest使用的文章就介紹到這了,更多相關(guān)SpringCloud Rest使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JDK自帶的序列化方式優(yōu)缺點(diǎn)及實(shí)現(xiàn)原理面試精講
這篇文章主要為大家介紹了JDK自帶的序列化方式優(yōu)缺點(diǎn)及實(shí)現(xiàn)原理面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10詳解SpringBoot中的index首頁(yè)的訪問(wèn)、自定義Favicon圖標(biāo)
這篇文章主要介紹了SpringBoot中的index首頁(yè)的訪問(wèn)、自定義Favicon圖標(biāo),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08SparkStreaming整合Kafka過(guò)程詳解
這篇文章主要介紹了SparkStreaming整合Kafka過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01Spring?boot?整合Logback過(guò)程示例解析
這篇文章主要為大家介紹了Spring?boot?整合Logback的過(guò)程及示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02java項(xiàng)目jar包與jdk的版本不兼容的問(wèn)題解決
這篇文章主要介紹了java項(xiàng)目jar包與jdk的版本不兼容的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10mybatis分頁(yè)效果實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了mybatis分頁(yè)效果的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12