摘要:
面对大中型公司的项目;还有很多初级到中级不等的程序员是没有接触过的;因为目前外面(比如上海、深圳、广州…)的大中型公司的面试是很有难度的;一般也只会看你做过的项目为基础;现在又比较流行微服务架构开发;普通程序员的进阶是一定通过微服务学习的;更何况这也是目前外面企业的最基本的要求。所谓面试造飞机;工作拧螺丝。难就难在要知道如何去造。目前最流行的也就两大微服务架构----springcloud、dubbo;可能还要很多程序员是没有听过dubbo;我也只是稍微对有些认识;但是目前还有很多公司使用它;这就是我为何说的原因。没办法啊;所以咋们需要学习这两套架构;我这里只是从最最基础教学springcloud;因为我觉得两样东西都是搞微服务的;再怎么说;学了一样再去学另一样;我觉得那也学的很快。因为我是从最基础打过来的人;吃了不少的坑;我想今天站在咋们最初级程序员角度上去讨论这个springcloud;每个细节;每个步骤;每步代码;我想把自己所理解的那份在这里呈现给大家;想要帮助更多IT行业的伙伴。
一、前提需求:
每一个所集成的框架都是解决一系列问题;实则就是达到使得开发起来更加简单,所以我觉得世界真正还是掌握在“懒人”手里;对于javaweb框架;从学校里最基础jsp -> servlet -> struts2 -> springmvc -> springboot 从不认识到熟悉;社会在进步;我们也不能够原地踏步;我相信还是有很多目前能够单独完成一个完整的后台系统的同学;而现在的springcloud微服务又是在springboot的建立之上使用的;它不是解决项目内的一系列问题;比如springboot框架它是解决了当前项目的配置文件复杂的问题啊;maven的出现是不是解决项目jar导包的等问题;它们都是直接为项目提供便利的;而我们的springcloud它没有为项目直接带来便利;那首先还得解释下什么是微服务: 它的核心就是将传统的一站式应用(就是一次可以达成war包的项目);根据业务拆分成一个一个的服务;彻底去耦合;每个服务提供单个业务功能;也就是一个服务做一件事;而springcloud架构就是这样一个开发模式。所以咋们前提是需要懂得springboot框架。因为这个是建立在单个独立的系统之上(也就是单个微服务);既然是单独一个系统;那么它也就可以拥有自己的数据库。下图一目了然:
如果有需要可以看这篇文章:微服务的简介。
所以需要开发中对springboot有一定的了解,如果不了解的话可以看这篇文章:2小时学会springboot。
二、创建父工程
下面呢;我就以Dept部门模块做一个微服务通用案例。Consumer消费者(Client)通过REST调用Provider提供者(Service)提供的服务。为什么创建父工程;既然是写微服务;是不是就得创建多个Moudle子模块啊;如果多个子模块有加载同一个jar包的话;是不是看起来显得很复杂;我将这些共同所要依赖的jar;全部放进父工程;将来只需要引用父工程的坐标是不是就行了;而且我必须还得保证所有的子模块所依赖的jar版本必须是相同的啊;不然版本不一是不是也会出现问题。所以我此时建立父工程:
File -> Project -> Maven 创建一个Maven工程;名称叫做springcloud_parent;
对于一个空项目来说我的思维习惯是先配置后打代码;这种总习惯我觉得对于大家来说也挺好的;清楚什么东西做什么事情;那我们就先从pom文件开始;看看咋们微服务的子模块会有哪些需要用到共同的jar包:
<packaging>pom</packaging> <!--pom 项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的-->
<!--版本参数-->
<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.16.18</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springboot的导入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--mybatis和springboot的整合包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--日志-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<!--junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
解释dependencyManagement参数属性的作用:管理jar;使得子模块引入jar的版本统一,它并不可以将jar全部导进子模块中。
以上所导入的包;都是子模块共同需要的到的。
总体概述: 我相信只要你看了这篇文章;或多或少对微服务也有那么点了解;不就是一个大项目拆分麻;虽然咋们还不知道如何动手;但是这个方向还是要有的不;那么接下来;咋们就得拿起键盘往死里干它了。