项目实战 订阅
项目实战伴随全球金融危机的进一步加剧,我国就业保障体系的不完备性已经显露无疑,就业问题已经凸显成一个严峻的社会问题。近五年来,高校大学生数量激增。2005年全国大学生数量为280万人、06年338万人、07年495万人、08年532万人,2009年全国高校毕业生总人突破600万。金融风暴的影响、毕业生数量的激增、就业单位的标准不断提高,导致了每年有30%左右的大学生处于失业的尴尬境地。大学生的实战能力经不起企业的检验,与企业的用人标准严重脱轨是导致众多高校毕业生失业的重要原因。目前,大学生“回炉”已经成为一个不争的事实,越来越多的大学生选择了回炉深造再就业的曲线就业模式,为自己在竞争激烈的社会赢得一席之地。为了彻底解决就业问题,让毕业生与市场需求无缝对接,经过多年的市场调研,潜心研究、反复论证,依托新华集团雄厚的师资力量,21年的办学经验,为大学生量身定制的“心为”项目实战中心登陆中原大地。该中心采取全面企业化的项目实战模式,让学员全方位、多角度地感受企业环境,接受项目实战,掌握主动就业的制高点。 展开全文
项目实战伴随全球金融危机的进一步加剧,我国就业保障体系的不完备性已经显露无疑,就业问题已经凸显成一个严峻的社会问题。近五年来,高校大学生数量激增。2005年全国大学生数量为280万人、06年338万人、07年495万人、08年532万人,2009年全国高校毕业生总人突破600万。金融风暴的影响、毕业生数量的激增、就业单位的标准不断提高,导致了每年有30%左右的大学生处于失业的尴尬境地。大学生的实战能力经不起企业的检验,与企业的用人标准严重脱轨是导致众多高校毕业生失业的重要原因。目前,大学生“回炉”已经成为一个不争的事实,越来越多的大学生选择了回炉深造再就业的曲线就业模式,为自己在竞争激烈的社会赢得一席之地。为了彻底解决就业问题,让毕业生与市场需求无缝对接,经过多年的市场调研,潜心研究、反复论证,依托新华集团雄厚的师资力量,21年的办学经验,为大学生量身定制的“心为”项目实战中心登陆中原大地。该中心采取全面企业化的项目实战模式,让学员全方位、多角度地感受企业环境,接受项目实战,掌握主动就业的制高点。
信息
原    因
全球金融危机
类    型
就业问题
中文名
项目实战
目    的
就业保障体系完善
面向对象技术分析方法
详细信息项目实战伴随全球金融危机的进一步加剧,我国就业保障体系的不完备性已经显露无疑,就业问题已经凸显成一个严峻的社会问题。近五年来,高校大学生数量激增。2005年全国大学生数量为280万人、06年338万人、07年495万人、08年532万人,2009年全国高校毕业生总人突破600万。金融风暴的影响、毕业生数量的激增、就业单位的标准不断提高,导致了每年有30%左右的大学生处于失业的尴尬境地。大学生的实战能力经不起企业的检验,与企业的用人标准严重脱轨是导致众多高校毕业生失业的重要原因。目前,大学生“回炉”已经成为一个不争的事实,越来越多的大学生选择了回炉深造再就业的曲线就业模式,为自己在竞争激烈的社会赢得一席之地。为了彻底解决就业问题,让毕业生与市场需求无缝对接,经过多年的市场调研,潜心研究、反复论证,依托新华集团雄厚的师资力量,21年的办学经验,为大学生量身定制的“心为”项目实战中心登陆中原大地。该中心采取全面企业化的项目实战模式,让学员全方位、多角度地感受企业环境,接受项目实战,掌握主动就业的制高点。项目中心简介随着科技进步和社会发展,加上金融风暴的影响进一步加剧,大学教育培养出来的毕业生不能较好适应就业市场的弊端日益显现。于是,一种能针对当前就业市场的人才需求、注重提升学生实战能力的培养模式——项目化培训,应运而生。心为项目实战中心就是当前中原大地项目化培训的领导者,她的诞生为处在水深火热当中的大学毕业生带来了希望。项目实战让受训学员在真实项目操作中学习,思考、创新,所培训的内容都是企业需要的,从而摆脱了所学和所需严重脱轨的现象,解决了企业和学校之间需求矛盾,为企业培养合适的人才搭建了桥梁。心为项目实战中心采取“开放式实战、企业化运作”的方式,抛开常规教学形式的一种全新培养模式。项目经理跟根据 “企业真实案例”设计项目,让大学生全程参与不同类型项目运作,扮演企业职员角色,切身感受企业氛围。心为项目实战中心为每个专业设立一个项目部,每个项目部设置多个子部门每个子部门20名员工,每人1台联想液晶电脑,以保证实际的工作需求。聘请行业知名公司技术总监、项目经理、项目工程师等专业人士担任项目经理,全面负责项目实际运作,项目中心全部采用企业标准化管理,全力塑造真实的企业场景。“心为”,用心而为,寄望青年朋友们诚信做人、用心做事,成就自我,服务社会。心为项目实战中心以全新的理念,架起校企间的桥梁,以全新的模式实现学生到职员角色转变,以全新的空间,塑造真实的企业场景,让你就业不再困难,成才就是这么简单!
收起全文
精华内容
下载资源
问答
  • Vue + Spring Boot 项目实战(一):项目简介

    万次阅读 多人点赞 2019-03-31 11:19:37
    白卷是一款使用 Vue+Spring Boot 开发的前后端分离项目,主要帮助 web 开发初学者通过实践方式打通各个环节的知识。

    logo


    GitHub 地址:https://github.com/Antabot/White-Jotter
    lisense

    教程目录

    第一部分

    Vue + Spring Boot 项目实战(一):项目简介
    Vue + Spring Boot 项目实战(二):搭建 Vue.js 项目
    Vue + Spring Boot 项目实战(三):前后端结合测试(登录页面开发)
    Vue + Spring Boot 项目实战(四):数据库的引入
    Vue + Spring Boot 项目实战(五):使用 Element 辅助前端开发
    Vue + Spring Boot 项目实战(六):前端路由与登录拦截器
    Vue + Spring Boot 项目实战(七):导航栏与图书页面设计
    Vue + Spring Boot 项目实战(八):数据库设计与增删改查
    Vue + Spring Boot 项目实战(九):核心功能的前端实现
    Vue + Spring Boot 项目实战(十):图片上传与项目的打包部署

    第二部分

    Vue + Spring Boot 项目实战(十一):用户角色权限管理模块设计
    Vue + Spring Boot 项目实战(十二):访问控制及其实现思路
    Vue + Spring Boot 项目实战(十三):使用 Shiro 实现用户信息加密与登录认证
    Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
    Vue + Spring Boot 项目实战(十五):动态加载后台菜单
    Vue + Spring Boot 项目实战(十六):功能级访问控制的实现
    Vue + Spring Boot 项目实战(十七):后台角色、权限与菜单分配
    Vue + Spring Boot 项目实战(十八):博客功能开发

    第三部分

    Vue + Spring Boot 项目实战(十九):Web 项目优化解决方案
    Vue + Spring Boot 项目实战(二十):前端优化实战
    Vue + Spring Boot 项目实战(二十一):缓存的应用

    开源精选

    Erupt Framework:开源神器,助你无需前端代码搞定企业级后台管理系统
    AntdFront: React 纯 Hook 多标签微前端管理系统解决方案

    前言

    之前写了一些关于 Java EE 的文章,主要是理论性质的,目的是帮助大家快速了解 Java EE 的核心内容,早日爬出这个陈旧又绕不开的坑,进入 Java Web 开发的新天地。当然只有理论是不够的,有很多细节需要在实践中理解,所以我决定做一个实践教程。

    这个项目十分简单,是一个纯粹为教程而生的原型,可以视为一个简陋的带后台的门户网站。所以学习时不用有什么压力,估计你们学的比我写的快很多。

    我的目标是根据这个教程,可以帮助 新入行的或是刚开始学习相关技术 的小伙伴们把一个完整的项目还原出来,建立起对前后端分离式 Web 开发的整体认知。

    一开始,我会尽量详细地描述开发的过程,帮助大家快速上手。随着项目进展,曾经讲到过的、比较容易搜索到的内容会适当省略。

    当然,每个人的理解方式不同,可能有些重要的细节没讲到位,欢迎大家在评论区提问。受限于个人水平,一定有很多说的不对的地方,大家理解一下,友善白嫖哈。

    一、项目概述

    这个项目我把它命名为 “白卷”,估摸着很多同学会拿它做课程设计之类,建议你们尽量加点自己的东西在里面,直接交白卷,你的良心不会痛吗?(狗头保命)

    开个玩笑,叫白卷是因为它随着教程进展逐渐完善,象征着知识的从无到有,从有到多。

    另外我还给它起了一个英文名字,叫 White Jotter(白色笔记本),纯粹是为了谐音。

    项目遵循敏捷开发原则,会根据大家反馈的意见整理出新的需求,动态扩展、调整、优化。初始阶段按照简单的分层架构设计,具体见下图:

    • 应用架构
      应用架构

    • 技术架构
      技术架构图

    项目需要在前后端之间不断穿梭,但在做教程的时候,我会尽量模块化地去讲解。

    此外,我把教程分为了几个阶段,是为了循序渐进、由易到难地讲解知识点。

    各个阶段的主要内容如下(随教程进展更新):

    (一)第一部分

    这个项目的第一部分以图书信息管理为示例,主要帮助大家理解以下内容:

    • 如何从 0 开始搭建 Web 项目?
    • 什么是前后端分离?如何实现前后端分离?
    • 单页面应用有哪些特点?
    • 如何在 Web 项目中使用数据库并利用网页实现增删改查?
    • 在开发中如何利用各种辅助手段?
    • Vue.js 的基本概念与用法
    • 简单的前端页面设计
    • 如何部署 Web 应用?

    各个页面的效果大致如下:

    登录页面
    登录页面
    首页
    首页
    图书馆页面
    图书馆

    (二)第二部分

    项目的第二部分是后台管理模块的开发,主要包括以下内容:

    • 后台管理模块的常见功能与布局(内容管理、用户\权限管理、运维监控)
    • 用户身份验证、授权、会话管理与信息加密存储
    • Shiro 框架的使用
    • 实现不同粒度的访问控制(动态菜单、功能控制、数据控制)
    • 结合内容管理,实现文章的编写与展示

    后台基本结构如下:
    在这里插入图片描述
    后台页面效果:

    Dashboard(from PanJiaChen / vue-element-admin)
    dashboard

    图书管理
    图书管理
    用户管理
    在这里插入图片描述
    笔记本页面效果:

    文章列表:
    笔记本
    文章详情:
    文章详情

    (三)第三部分

    第三部分是在前面的基础上,分析项目存在的不足,并对其进行由点及面的优化。

    当简单的优化无法达到我们想要的目的时,就需要从架构层面进行整体的升级改造,那就是下一套教程的事情了。

    (四)开源精选

    在做这个项目的过程中结识了一些小伙伴,他们凭借一腔热枕坚持为开源社区做贡献,开发出了许多优秀的项目。我打算在编写教程的同时穿插对这些项目的介绍,以便让更多朋友们了解这个群体,甚至加入到新兴项目的发展壮大过程中去。

    这里给读者们提供一个福利,如果你有拿的出手开源项目希望更多人知道,我可以无条件帮你推广,甚至文案也可以帮你修改,当然,前提是这个项目真的有价值。


    二、技术栈

    参考技术架构图,项目使用的主要技术如下:

    1.前端技术栈

    1.Vue.js
    2.ElementUI
    3.axios

    2.后端技术栈

    1.Spring Boot
    2.Apache Shiro
    3.Apache Log4j2
    4.Spring Data JPA
    5.Spring Data Redis

    3.数据库

    1.MySQL
    2.Redis

    在开发过程中还会不断用到一些新的技术,有必要的我会增添上去。

    三、主要参考内容

    下一篇:Vue + Spring Boot 项目实战(二):搭建 Vue.js 项目

    展开全文
  • 详细讲解如何使用 Vue CLI 搭建前端项目以及项目结构分析。

    前言

    从这篇文章开始,就进入真正的实践了。

    在前端项目开发中,我们可以根据实际情况不同程度地使用 Vue。利用 Vue CLI(或写成 vue-cli,即 Vue 脚手架)搭建出来的项目,是最能体现 Vue 的特性的。这点在接下来的内容中我们可以慢慢感受。

    关于项目的构建其实类似的文章网上有很多,但我还是重新写了一下,一是为了确保项目能够运行成功,二是对几个细节作了解释,三是加入了使用 IDE 的构建方法。

    在动手操作之前,我希望大家已经清楚什么是 “前后端分离” ,什么是 “单页面应用”

    简单地说,前后端分离 的核心思想是前端页面通过 ajax 调用后端的 restuful api 进行数据交互,而 单页面应用(single page web application,SPA),就是只有一张页面,并在用户与应用程序交互时动态更新该页面的 Web 应用程序。

    附上 Vue 的官方教程:
    https://cn.vuejs.org/v2/guide/

    这是第一手的学习资料,本篇的实践内容虽然用不上,但是日后要经常查阅。

    一、安装 Vue CLI

    因为需要使用 npm 安装 Vue CLI,而 npm 是集成在 Node.js 中的,所以第一步我们需要安装 Node.js,访问官网 https://nodejs.org/en/,首页即可下载。
    在这里插入图片描述
    图中左边是长期支持版本,右边是当前版本,下载哪个都行,我一般选择长期支持版本。

    下载完成后运行安装包,一路下一步就行。然后在 cmd 中输入 node -v,检查是否安装成功。
    在这里插入图片描述
    如图,出现了版本号(根据下载时候的版本确定),说明已经安装成功了。同时,npm 包也已经安装成功,可以输入 npm -v 查看版本号
    在这里插入图片描述
    输入 npm -g install npm ,将 npm 更新至最新版本。
    在这里插入图片描述


    之后可以选择安装 cnpm,即 npm 的国内镜像。使用 cnmp 的好处是在日后下载内容时会比较快,但是下载的包可能不是最新的。

    安装 cnpm 的命令为 :

    npm install -g cnpm --registry=https://registry.npm.taobao.org

    完成后就可以使用 cnpm 替代 npm 了,我不太喜欢用 cnpm,喜欢用的小伙伴注意一点,cnpm 不要与 npm 混合使用,一个项目用 cnpm 就从头用到底,不要中途敲错命令,否则就会出现混乱。不过万一遇到这种情况也不用慌,把项目的 node_modules 文件夹删了重新执行 npm/cnpm install 就行了,只是比较浪费时间。


    之后,使用 npm install -g vue-cli 安装脚手架。
    在这里插入图片描述
    注意此种方式安装的是 2.x 版本的 Vue CLI,最新版本需要通过 npm install -g @vue/cli 安装。新版本可以使用图形化界面初始化项目,并加入了项目健康监控的内容,但使用新版本创建的项目依赖与这个教程不太相符,折腾起来比较麻烦。

    虽然我也想专门针对新的 CLI 和 Vue 3.0 重构一下教程,但想了想这是个无休止的工作,这个教程也不是为了讲前端框架的新特性,而且直到现在 Vue 3.0 也只是发布了初期试验版本,想必又是一堆依赖问题,所以就不折腾了。

    二、构建前端项目

    1.通用方法

    直接使用命令行构建项目。首先,进入到我们的工作文件夹中,我在 D 盘新建了一个叫 workspace 的文件夹,大家可以自行选择位置。
    在这里插入图片描述
    然后执行命令 vue init webpack wj-vue,这里 webpack 是以 webpack 为模板指生成项目,还可以替换为 pwa、simple 等参数,这里不再赘述。 wj-vue 是我们的项目名称(White Jotter),大家也可以起别的名字。

    在程序执行的过程中会有一些提示,可以按照默认的设定一路回车下去,也可以按需修改,比如下图问我项目名称是不是 wj-vue,直接回车确认就行。

    在这里插入图片描述
    这里还会问是否安装 vue-router,一定要选是,也就是回车或按 Y,vue-router 是我们构建单页面应用的关键。
    在这里插入图片描述
    还有是否使用 es-lint,这玩意儿挺烦的,但为了代码质量先将就一下吧。

    接下来等待项目构建完成就 OK 了。
    在这里插入图片描述
    可以看到 workspace 目录下生成了项目文件夹 wj-vue,里面的结构如图
    在这里插入图片描述
    接下来,进入到我们的项目文件夹里(cd D:\workspace\wj-vue),执行npm run dev
    在这里插入图片描述
    项目构建成功,这一步如果报错,可能是未能加载项目所需的依赖包,即 node_modules 里的内容,需要在该文件夹执行 npm install ,再执行 npm run dev

    访问 http://localhost:8080,查看网页 demo,大工告成!
    在这里插入图片描述

    2.使用 IDE (IntelliJ IDEA)

    对于习惯使用 IDE 的同学,可以使用更直观的方式构建项目。以 IntelliJ IDEA 为例,点击 Create New Project
    在这里插入图片描述
    然后选择 Static Web -> Vue.js,点击 next,输入相关参数
    在这里插入图片描述
    此处可以选择 CLI 的版本
    在这里插入图片描述
    这里注意 Project location 需要输入到项目文件夹一级而不是 workspace。输入完成后点击 Next,等待 Vue CLI 初始化,然后在可视化界面上确认项目信息,修改或 Next 即可。IDEA 构建出的 Vue 项目是不含 node_modules 的,所以要先调出终端,执行 npm install
    在这里插入图片描述
    运行完成后,输入 npm run dev 即可。
    在这里插入图片描述
    另外 IDE 嘛,总是在 UI 上下了很多功夫,我们还可以在 package.json 文件上点击右键,选择 show npm scripts
    在这里插入图片描述
    然后就会出来 npm 命令窗口,想要执行哪个命令直接双击运行就可以了。
    在这里插入图片描述
    这些命令都是在 package.json 文件里预定义的。dev 和 start 是一样的,start 即是执行 npm run dev 命令
    在这里插入图片描述
    另外使用这种方法,可以激活 IDE 右上角的按钮,不过这些都不重要了。
    在这里插入图片描述
    上面的内容应该足够详细了,如果大家还是遇到了问题,可以在评论区反馈一下,我会第一时间解答。

    三、Vue 项目结构分析

    1.概览

    使用 CLI 构建出来的 Vue 项目结构是这个样子的
    在这里插入图片描述
    里面我们需要关注的内容如下图,重点需要关注的我用小红旗标了出来
    在这里插入图片描述
    其中我们最常修改的部分就是 components 文件夹了,几乎所有需要手动编写的代码都在其中。

    2.x 时代没有创建 view 这个目录,其实加上更加合理,现在我们姑且认为 Vue 把视图也当做“组件”的一部分,有助于初期的理解。

    接下来我们分析几个文件,目的是看看各个部分是怎么联系到一起的。

    2.index.html

    首页文件的初始代码如下:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <title>wj-vue</title>
      </head>
      <body>
        <div id="app"></div>
        <!-- built files will be auto injected -->
      </body>
    </html>
    

    就是一个普普通通的 html 文件,让它不平凡的是 <div id="app"></div> ,下面有一行注释,构建的文件将会被自动注入,也就是说我们编写的其它的内容都将在这个 div 中展示。

    还有不普通的一点是,整个项目只有这一个 html 文件,所以这是一个 单页面应用,当我们打开这个应用,表面上可以有很多页面,实际上它们都只不过在一个 div 中。

    3.App.vue

    上面图上我把这个文件称为“根组件”,因为其它的组件又都包含在这个组件中。

    .vue 文件是一种自定义文件类型,在结构上类似 html,一个 .vue 文件即是一个 vue 组件。先看它的初始代码

    <template>
      <div id="app">
        <img src="./assets/logo.png">
        <router-view/>
      </div>
    </template>
    
    <script>
    export default {
      name: 'App'
    }
    </script>
    
    <style>
    #app {
      font-family: 'Avenir', Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      text-align: center;
      color: #2c3e50;
      margin-top: 60px;
    }
    </style>
    
    

    大家可能注意到了,这里也有一句 <div id="app">,但跟 index.html 里的那个是没有关系的。这个 id=app 只是跟下面的 css 对应。

    <script>标签里的内容即该组件的脚本,也就是 js 代码,export default 是 ES6 的语法,意思是将这个组件整体导出,之后就可以使用 import 导入组件了。大括号里的内容是这个组件的相关属性。

    这个文件最关键的一点其实是第四行, <router-view/>,是一个容器,名字叫“路由视图”,意思是当前路由( URL)指向的内容将显示在这个容器中。也就是说,其它的组件即使拥有自己的路由(URL,需要在 router 文件夹的 index.js 文件里定义),也只不过表面上是一个单独的页面,实际上只是在根组件 App.vue 中。

    4.main.js

    前面我们说 App.vue 里的 <div id="app"> 和 index.html 里的 <div id="app"> 没有关系,那么这两个文件是怎么建立联系的呢?让我们来看入口文件 main.js 的代码

    import Vue from 'vue'
    import App from './App'
    import router from './router'
    
    Vue.config.productionTip = false
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      router,
      components: { App },
      template: '<App/>'
    })
    
    

    这里插一嘴,这个 js 文件有的同学可能看着不顺眼,比如没有分号(;),因为是 ES6 的语法,不这么写反而会提示错误,虽说可以把 es-lint 改了或者关了,但我想熟悉一下新的规则也挺好。

    最上面 import 了几个模块,其中 vue 模块在 node_modules 中,App 即 App.vue 里定义的组件,router 即 router 文件夹里定义的路由。

    Vue.config.productionTip = false ,作用是阻止vue 在启动时生成生产提示。

    在这个 js 文件中,我们创建了一个 Vue 对象(实例),el 属性提供一个在页面上已存在的 DOM 元素作为 Vue 对象的挂载目标,router 代表该对象包含 Vue Router,并使用项目中定义的路由。components 表示该对象包含的 Vue 组件,template 是用一个字符串模板作为 Vue 实例的标识使用,类似于定义一个 html 标签。

    看完了以上三个文件,我想基本上就对前端项目的结构有所了解了。下一篇中我将用一个例子解释前后端分离的项目是如何联系起来的。

    查看系列文章目录:
    https://learner.blog.csdn.net/article/details/88925013

    上一篇:Vue + Spring Boot 项目实战(一):项目简介

    下一篇:Vue + Spring Boot 项目实战(三):前后端结合测试(登录页面开发)

    展开全文
  • Java项目实战

    万次阅读 多人点赞 2017-12-27 13:36:57
    为大家分享一些Java项目实战,希望大家能够从里面中学习到自己想学的东西。

    Java项目实战

    还久没更新博客,这次为大家分享一些Java实战项目。

    1.电子地图系统

    代码以及文档链接:点击打开链接

    2.决策分析系统

    代码以及文档链接:点击打开链接

    3.考试管理系统

    代码以及文档链接:点击打开链接

    4.数码照片管理软件

    代码以及文档链接:点击打开链接

    5.快递打印系统

    代码以及文档链接:点击打开链接

    6.通讯管理系统

    代码以及文档链接:点击打开链接

    7.编程词典用户管理系统

    代码以及文档链接:点击打开链接

    8. 企业进销存管理系统

    代码以及文档链接:点击打开链接

    9.企业内部通信系统

    代码以及文档链接:点击打开链接

    10.学生成绩管理系统

    代码以及文档链接:点击打开链接

    11.图书馆管理系统

    代码以及文档链接:点击打开链接

    12.开发计划管理系统

     

    代码以及文档链接:点击打开链接

    展开全文
  • /** * AOP切面编程验证登录 * Created by Akk_Mac * Date: 2017/8/30 上午11:05 */ @Aspect @Component @Slf4j public class SellerAuthorizeAspect { @Autowired private StringRedisTemplate redisTemplate...
  • 项目实战|史上最简单的springboot 整合elk教程,实现日志收集

    项目源码已上传至 https://gitee.com/yangleliu/learning.git,免费索取
    微信搜一搜【AI码师】关注帅气的我,回复【干货领取】,领取2021最新面试资料一份

    【前言】

    开发任务后,提交代码的那一刻,心情是自由自在……速度是八十迈……
    在这里插入图片描述

    以为接下来是游戏、逛GAI或暖烘烘的被窝。

    然而,梦想何其丰满,现实何其骨干。

    总有测试小姐姐教你紧急刹车,回头做(改)人(bug):AI大师,你这不行啊!(吃瓜群众排排坐,笑歪了嘴)

    我低头看了看自己的八块腹肌:行不行可不是你说了算!

    小姐姐也不是吃素的,撸起袖子,打开她的联想十代:你行你连连报错,毒奶队友!

    我:(⊙o⊙)…原来你说的是这个不行,我还以为……

    小姐姐一脸疑惑:以为什么?真以为自己是大神了!

    我清咳掉自己的尴尬,绝不认输:我认为是你传错了参数。毕竟本大师在本地调试时可没有任何问题。

    小姐姐久经沙场,从无败绩:不!可!能!是你是你就是你!我从来不会错。

    那一刻,我仿佛看到生理期的女朋友在面前闪现,内心是崩溃的。
    在这里插入图片描述

    我们俩就这样争执了很久,最后自然不出意料,缴械投降的还是我。

    毕竟——

    中华民族的传统美(糟)德(粕)是:好男不跟女斗!

    于是我只能去服务器上看看日志,但是日志内容累累如高山,多多如牛毛,足足3.5个g,无奈的我只好使用一堆linux骚命令,将文件切割成一个个小文件,好在最后终于找到了那次请求,排查后找到了原因。
    在这里插入图片描述

    通过这件事,我痛定思痛:如果有一个平台能实时收集我们的日志,并能以可视化的界面呈现出来,那该多好啊!这样我们就再也不用在那堆厚重的日志文件里面找数据了。

    【秘籍展示】

    其实,这种神奇的平台早就有了,那就是ELK,它是三大神兽Elasticsearch(搜索引擎), Logstash(日志收集), Kibana(可视化的web界面)的组合:
    我们来看下架构图:

    在这里插入图片描述

    对照架构图,我们来看下这三大神兽的工作过程

    1. 用户发送请求到我们的服务端
    2. 服务端将需要落日志的数据通过网络请求传送到logstash
    3. logstash对数据进行过滤清洗后,再传给Elasticsearch
    4. Elasticsearch 负责对数据创建索引,进行存储
    5. 用户通过访问kibana的web页面,能够实时查看日志

    好吧,秘籍都告诉你了,现在需要带领你们去实战了

    【必备心法】

    在打仗之前,我们需要士兵们必须具备以下技能,不然上了战场后,只会被虐的体无完肤

    • 了解elk三大组件
    • 有实操过docker
    • 本地有docker环境
    • IDEA工具
    • 配置相对高一点的武器(电脑),不然会崩溃的

    【准备粮草】 准备一个Springboot项目

    首先创建一个springboot项目,项目结构如下

    在这里插入图片描述

    引入项目必备依赖

      <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.35</version>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.4.0</version>
            </dependency>
    

    创建一些基础组件

    在这里插入图片描述

    创建切面,实现低耦合记录日志

    核心代码

        // 使用环绕通知
      @Around("controllerLog()")
      public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        // 获取当前请求对象
        ServletRequestAttributes attributes =
            (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 记录请求信息
        ReqRspLog webLog = new ReqRspLog();
        Object result = joinPoint.proceed();
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();
        // 通过反射,获取入参和出参,封装成json,落日志
        long endTime = System.currentTimeMillis();
        String urlStr = request.getRequestURL().toString();
        webLog.setBasePath(StrUtil.removeSuffix(urlStr, URLUtil.url(urlStr).getPath()));
        webLog.setIp(request.getRemoteUser());
        webLog.setMethod(request.getMethod());
        webLog.setParameter(getParameter(method, joinPoint.getArgs()));
        webLog.setResult(result);
        webLog.setSpendTime((int) (endTime - startTime));
        webLog.setStartTime(startTime);
        webLog.setUri(request.getRequestURI());
        webLog.setUrl(request.getRequestURL().toString());
        logger.info("{}", JSONUtil.parse(webLog));
        return result;
      }
    

    创建测试接口

    @RestController
    @RequestMapping("/api")
    public class ApiController {
        @GetMapping
        public R<String> addLog(@RequestParam(value = "param1",required = false) String param1){
            return R.success("你好,这段话将被日志记录");
        }
    }
    

    我们现在请求一下接口,会发现在控制台打印出 这样一段日志

    {"method":"GET","uri":"/api","url":"http://localhost:8080/api","result":{"code":200,"data":"你好,这段话将被日志记录","message":"操作成功"},"basePath":"http://localhost:8080","parameter":{"param1":"测试ELK"},"startTime":1611529379353,"spendTime":9}
    

    使用切面,实现日志记录并打印到控制台上已经完成了,现在我们按照架构图,需要通过logstash把日志发送到es里面,接下来整合logstash实现传送日志的功能

    【招兵买马】 整合Logstash

    添加logstash依赖

     <!--集成logstash-->
            <dependency>
                <groupId>net.logstash.logback</groupId>
                <artifactId>logstash-logback-encoder</artifactId>
                <version>5.3</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    

    编辑配置文件logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
        <!--应用名称-->
        <property name="APP_NAME" value="mall-admin"/>
        <!--日志文件保存路径-->
        <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
        <contextName>${APP_NAME}</contextName>
        <!--每天记录日志到文件appender-->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
        <!--输出到logstash的appender-->
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <!--可以访问的logstash日志收集端口-->
            <destination>127.0.0.1:4560</destination>
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
        </appender>
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
            <appender-ref ref="LOGSTASH"/>
        </root>
    </configuration>
    

    编辑完之后,项目结构是这样的:
    在这里插入图片描述

    虽然在项目中已经集成了logstash功能,但是logstash还不知道把日志往哪里发,因为我们还没有城池。

    既然没有,那就建造吧!

    【搭建城池】 搭建ELK环境

    ELK这里我使用dokcer-compose搭建,一个字:快!
    首先我们约定一个根目录:/user/aimashi/docker
    按要求执行如下命令

    mkdir -p /Users/yangle/docker
    cd /Users/yangle/docker
    mkdir elk_stanrd
    cd elk_stanrd
    mkdir logstash
    cd logstash
    vim logstash.conf
    

    将以下文件内容复制到logstash.conf

    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4560
        codec => json_lines
      }
    }
    
    output {
      elasticsearch {
        hosts => "es:9200"
        index => "logstash-service-%{+YYYY.MM.dd}"
      }
    }
    

    继续执行如下命令

    cd ../
    vim docker-compose.yml
    

    同样将以下内容复制到配置文件中

    version: '3'
    services:
      elasticsearch:
        image: elasticsearch:6.4.0
        container_name: elasticsearch
        environment:
          - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
          - "discovery.type=single-node" #以单一节点模式启动
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
        volumes:
          - /Users/yangle/docker/elk_stanrd/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
          - /Users/yangle/docker/elk_stanrd/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
        ports:
          - 9200:9200
          - 9300:9300
      kibana:
        image: kibana:6.4.0
        container_name: kibana
        links:
          - elasticsearch:es #可以用es这个域名访问elasticsearch服务
        depends_on:
          - elasticsearch #kibana在elasticsearch启动之后再启动
        environment:
          - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
        ports:
          - 5601:5601
      logstash:
        image: logstash:6.4.0
        container_name: logstash
        volumes:
          - ~/Users/yangle/docker/elk_stanrd/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
        depends_on:
          - elasticsearch #kibana在elasticsearch启动之后再启动
        links:
          - elasticsearch:es #可以用es这个域名访问elasticsearch服务
        ports:
          - 4560:4560
    

    到目前为止,搭建elk环境的准备工作已经完成。
    现在需要启动elk,在/Users/yangle/docker/elk_stanrd目录下执行如下命令

    docker-compose up -d
    

    执行之后出现如下提示,则代表初创建成功
    在这里插入图片描述

    接下来,我们执行docker ps 来查看容器是否启动
    在这里插入图片描述

    如果和图中一样,代表容器正常启动,但是还需等待一分钟左右,才能访问可视化平台
    访问地址 http://localhost:5601/
    在这里插入图片描述

    如果出现这个页面,则代表elk已经搭建完成,现在,我们需要往里面塞点数据

    【发起进攻】 发送请求

    elk环境搭建完成之后,需要产生一点数据。该怎么做呢?
    只要调用 http://localhost:8080/api?param1=测试ELK 接口,多调用几次,就会产生一些测试数据。
    除此之外,还需要做一些配置才能让es去收集这些日志,用户才能看到:
    在这里插入图片描述

    在这里插入图片描述

    选择字段,创建索引
    在这里插入图片描述

    成功创建索引之后的界面
    在这里插入图片描述
    在这里插入图片描述

    选择logstash-servicez之后,界面是这样的:
    在这里插入图片描述

    可以看到系统中的日志已经被收集上来了,试下搜索“你好”
    在这里插入图片描述

    所有包含“你好”的日志都被筛选出来,当然这里还可以有很多检索条件,例如右上角有一个时间过滤检索,我就不一一演示了,大家有兴趣的话可以自己研究下。
    仓库:https://gitee.com/yangleliu/learning.git
    乐于助人、大公无私的五好青年——我已将以上所有代码全部上传到git仓库中,大家自行获取,记得start啊

    【战后总结】

    每个新技术的出现,都是为了解决某一类问题。

    就像elk的出现,就是为了减少日渐脱发的代码攻城狮们从海量日志中找数据的时间,节省出更多的精力放在业务处理上面。
    有了elk,我们只需要在输入框中,轻松输入关键字,敲下回车,需要的数据就会呈现在我们面前。

    测试小姐姐等待的时间短了,心情好了,矛盾自然也就少了。

    如此想来,如果能有一个平台,将女友的十万个情绪爆发的原因实时展现出来,那世界将是多么美好的明天!

    嘘~

    如果大家感兴趣的话,可以给我点个赞哦,我将会更有动力为大家带来更好的实战文章,后面将会对这个日志系统进行优化,引入更加成熟的架构filebeat+kafka+logstash+Elasticsearch+kibana,敬请期待!

    展开全文
  • 构建 Spring Boot 项目并通过登录 DEMO 打通前后端的联系,为下一步开发打下基础。
  • 1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及录制方法,正则表达式之...
  • php初级到项目实战

    万人学习 2016-09-25 10:41:04
    本套php为完整的从初级到smarty,thinkphp,ecshop项目实战,课程安排循序渐进,通俗易懂
  • 项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人。顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们要...
  • linux 从入门到项目实战课程

    万人学习 2020-03-11 18:59:56
    课程目标: 通过本套基础+实战课程的全程学习,提升运维能力,课程风格注重实践,每个知识点都有案列,通过本课程系统的学习,提高解决问题能力。... 课程项目实战篇b2b2c 电商平台部署网络拓扑图 卖家平台部署效果
  • Javaweb商城项目实战

    千人学习 2019-07-24 22:23:36
    本门课程核心围绕javaweb实战网上商城项目作为...课程主要包括: 第1章 Javaweb项目实战——搭建和登录注册模块 第2章 Javaweb项目实战-商品模块 第3章 Javaweb项目实战—购物车模块 第4章 Javaweb项目实战—订单模块
  • Hadoop项目实战:新闻离线项目分析

    千人学习 2019-01-13 21:50:13
    本课程为项目实战课,项目各个环节既深入讲解理论知识,又结合项目业务进行实操,从而达到一站式掌握大数据离线项目。
  • 深度学习-Pytorch项目实战-垃圾分类

    万人学习 2019-12-08 11:15:53
    Pytorch项目实战 垃圾分类 课程从实战的角度出发,基于真实数据集与实际业务需求,结合当下最新话题-垃圾分类问题为实际业务出发点,介绍最前沿的深度学习解决方案。     从0到1讲解如何场景业务...
  • JavaWeb电商项目实战

    千人学习 2019-04-25 15:54:24
    本课程是JavaWeb综合项目实战,期望学员通过本课程,能够熟练掌握使用JavaWeb技术实现项目的开发,能够使用反射技术进行小型框架的编写。从授课内容角度上,本课程最大特色是从零开始,从项目开发流程,到需求分析,...
  • flutter高仿微信项目实战

    千人学习 2018-10-28 22:34:11
    Flutter案例视频教程,从入门到具体项目实战,Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。flutter高仿微信项目实战是一个使用flutter技术仿微信界面开发的完整案例,同时提供...
  • JavaScript jQuery 项目实战系列教程 能掌握JS和Jquery的基本技能,能完成基本的网页特效!
  • Web绘图——mxGraph项目实战(精华篇)需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连接相邻动作的弧上标有执行此次相邻动作的频次,每个动作另附有一个...
  • Tensorflow2项目实战课程

    千人学习 2019-03-14 15:37:34
    课程会从0开始学习,从python环境安装,python入门,numpy,pandas,matplotlib使用,深度学习基础,一直讲到tensorflow基础,进阶,项目实战。不管你是0基础小白,想进入AI行业,还是有一定基础,想学习最新的...
  • 原生PHP商城项目实战

    千人学习 2019-05-10 11:26:36
    基础php和html+css等结合,采用MVC结构,打造纯原生商城。整个过程从0到1,具体完整。 课程难点: 项目实战使用大量 网站业务 逻辑,对于新手没有接触和开发经验的人比较棘手。
  • Vue + Spring Boot 项目实战(四):数据库的引入

    万次阅读 多人点赞 2019-04-14 12:20:35
    项目中引入数据库,实现通过数据库验证用户名与密码。
  • CSS梅兰商城项目实战

    万人学习 2016-03-17 17:13:25
    本套CSS项目实战课程为制作梅兰商城首页,以网页布局定位的基础知识为依托,灵活运用CSS的全部知识和小技巧,带你深入剖析经典网页的制作过程,同时涉及到了CSS样式的初始化、版心控制、精灵图的使用、搜索引擎优化...
  • Flink1.8实时数仓项目实战

    千人学习 2019-08-26 18:10:00
    《Flink1.8实时数仓项目实战》课程主要基于Flink**稳定版本进行讲解,课程包含Flink DataSet、容错、Connector、Flink SQL以及实时数仓项目。希望通过本课程的学习,大家能快速掌握Flink 批处理和Flink SQL,并通过...
  • Python+Vue+Django前后端分离项目实战

    千人学习 2020-02-12 09:38:05
    二、贴近实战 本系列课程为练手项目实战:学生管理系统v4.0的开发,项目包含了如下几个内容:项目的总体介绍、基本功能的演示、Vuejs的初始化、Element UI的使用、在Django中实现针对数据的增删改查的接口、在Vuejs...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,054
精华内容 39,221
关键字:

项目实战