SpringBoot微服务搭建 Nacos/GateWay 鱼无水

目录

一、创建Maven父子项目

二、搭建Gateway网关服务

三、按照项目架构搭建其他服务

 四、集成MyBatisPlus

五、代码生成器


一、创建Maven父子项目

父项目导入依赖

1.SpringBoot依赖

    <parent>
        <groupId> org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath />
    </parent>

2.管理SpringCloud、SpringCloud-alibaba依赖

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3.导入一些公共的依赖

    <dependencies>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--fastjson依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
        <!--springboot测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

二、搭建Gateway网关服务

1.导入依赖

        1.1 Nacos客户端依赖、配置依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        1.2 GateWay依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

 2.编写启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient // 开启Nacos客户端
public class UserApp {


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

 3.编写配置文件

        3.1 本地配置bootstrap.yml

server:
  port: 10010 # 1.端口号

spring:
  application:
    name: service-gateway #2.服务名称
  # 3.连接云端配置
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 #3.1连接nacos的地址
        namespace: "命名空间" #3.2命名空间
        prefix: application-gateway
        file-extension: yaml #3.4服务后缀
  profiles:
    active: dev #3.3服务环境

        3.2 云端配置 application-gateway-dev.yaml

        (注册到Nacos、路由配置、跨域配置、允许Bean覆盖)

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #1.注册到Nacos

#2.gateway路由
    gateway:
      httpclient:
        connect-timeout: 2000
        response-timeout: 6s # 超时时间
      discovery:
        locator:
          enabled: false #开放服务名访问方式
          lower-case-service-id: true #服务名小写
      routes: #路由配置
        - id : application-user #指定服务名
          uri: lb://service-user #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/amcc/user/**	#服务访问路径
          filters:
            - StripPrefix=2
        - id: application-xxx #指定服务名
          uri: lb://service-xxx #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/amcc/xxx/**    #服务访问路径
          filters:
            - StripPrefix=2

      #3.跨域配置
      globalcors: #跨域配置
        cors-configurations:
          '[/**]':
            allowedOrigins: "*"
            allow-credentials: true
            allowed-headers: "*"
            allowedMethods:
              - GET
              - POST
              - DELETE
              - PUT
              - PATCH
              - OPTIONS
              - HEAD
              - CONNECT
              - TRACE

  #4.允许Bean覆盖
  main:
    allow-bean-definition-overriding: true

三、按照项目架构搭建其他服务

1.创建Module,根据架构选择parent,创建服务

2.以Nacos作为注册与配置中心,导入依赖

        2.1 Nacos客户端依赖、配置依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        2.2 SpringBootWeb依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

3.编写启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient // 开启Nacos客户端
public class UserApp {


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

4.编写配置文件

        4.1 本地配置bootstrap.yml

server:
  port: 10030 # 1.端口号

spring:
  application:
    name: service-user #2.服务名称
  # 3.连接云端配置
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 #3.1连接nacos的地址
        namespace: "命名空间" #3.2命名空间
        prefix: application-user
        file-extension: yaml #3.4服务后缀
  profiles:
    active: dev #3.3服务环境

        4.2 云端配置application-user-dev.yaml

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #1.注册到Nacos
  #2.允许Bean覆盖  防止多个微服务用相同名称的Bean而报错
  main:
    allow-bean-definition-overriding: true

 四、集成MyBatisPlus

1.什么是MyBatisPlus?

是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生;主要的功能有代码生成器、不需要手动写简单的SQL直接调用数据库。

2.导入依赖

        2.1 mybatis-plus依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        2.2 连接mysql依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        2.3 druid连接池依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>

3.编写Mybatis-plus配置类

import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
// mapper接口扫描
@MapperScan("cn.yws.amcc.mapper")
// 开启事务管理,让我们在service中可以使用事务注解,springboot项目默认开启
@EnableTransactionManagement
public class MybatisPlusConfig {

    /**
     * 分页插件配置对象,Mybatis-plus需要此配置对象
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

4.云端配置application-user-dev.yaml

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #1.注册到Nacos
  # 3.连接数据库四大金刚,以及德鲁伊连接池配置
  datasource:
    url: jdbc:mysql:///"数据库名称"?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver #mybatis80加cj
    username: "用户名"
    password: "密码"
    type: com.alibaba.druid.pool.DruidDataSource

  #2.允许Bean覆盖
  main:
    allow-bean-definition-overriding: true
# 4.开启扫描
mybatis-plus:
  mapper-locations: classpath:cn/yws/amcc/mapper/*Mapper.xml
#  type-aliases-package: cn.yws.amcc.domain

五、代码生成器

1.导入依赖

    <dependencies>
        <!--mybatisplus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!--模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>

        <!--数据库连接依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

2.创建配置resource/mybatiesplus-config-system.properties

#代码输出基本路径,三层架构的代码
OutputDir=D:/software/idea-workspace/yws-amcc/amcc-service/amcc-service-common/src/main/java

#mapper.xml SQL映射文件目录
OutputDirXml=D:/software/idea-workspace/yws-amcc/amcc-service/amcc-service-common/src/main/resources

#domain的输出路径,我们放在公共模块下
OutputDirBase=D:/software/idea-workspace/yws-amcc/amcc-pojo/amcc-pojo-common/src/main/java

#设置作者
author=director

#自定义包路径:基础包的路径
parent=cn.yws.amcc

#数据库连接信息,80加一级cj
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///"数据库名称"?serverTimezone=UTC
jdbc.user="用户名"
jdbc.pwd="密码"

3.创建代码生成类

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.*;

/**
 * 生成代码的主类
 */
public class GenteratorCode {

    public static void main(String[] args) throws InterruptedException {
        //用来获取Mybatis-Plus.properties文件的配置信息
        ResourceBundle rb = ResourceBundle.getBundle("mybatiesplus-config-system"); //不要加后缀
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();

        gc.setOutputDir(rb.getString("OutputDir"));
        gc.setFileOverride(false);
        gc.setActiveRecord(true);// 开启 activeRecord 模式
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor(rb.getString("author"));
        mpg.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setTypeConvert(new MySqlTypeConvert());
        dsc.setDriverName(rb.getString("jdbc.driver"));
        dsc.setUsername(rb.getString("jdbc.user"));
        dsc.setPassword(rb.getString("jdbc.pwd"));
        dsc.setUrl(rb.getString("jdbc.url"));
        mpg.setDataSource(dsc);
        // 表策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(new String[] { "t_" });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略

        strategy.setInclude(new String[]{
                "t_config",
                "t_department",
                "t_employee",
                "t_operation_log",
                "t_systemdictionary",
                "t_systemdictionaryitem"
        }); // 需要生成的表

        mpg.setStrategy(strategy);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent(rb.getString("parent"));  //cn.itsource.ymcc
        pc.setController("web.controller"); //cn.itsource.ymcc.web.controller
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setEntity("domain");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-rb");
                this.setMap(map);
            }
        };

        List<FileOutConfig> focList = new ArrayList<FileOutConfig>();

        //controller的输出配置
        focList.add(new FileOutConfig("/templates/controller.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                //合并好的内容输出到哪儿?
                return rb.getString("OutputDir")+ "/cn/itsource/ymcc/web/controller/" + tableInfo.getEntityName() + "Controller.java";
            }
        });
        //query的输出配置
        focList.add(new FileOutConfig("/templates/query.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return rb.getString("OutputDirBase")+ "/cn/itsource/ymcc/query/" + tableInfo.getEntityName() + "Query.java";
            }
        });

        // 调整 domain 生成目录演示
        focList.add(new FileOutConfig("/templates/entity.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return rb.getString("OutputDirBase")+ "/cn/itsource/ymcc/domain/" + tableInfo.getEntityName() + ".java";
            }
        });

        // 调整 xml 生成目录演示
        focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return rb.getString("OutputDirXml")+ "/cn/itsource/ymcc/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
        TemplateConfig tc = new TemplateConfig();
        tc.setService("/templates/service.java.vm");
        tc.setServiceImpl("/templates/serviceImpl.java.vm");
        tc.setMapper("/templates/mapper.java.vm");
        tc.setEntity(null);
        tc.setController(null);
        tc.setXml(null);
        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
        mpg.setTemplate(tc);

        // 执行生成
        mpg.execute();
    }
}


版权声明:本文为m0_56950429原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。