Java项目:Java脚手架项目的模板服务和网关服务的实现(三)

文章目录

  • 前言
  • [一、 模板服务](#一、 模板服务)
    • [1.1 在父工程下创建 mstemplate 子工程](#1.1 在父工程下创建 mstemplate 子工程)
    • [1.2 在 mstemplate 工程下在创建子工程](#1.2 在 mstemplate 工程下在创建子工程)
      • [1.2.1 创建 mstemplate-api](#1.2.1 创建 mstemplate-api)
      • [1.2.1 创建 mstemplate-service](#1.2.1 创建 mstemplate-service)
    • [1.3 完成 mstemplate-service 的配置](#1.3 完成 mstemplate-service 的配置)
      • [1.3.1 引入依赖](#1.3.1 引入依赖)
      • [1.3.2 创建启动类](#1.3.2 创建启动类)
      • [1.3.3 创建启动配置](#1.3.3 创建启动配置)
      • [1.3.4 设置 nacos 命名空间](#1.3.4 设置 nacos 命名空间)
      • [1.3.5 设置环境变量并启动](#1.3.5 设置环境变量并启动)
  • 二、网关服务
    • [2.1 在父工程下创建 gateway 服务](#2.1 在父工程下创建 gateway 服务)
      • [2.1.1 在 gateway 服务下引入依赖](#2.1.1 在 gateway 服务下引入依赖)
      • [2.1.2 创建启动类](#2.1.2 创建启动类)
      • [2.1.3 创建 nacos 网关配置](#2.1.3 创建 nacos 网关配置)
      • [2.1.4 编写bootstrap.yml](#2.1.4 编写bootstrap.yml)
    • [2.2 启动 gateway 网关服务](#2.2 启动 gateway 网关服务)
  • END

鸡汤:
● 哪怕只是认真吃了一顿饭,对镜子里的自己笑了一下,都是温柔的胜利。
● 云朵会下雨,种子会休眠,你累了就歇歇------休息不是退步,是给心灵充电。

前言

前面我们封装了 common-core 这个基础通用包,common-core 中封装了我们项目中常用的工具类。我们的工具类都是在业务中发挥他们的作用,现在我们就实现模板服务和网关服务。

一、 模板服务

模板服务没有具体的业务,只是一个模版,给开发者提供一个模板,有利于统一代码规范。

也是用来测试我们添加的一些中间件和工具类的服务。

1.1 在父工程下创建 mstemplate 子工程

1.2 在 mstemplate 工程下在创建子工程

1.2.1 创建 mstemplate-api

这个 mstemplate-api 是提供给服务之间的远程调用,一些对外提供的VO、DTO啥的也可以放在这里。以后的 openfeign 的客户端也会放在这里,模板服务不存在远程调用,这里只是打个样,告诉开发者这里的代码模版。

1.2.1 创建 mstemplate-service

** 这个 mstemplate-service 就是提供具体服务的工程了,接下来就把他创建出来。**

1.3 完成 mstemplate-service 的配置

1.3.1 引入依赖

注:不要看错,容易将 mstemplate-service 和 mstemplate 的 pom 文件搞混

Pom.xml:

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.my</groupId>
        <artifactId>mstemplate</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.my</groupId>
    <artifactId>mstemplate-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- SpringCloud Alibaba Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- SpringCloud Alibaba Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

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

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

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

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

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

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>

        <dependency>
            <groupId>com.my</groupId>
            <artifactId>common-core</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

1.3.2 创建启动类

在 java 源文件目录下创建 com.my.mstemplateservice 包

在这个mstemplateservice 包下创建启动类 MstemplateServiceApplication 类

java 复制代码
package com.my.mstemplateservice;

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

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

1.3.3 创建启动配置

在 resources包下创建 bootstrap.yml

bootstrap.yml 的作用就是在服务启动之前将 nacos 里的配置拉下来进行配置

bootstrap.yml :

yaml 复制代码
server:
  port: 18085

spring:
  application:
    name: mstemplate
  profiles:
    active: ${RUN_ENV}
  cloud:
    nacos:
      discovery:
        username: nacos
        password: bite@123
        namespace: frameworkjava-${RUN_ENV}
        server-addr: ${NACOS_ADDR}
      config:
        username: nacos
        password: bite@123
        namespace: frameworkjava-${RUN_ENV}
        server-addr: ${NACOS_ADDR}
        file-extension: yaml
logging:
  pattern:
    console: '[%thread] %-5level %logger{36} - %msg%n'

注:
● 这里的{RUN_ENV} 和 {NACOS_ADDR} 在启动服务时候,会作为环境变量传入
● 想要使用 bootstrap.yml 需要引入依赖

1.3.4 设置 nacos 命名空间

咱们第一章应该已经将 nacos 啥的都已经部署好了。

访问 自己的云服务器外网ip/虚拟机内网ip:8848/nacos

账号:nacos

密码:bite@123 (前面设置的)


1.3.5 设置环境变量并启动

启动模板服务的启动类




启动服务

启动成功后访问 nacos 网页端显示为下图为 mstemplate 服务实现完毕

二、网关服务

2.1 在父工程下创建 gateway 服务

2.1.1 在 gateway 服务下引入依赖

pom.xml:

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.my</groupId>
        <artifactId>frameworkjava</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.my</groupId>
    <artifactId>gateway</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- SpringCloud Alibaba Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- SpringCloud Alibaba Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>com.my</groupId>
            <artifactId>common-core</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.45.0</version>

                <configuration>
                    <!--指定远程服务器的Docker服务访问地址-->
                    <dockerHost>${dockerhost.addr}</dockerHost>
                    <certPath>${project.basedir}/../deploy/test/app/config/cert</certPath>
                    <!--指定私有仓库的访问路径-->
                    <pushRegistry>${dockerregistry.url}</pushRegistry>
                    <!--指定库的用户名与密码-->
                    <authConfig>
                        <username>${dockerregistry.username}</username>
                        <password>${dockerregistry.password}</password>
                    </authConfig>
                    <containerNamePattern>${dockerregistry.namespace}-%n-%i</containerNamePattern>
                    <images>
                        <image>
                            <!--指定私有仓库访问地址/镜像名称-->
                            <name>${dockerregistry.namespace}/${project.build.finalName}:${project.version}</name>
                            <build>
                                <!--指定Dockerfile的路径-->
                                <dockerFileDir>${project.basedir}</dockerFileDir>
                            </build>
                            <run>
                                <ports>
                                    <port>18080:18080</port>
                                </ports>
                                <env>
                                    <NACOS_ADDR>${nacos.addr}</NACOS_ADDR>
                                    <RUN_ENV>${runenv}</RUN_ENV>
                                    <JAVA_OPTS>${java.opts.default}</JAVA_OPTS>
                                </env>
                            </run>
                        </image>
                    </images>
                </configuration>

                <executions>
                    <execution>
                        <id>build</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>stop</goal>
                            <goal>build</goal>
                            <goal>start</goal>
                            <!--推送到远端仓库 -->
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

2.1.2 创建启动类

在 java 目录下创建 com.my.gateway 包
创建 GatewayServiceApplication 启动类

java 复制代码
package com.my.gateway;

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

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

2.1.3 创建 nacos 网关配置

让网关服务在nacos中读取配置,首先 nacos 中要有配置


网关配置:

yaml 复制代码
spring:
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      routes:
        # 用户端服务
        - id: bite-mstemplate
          uri: lb://mstemplate
          predicates:
            - Path=/mstemplate/**
          filters:
            - StripPrefix=1
        # 门户服务
        - id: bite-portal
          uri: lb://bite-portal
          predicates:
            - Path=/portal/**
          filters:
            - StripPrefix=1
        # 鉴权模块
        - id: bite-admin
          uri: lb://bite-admin
          predicates:
            - Path=/admin/**
          filters:
            - StripPrefix=1
        # 文件
        - id: bite-file
          uri: lb://bite-file
          predicates:
            - Path=/file/**
          filters:
            - StripPrefix=1
          metadata:
            response-timeout: 300000
            connect-timeout: 300000

# 安全配置
security:
  # 不校验白名单
  ignore:
    whites:
      - /admin/logout
      - /admin/register
      - /admin/codeLogin
      - /**/login/**
      - /**/send_code/**
      - /**/nologin/**
      - /**/test/**

2.1.4 编写bootstrap.yml

bootstrap.yml:

yaml 复制代码
server:
  port: 18080

spring:
  application:
    name: gateway
  profiles:
    active: ${RUN_ENV}
  main:
    web-application-type: reactive
#    allow-bean-definition-overriding: true

  cloud:
    nacos:
      discovery:
        username: nacos
        password: bite@123
        namespace: frameworkjava-${RUN_ENV}
        server-addr: ${NACOS_ADDR}
      config:
        username: nacos
        password: bite@123
        namespace: frameworkjava-${RUN_ENV}
        server-addr: ${NACOS_ADDR}
        file-extension: yaml

logging:
  pattern:
    console: '[%thread] %-5level %logger{36} - %msg%n'

2.2 启动 gateway 网关服务

注:
不要忘记加环境变量不然找不到nacos的配置,服务会启动失败

打开 nacos 查看结果

gateway 服务实现成功


END

写给自己的学习笔记

相关推荐
heimeiyingwang2 小时前
向量数据库Milvus的安装部署指南
java·数据库·架构·database
马尔代夫哈哈哈2 小时前
SpringBoot 统一功能处理
java·前端·spring boot
白太岁2 小时前
操作系统开发:(8) 任务/线程的创建、调度与管理(实现 tasks.h 与 tasks.c)
c语言·开发语言·bash
BD_Marathon2 小时前
原型模式——Spring源码分析
java·spring·原型模式
Zachery Pole2 小时前
JAVA_06_方法
java·开发语言
寒秋花开曾相惜2 小时前
(学习笔记)2.1 信息存储(2.1.1 十六进制表示法)
笔记·学习
LSL666_2 小时前
10 集群
java·开发语言·数据库·redis·集群
好家伙VCC2 小时前
# 发散创新:基于Python的轻量级测试框架设计与实践 在现代软件开发中,**自动化
java·开发语言·python·自动化
李老师的Java笔记2 小时前
深度解析 | SpringBoot源码解析系列(五):@ConfigurationProperties | 配置绑定核心原理+实战避坑
java·spring boot·后端