当前位置 博文首页 > 、唐城:“新时代农民工”,Spring Boot+Spring Cloud分布式微服

    、唐城:“新时代农民工”,Spring Boot+Spring Cloud分布式微服

    作者:[db:作者] 时间:2021-08-20 18:53

    目录

    #平台简介

    #系统模块

    #架构图

    #内置功能

    #在线体验

    #演示图

    #技术选型

    #准备工作

    #运行系统

    #必要配置

    #部署系统

    #常见问题

    #配置文件


    源码获取地址


    平台简介


    若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。

    • 采用前后端分离的模式,微服务版本前端(基于?RuoYi-Vue)。
    • 后端采用Spring Boot、Spring Cloud & Alibaba。
    • 注册中心、配置中心选型Nacos,权限认证使用Redis。
    • 流量控制框架选型Sentinel,分布式事务选型Seata。
    • 如需不分离应用,请移步?RuoYi,如需分离应用,请移步?RuoYi-Vue

    友情链接?若依/RuoYi-Cloud?Ant Design版本。

    系统模块


    com.ruoyi     
    ├── ruoyi-ui              // 前端框架 [80]
    ├── ruoyi-gateway         // 网关模块 [8080]
    ├── ruoyi-auth            // 认证中心 [9200]
    ├── ruoyi-api             // 接口模块
    │       └── ruoyi-api-system                          // 系统接口
    ├── ruoyi-common          // 通用模块
    │       └── ruoyi-common-core                         // 核心模块
    │       └── ruoyi-common-datascope                    // 权限范围
    │       └── ruoyi-common-datasource                   // 多数据源
    │       └── ruoyi-common-log                          // 日志记录
    │       └── ruoyi-common-redis                        // 缓存服务
    │       └── ruoyi-common-security                     // 安全模块
    │       └── ruoyi-common-swagger                      // 系统接口
    ├── ruoyi-modules         // 业务模块
    │       └── ruoyi-system                              // 系统模块 [9201]
    │       └── ruoyi-gen                                 // 代码生成 [9202]
    │       └── ruoyi-job                                 // 定时任务 [9203]
    │       └── ruoyi-file                                // 文件服务 [9300]
    ├── ruoyi-visual          // 图形化管理模块
    │       └── ruoyi-visual-monitor                      // 监控中心 [9100]
    ├──pom.xml                // 公共依赖

    架构图


    内置功能


    1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
    2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
    3. 岗位管理:配置系统用户所属担任职务。
    4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
    5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
    6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
    7. 参数管理:对系统动态配置常用参数。
    8. 通知公告:系统通知公告信息发布维护。
    9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
    10. 登录日志:系统登录日志记录查询包含登录异常。
    11. 在线用户:当前系统中活跃用户状态监控。
    12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
    13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
    14. 系统接口:根据业务代码自动生成相关的api接口文档。
    15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
    16. 在线构建器:拖动表单元素生成相应的HTML代码。
    17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。

    在线体验


    • admin/admin123
    • 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。

    演示地址:http://ruoyi.vip
    文档地址:http://doc.ruoyi.vip

    演示图



    ?

    技术选型


    1、系统环境

    • Java EE 8
    • Servlet 3.0
    • Apache Maven 3

    2、主框架

    • Spring Boot 2.2.x
    • Spring Framework 5.2.x
    • Apache Shiro 1.7

    3、持久层

    • Apache MyBatis 3.5.x
    • Hibernate Validation 6.0.x
    • Alibaba Druid 1.2.x

    4、视图层

    • Bootstrap 3.3.7
    • Thymeleaf 3.0.x

    准备工作


    JDK >= 1.8 (推荐1.8版本)
    Mysql >= 5.7.0 (推荐5.7版本)
    Maven >= 3.0

    运行系统


    1、前往Gitee下载页面(https://gitee.com/y_project/RuoYi?(opens new window))下载解压到工作目录
    2、导入到Eclipse,菜单?File?->?Import,然后选择?Maven?->?Existing Maven Projects,点击?Next> 按钮,选择工作目录,然后点击?Finish?按钮,即可成功导入。
    Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)
    3、创建数据库ry并导入数据脚本ry_2021xxxx.sqlquartz.sql
    4、打开项目运行com.ruoyi.RuoYiApplication.java,出现如下图表示启动成功。

    (????)ノ゙  若依启动成功   ?(′?`?)゙  
     .-------.       ____     __        
     |  _ _   \      \   \   /  /    
     | ( ' )  |       \  _. /  '       
     |(_ o _) /        _( )_ .'         
     | (_,_).' __  ___(_ o _)'          
     |  |\ \  |  ||   |(_,_)'         
     |  | \ `'   /|   `-'  /           
     |  |  \    /  \      /           
     ''-'   `'-'    `-..-'    
    

    5、打开浏览器,输入:(http://localhost:80?(opens new window)) (默认账户/密码?admin/admin123
    若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功

    建议使用Git克隆,因为克隆的方式可以和RuoYi随时保持更新同步。使用Git命令克隆

    git clone https://gitee.com/y_project/RuoYi.git
    

    #必要配置


    • 修改数据库连接,编辑resources目录下的application-druid.yml
    # 数据源配置
    spring:
        datasource:
            type: com.alibaba.druid.pool.DruidDataSource
            driverClassName: com.mysql.cj.jdbc.Driver
            druid:
                # 主库数据源
                master:
                    url: 数据库地址
                    username: 数据库账号
                    password: 数据库密码
    
    • 修改服务器配置,编辑resources目录下的application.yml
    # 开发环境配置
    server:
      # 服务器的HTTP端口,默认为80
      port: 端口
      servlet:
        # 应用的访问路径
        context-path: /应用路径
    

    #部署系统


    • 打包工程文件

    ruoyi项目的bin目录下执行package.bat打包Web工程,生成war/jar包文件。
    然后会在项目下生成target文件夹包含warjar

    提示

    多模块版本会生成在ruoyi/ruoyi-admin模块下target文件夹

    • 部署工程文件

    1、jar部署方式
    使用命令行执行:java –jar ruoyi.jar?或者执行脚本:ruoyi/bin/run.bat

    2、war部署方式
    ruoyi/pom.xml中的packaging修改为war,放入tomcat服务器webapps

       <packaging>war</packaging>
    

    提示

    多模块版本在ruoyi/ruoyi-admin模块下修改pom.xml

    • SpringBoot去除内嵌Tomcat(PS:此步骤不重要,因为不排除也能在容器中部署war
    <!-- 多模块排除内置tomcat -->
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    	<exclusions>
    		<exclusion>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-tomcat</artifactId>
    		</exclusion>
    	</exclusions>
    </dependency>
    		
    <!-- 单应用排除内置tomcat -->		
    <exclusions>
    	<exclusion>
    		<artifactId>spring-boot-starter-tomcat</artifactId>
    		<groupId>org.springframework.boot</groupId>
    	</exclusion>
    </exclusions>
    

    #常见问题


    1. 如果使用Mac需要修改application.yml文件路径profile
    2. 如果使用Linux?提示表不存在,设置大小写敏感配置在/etc/my.cnf添加lower_case_table_names=1,重启MYSQL服务
    3. 如果提示当前权限不足,无法写入文件请检查application.yml中的profile路径或logback.xml中的log.path路径是否有可读可写操作权限

    ?配置文件


    • 通用配置?application.yml
      # 项目相关配置
      ruoyi:
        # 名称
        name: RuoYi
        # 版本
        version: 4.6.0
        # 版权年份
        copyrightYear: 2021
        # 实例演示开关
        demoEnabled: true
        # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
        profile: D:/ruoyi/uploadPath
        # 获取ip地址开关
        addressEnabled: false
      
      # 开发环境配置
      server:
        # 服务器的HTTP端口,默认为80
        port: 80
        servlet:
          # 应用的访问路径
          context-path: /
        tomcat:
          # tomcat的URI编码
          uri-encoding: UTF-8
          # tomcat最大线程数,默认为200
          max-threads: 800
          # Tomcat启动初始化的线程数,默认值25
          min-spare-threads: 30
       
      # 日志配置
      logging:
        level:
          com.ruoyi: debug
          org.springframework: warn
      
      # 用户配置
      user:
        password:
          # 密码错误{maxRetryCount}次锁定10分钟
          maxRetryCount: 5
      
      # Spring配置
      spring:
        # 模板引擎
        thymeleaf:
          mode: HTML
          encoding: utf-8
          # 禁用缓存
          cache: false
        # 资源信息
        messages:
          # 国际化资源文件路径
          basename: static/i18n/messages
        jackson:
          time-zone: GMT+8
          date-format: yyyy-MM-dd HH:mm:ss
        profiles: 
          active: druid
        # 文件上传
        servlet:
           multipart:
             # 单个文件大小
             max-file-size:  10MB
             # 设置总上传的文件大小
             max-request-size:  20MB
        # 服务模块
        devtools:
          restart:
            # 热部署开关
            enabled: true
      
      # MyBatis
      mybatis:
          # 搜索指定包别名
          typeAliasesPackage: com.ruoyi.**.domain
          # 配置mapper的扫描,找到所有的mapper.xml映射文件
          mapperLocations: classpath*:mapper/**/*Mapper.xml
          # 加载全局的配置文件
          configLocation: classpath:mybatis/mybatis-config.xml
      
      # PageHelper分页插件
      pagehelper: 
        helperDialect: mysql
        reasonable: true
        supportMethodsArguments: true
        params: count=countSql 
      
      # Shiro
      shiro:
        user:
          # 登录地址
          loginUrl: /login
          # 权限认证失败地址
          unauthorizedUrl: /unauth
          # 首页地址
          indexUrl: /index
          # 验证码开关
          captchaEnabled: true
          # 验证码类型 math 数组计算 char 字符
          captchaType: math
        cookie:
          # 设置Cookie的域名 默认空,即当前访问的域名
          domain: 
          # 设置cookie的有效访问路径
          path: /
          # 设置HttpOnly属性
          httpOnly: true
          # 设置Cookie的过期时间,天为单位
          maxAge: 30
          # 设置密钥,务必保持唯一性(生成方式,直接拷贝到main运行即可)KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecretKey deskey = keygen.generateKey(); System.out.println(Base64.encodeToString(deskey.getEncoded()));
          cipherKey: zSyK5Kp6PZAAjlT+eeNMlg==
        session:
          # Session超时时间,-1代表永不过期(默认30分钟)
          expireTime: 30
          # 同步session到数据库的周期(默认1分钟)
          dbSyncPeriod: 1
          # 相隔多久检查一次session的有效性,默认就是10分钟
          validationInterval: 10
          # 同一个用户最大会话数,比如2的意思是同一个账号允许最多同时两个人登录(默认-1不限制)
          maxSession: -1
          # 踢出之前登录的/之后登录的用户,默认踢出之前登录的用户
          kickoutAfter: false
      
      # 防止XSS攻击
      xss: 
        # 过滤开关
        enabled: true
        # 排除链接(多个用逗号分隔)
        excludes: /system/notice/*
        # 匹配链接
        urlPatterns: /system/*,/monitor/*,/tool/*
      
      # Swagger配置
      swagger:
        # 是否开启swagger
        enabled: true
    • 数据源配置?application-druid.yml
      # 数据源配置
      spring:
          datasource:
              type: com.alibaba.druid.pool.DruidDataSource
              driverClassName: com.mysql.cj.jdbc.Driver
              druid:
                  # 主库数据源
                  master:
                      url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                      username: root
                      password: password
                  # 从库数据源
                  slave:
                      # 从数据源开关/默认关闭
                      enabled: false
                      url: 
                      username: 
                      password: 
                  # 初始连接数
                  initialSize: 5
                  # 最小连接池数量
                  minIdle: 10
                  # 最大连接池数量
                  maxActive: 20
                  # 配置获取连接等待超时的时间
                  maxWait: 60000
                  # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
                  timeBetweenEvictionRunsMillis: 60000
                  # 配置一个连接在池中最小生存的时间,单位是毫秒
                  minEvictableIdleTimeMillis: 300000
                  # 配置一个连接在池中最大生存的时间,单位是毫秒
                  maxEvictableIdleTimeMillis: 900000
                  # 配置检测连接是否有效
                  validationQuery: SELECT 1 FROM DUAL
                  testWhileIdle: true
                  testOnBorrow: false
                  testOnReturn: false
                  webStatFilter: 
                      enabled: true
                  statViewServlet:
                      enabled: true
                      # 设置白名单,不填则允许所有访问
                      allow:
                      url-pattern: /druid/*
                      # 控制台管理用户名和密码
                      login-username: 
                      login-password: 
                  filter:
                      stat:
                          enabled: true
                          # 慢SQL记录
                          log-slow-sql: true
                          slow-sql-millis: 1000
                          merge-sql: true
                      wall:
                          config:
                              multi-statement-allow: true
    • 代码生成配置?generator.yml
      # 代码生成
      gen: 
        # 作者
        author: ruoyi
        # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
        packageName: com.ruoyi.system
        # 自动去除表前缀,默认是false
        autoRemovePre: false
        # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
        tablePrefix: sys_

      源码获取地址:

      若依管理系统(基于SpringBoot的权限管理系统)

      Vue前端分离版(基于SpringBoot的权限管理系统)

      Cloud微服务版(基于SpringCloud的权限管理系统)

    ?五年从程序员到架构师!这是我见过史上最好的程序员职业规划

    (下一篇)?16 条 yyds 的代码规范

    40 个 SpringBoot 常用注解

    别慌,在Java面试的时候,面试官会这样问关于框架的问题?

    想要实时关注更多干货好文,扫描下图关注或微信搜索【万言尽书上】关注公众公众号:

    cs
    下一篇:没有了