基于SpringBoot的微服务与“头文件”

来源:互联网 发布:项目经理考试软件app 编辑:程序博客网 时间:2024/06/18 04:08

有C编程经验的同学应该对头文件都很熟悉,Java中的package也起到了类似的功能。当系统被拆分为多个微服务时,我们需要将各服务共用的class,和interface抽出来组成一个jar包,这样既简化了微服务系统的开发,又有利于系统的扩展。

本文使用User微服务来进行示例说明,文中所使用的java版本为1.8.0_40,gradle版本为2.10

1.创建api.jar

api.jar即系统各微服务共用的jar包。
首先创建一个基于gradle的java工程,具体方法见《springboot+gradle 构建多模块项目》。
创建好的项目结构如下:
这里写图片描述

接下来修改根目录下的build.gradle,

buildscript {    repositories {        mavenLocal()        maven { url "http://maven.aliyun.com/nexus/content/groups/public" }        maven { url "http://repo.spring.io/snapshot" }        maven { url "http://repo.spring.io/milestone" }        jcenter()    }    dependencies {        classpath('com.github.jengelman.gradle.plugins:shadow:1.2.4')    }}apply plugin: 'idea'apply plugin: 'java'apply plugin: 'maven'apply plugin: 'com.github.johnrengelman.shadow'group = 'com.formularoom'archivesBaseName = 'api'version = '1.0.0'jar {    baseName = archivesBaseName}shadowJar {    baseName = archivesBaseName    classifier = null    version = version}// JVM 版本号要求sourceCompatibility = 1.8targetCompatibility = 1.8// java编译的时候缺省状态下会因为中文字符而失败[compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'ext {    lombokVer = '1.16.8'    libPath =  "file:" + new File(rootProject.rootDir, '../Libs').getAbsolutePath().toString()}repositories {    mavenLocal()    maven { url "http://maven.aliyun.com/nexus/content/groups/public" }    maven { url "http://nexus.mvnsearch.org/content/repositories/releases/" }    maven { url "http://nexus.mvnsearch.org/content/repositories/snapshots/" }    mavenCentral()    jcenter()    maven { url "http://repo.spring.io/snapshot" }    maven { url "http://repo.spring.io/milestone" }    maven { url 'http://maven.springframework.org/release' }    maven { url 'http://maven.springframework.org/milestone' }}dependencies {    compile(        "org.projectlombok:lombok:$lombokVer"    )    testCompile(    )}jar {    manifest {        attributes("Implementation-Title": "Gradle")    }}allprojects {    gradle.projectsEvaluated {        tasks.withType(JavaCompile) {            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"        }    }}uploadShadow {    repositories.mavenDeployer {        repository(url: libPath)    }}

以上配置中,第一个需要注意的是,引入了maven plugin,它可以给api.jar添加group和version信息,并按照中央仓库中对jar包的要求,给api.jar添加上描述信息,便于其他微服务引用。另外maven plugin提供了将jar包上传到中央仓库的task,通过它,我们可以将api.jar上传到指定的目录,如上述配置中的libPath ,就是作为中央仓库使用的目录,它与其他服务的目录关系如下图所示。
这里写图片描述

第二个需要注意的是,引入了shadow plugin,它主要是将jar包的依赖一起打包,生成一个uber-jar。uploadShadow是此plugin提供的方法,用来将jar提交到中央仓库。

2.添加user service的信息到api.jar

添加User.java,示例代码如下:

package com.formularoom.user;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;@NoArgsConstructor@Datapublic class User implements Serializable {    private long id;    private String userName;    private String email;    private String password;    private long created_at;    private long updated_at;}

@NoArgsConstructor和@Data是lombok提供的注解,可以帮我们生成get/set函数。

添加UserService.java

package com.formularoom.user;import java.util.List;public interface UserService {    long count();    String createUser(User user);    String editUser(User user);    String deleteUser(long userId);    String resetPassword(long userId, String password);    List<Long> getUserIdLst();    List<User> getUserLst();    User getUserById(long id);}

添加完代码后,可使用intelliJ idea中所提供的gradle panel完成编译,打包,提交的动作,如下图所示,
这里写图片描述

上传完成后,Libs目录的结构如下:
这里写图片描述

至此,api.jar已完成,至于再其他项目中如何使用,会在下一篇博客中进行示例讲解。

完整的示例代码,可从此处 获取。

交流群号,255489119。


0 0
原创粉丝点击