<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ws6afa88的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ws6afa88</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ws6afa88]]></copyright><item><title><![CDATA[运行hadoop 报错  No job jar file set.  User classes may not be found. See Job or Job#setJar(String)]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/111414327</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/111414327</guid><author>ws6afa88</author><pubDate>Sun, 20 Dec 2020 10:25:24 +0800</pubDate><description><![CDATA[如下创建主类程序
public class JobMain extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
//1:创建job对象
Job job = Job.getInstance(super.getConf(), "mapreduce_sort");
...
}

结果单机上跑没有问题，但是放在集群上就会出问题
报如下错误
20/12/19 18:09:34 I]]></description><category></category></item><item><title><![CDATA[shiro - 前后端权限控制详细做法]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109680453</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109680453</guid><author>ws6afa88</author><pubDate>Fri, 13 Nov 2020 19:24:51 +0800</pubDate><description><![CDATA[之前的博客已经对shiro在springboot中的使用做了详细说明，这里继续说明如何具体实施，由于我一直在完善自已的博客，这里做一个笔记。
1. 创建表
我创建了4个表来对不同身份的用户进行权限管理，主要是通过用户-&gt;角色-&gt;权限进行管理

各个表的样子如下：

2. 定义Perm类
这里的类与之前创建的perm表相对应
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Perm implements Serializable ]]></description><category></category></item><item><title><![CDATA[vue -前端传递对象到springboot后端，跳转页面并传递参数]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109538162</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109538162</guid><author>ws6afa88</author><pubDate>Fri, 06 Nov 2020 20:41:08 +0800</pubDate><description><![CDATA[由于对前端不是特别熟， vue也就学了一周，javascript也就是简单学了一两天，做个人博客的时候遇到一些不常用的，现在就记一下笔记。
1. 构建对象，利用axios传递到后，跳转页面并传参
首先构建函数，由于是分页数据，需要在data对象里包含多个参数：
 //条件分页查询
 export const findPage = (params) =&gt; {
  return axios({
    method: 'post',
    url: `/findPage`,
    data: {
  ]]></description><category></category></item><item><title><![CDATA[springboot - 启动时将数据保存在servletContext中的两种办法]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109512340</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109512340</guid><author>ws6afa88</author><pubDate>Thu, 05 Nov 2020 15:34:23 +0800</pubDate><description><![CDATA[最近在写个人博客，想在系统启动时自动把文章类别查询出来并保存，之前系统启动时是用redis对文章的浏览量和评论数进行保存。这次想用另一种方式。即将文章类别保存到应用的上下文。这里就要搞清楚三个概念ServletContext、ApplicationContext、ServletConfig、WebApplicationContext。这里主要参考了：https://blog.youkuaiyun.com/u010325193/article/details/84534861
1. ServletContext、Appl]]></description><category></category></item><item><title><![CDATA[Vue - 后端解析md文件并在前端显示 （代码高亮+md中图片显示）]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109475407</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109475407</guid><author>ws6afa88</author><pubDate>Tue, 03 Nov 2020 19:23:22 +0800</pubDate><description><![CDATA[之前在做的个人博客，前端直接引入markdown文件并显示，当时的做法如下：

这里如果用import()动态引入，必须写入静态路径，十分麻烦，难道项目部署上线时我还需要到这里来修改这个静态路径吗？肯定不会，所以我思来想去，还是采用后端解析md文件前端显示的流程，这样一系列文件路径的配置可以放在后端。
1. 后端解析md文件
1.1 配置md文件存储路径以及相关映射
server:
  #端口
  port: 4000
  #本地路径  为了映射md中的图片文件，必须填
  address: localho]]></description><category></category></item><item><title><![CDATA[Vue系列 - 从创建vue到项目打包发布全过程总结]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109248708</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109248708</guid><author>ws6afa88</author><pubDate>Fri, 23 Oct 2020 20:13:34 +0800</pubDate><description><![CDATA[1  创建vue 项目
1.1 安装基本环境
1.安装vue和node.js 的express
2.这里假设都安装完npm和node.js环境
vue3.0 安装
   npm install -g @vue/cli

1.2 vue3.0创建项目
   vue create my-project
   cd my-project
   npm run serve 

  # 1.Manually select features
  # 2.选择Router，Vuex，CSS Pre-processors，]]></description><category></category></item><item><title><![CDATA[Vue系列 -直接引入vue.js与axios.js到html中使用]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109224785</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109224785</guid><author>ws6afa88</author><pubDate>Thu, 22 Oct 2020 16:53:59 +0800</pubDate><description><![CDATA[今天学习ElasticSearch相关项目，跟着B站狂神说做了一个京东搜索的实战项目，其中有一个直接将vue.js和axios引入到html中并结合thymeleaf使用的方法挺好，在此做一个记录。
1.下载vue.js与axios.js

npm init

首先必须确保先安装node.js环境，新建一个英文的文件夹，取名newvue，然后进入该文件夹打开cmd命令行，输入
C:\Users\Administrator\Desktop\new_vue&gt;npm init

一路回车，遇到"Is thi]]></description><category></category></item><item><title><![CDATA[springboot - vue - shiro 登录验证的一些坑]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109195052</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109195052</guid><author>ws6afa88</author><pubDate>Wed, 21 Oct 2020 10:57:33 +0800</pubDate><description><![CDATA[最近开发个人博客，shiro配置后，需要进行登录验证，如要输入用户名或密码不正确，需要进行异常拦截并将结果返回给前端，在此过程有一些坑，在此记录一下：
1. 前端登录界面

该界面是用vue开发的，登录的el-form:
      &lt;!-- 登录表单区域 --&gt;
      &lt;el-form
        ref="loginFormRef"
        :model="loginForm"
        :rules="loginFormRules"
        label]]></description><category></category></item><item><title><![CDATA[spring - shiro - session交给redis托管]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109107269</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109107269</guid><author>ws6afa88</author><pubDate>Thu, 15 Oct 2020 23:47:43 +0800</pubDate><description><![CDATA[shiro自己也有session，但是我希望将这个session交给redis托管，因为如果系统采用分布式，登录信息只保存在一个节点是肯定不行的。仔细弄了几天，遇到几个坑，查了很多资料，终于走通了。现在做个笔记。有关shiro的认证与校验见https://blog.youkuaiyun.com/ws6afa88/article/details/109061610
0. ShiroDemo目录结构

1. 主要依赖
&lt;!--整合shiro--&gt;
 &lt;dependency&gt;
     &lt;gro]]></description><category></category></item><item><title><![CDATA[springboot  - shiro - 简单验证与授权]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/109061610</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/109061610</guid><author>ws6afa88</author><pubDate>Tue, 13 Oct 2020 22:41:55 +0800</pubDate><description><![CDATA[最近开发个人博客，主要内容部分已经完成，就到了设计权限的部分，于是把shiro翻出来复习了一下，现在记录一下测试过程：
0. shiro逻辑
参考https://www.jianshu.com/p/7464327c83fe
//创建一个默认SecurityManager
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
//创建一个自定义Realm对象
CustomRealm realm = new C]]></description><category></category></item><item><title><![CDATA[springboot - redis记录并统计网页浏览量]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108989549</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108989549</guid><author>ws6afa88</author><pubDate>Sat, 10 Oct 2020 02:03:50 +0800</pubDate><description><![CDATA[最近开发个人博客，想统计单网页浏览量，一开始是想把浏览量记录在数据库，后来想想每次点击网页就要去做数据库更新操作，实际项目是不会允许的，还是老老实实用redis来处理吧！
0. 需求

网页列表显示时按评论数倒序排列
进入单页页面时，该页面浏览量自动+1
系统启动时，将数据库中的浏览量，评论数，点赞数添加到redis数据库中
系统关闭时，自动将redis中数据更新到mysql数据库中
之所以选择在启动和关闭时进行redis与mysql数据交换，也是为了防止高并发。

1. 效果

数据按照“评论数”倒序排列]]></description><category></category></item><item><title><![CDATA[mybatis-乐观锁设置并测试-xml写法]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108985489</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108985489</guid><author>ws6afa88</author><pubDate>Fri, 09 Oct 2020 20:34:47 +0800</pubDate><description><![CDATA[1.乐观锁概念
总是认为不会产生并发问题，每次去取数据的时候总认为不会有其他线程对数据进行修改，因此不会上锁。但是在更新时会判断其他线程在这之前有没有对数据进行修改（一般会检查version有没有修改），一般会使用版本号机制或CAS操作实现。
2.主要流程
1. SELECT data AS old_data, version AS old_version FROM …;
2. 根据获取的数据进行业务操作，得到new_data和new_version
3. UPDATE SET data = new_dat]]></description><category></category></item><item><title><![CDATA[mybatis-list范围内查询-xml写法]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108981282</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108981282</guid><author>ws6afa88</author><pubDate>Fri, 09 Oct 2020 16:37:31 +0800</pubDate><description><![CDATA[0. 数据表

1. mapper.xml写法
    &lt;!--ids查询文章--&gt;
    &lt;select id="queryByIds" parameterType="java.util.ArrayList" resultType="Article"&gt;
        select * from articles where article_id in
        &lt;foreach collection="list" index="index" item="item" ]]></description><category></category></item><item><title><![CDATA[mybatis-select与update多字段判断拼接-xml写法]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108957417</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108957417</guid><author>ws6afa88</author><pubDate>Wed, 07 Oct 2020 23:54:26 +0800</pubDate><description><![CDATA[最近用mybatis进行select和update操作，因为一般只传入一个对象，却只对其中某些属性进行查询或更新，这时要写通用的sql语句，就必然涉及到多字段判断拼接。在这里做一个总结：
1. select多字段判断拼接
只传一个ArticleQuery对象，返回Article对象，常用
    &lt;!--文章查询的sql片断，建议是以单表为单位定义查询条件，建议将常用的查询条件都写出来--&gt;
    &lt;sql id="query_items_where"&gt;
        &lt;i]]></description><category></category></item><item><title><![CDATA[Vue系列-前端条件分页查询全流程演示]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108955852</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108955852</guid><author>ws6afa88</author><pubDate>Wed, 07 Oct 2020 22:34:19 +0800</pubDate><description><![CDATA[最近在做个人博客网站，后端的条件分页查询已经写好（见https://blog.youkuaiyun.com/ws6afa88/article/details/108928401），现在来用Vue做前端显示。
1. 数据表

2. 最终效果

3. axios函数
所需要的条件分页函数定义在article.js中
//条件分页查询
 export const findPage = (pageSize,pageNum,title) =&gt; {
	      return axios({
	        method:]]></description><category></category></item><item><title><![CDATA[SpringBoot - 后端条件分页查询-MyBatis解决方案]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108928401</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108928401</guid><author>ws6afa88</author><pubDate>Mon, 05 Oct 2020 14:53:54 +0800</pubDate><description><![CDATA[最近用SpringBoot+MyBatis在做个人博客网站，遇了条件分页查询，现在把解决流程与源代码记录下来，便于后续参考。
1.数据表

2. 定义pojo
定义与数据表相对应的Article 类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Article implements Serializable {

    private Long articleId;
    private Long userId=1l ;
    pr]]></description><category></category></item><item><title><![CDATA[Spring原理 - 最通俗易懂理解AOP]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108919876</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108919876</guid><author>ws6afa88</author><pubDate>Sun, 04 Oct 2020 16:24:47 +0800</pubDate><description><![CDATA[AOP为Aspect Oriented Programming的缩写，意为：面向切面编程，通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术，是Spring另一个主要内核。
AOP与OOP是面向不同领域的两种设计思想。

OOP（面向对象编程）针对业务处理过程的实体及其属性和行为进行抽象封装，以获得更加清晰高效的逻辑单元划分。
AOP则是针对业务处理过程中的切面进行提取，它所面对的是处理过程中的某个步骤或阶段，以获得逻辑过程中各部分之间低耦合性的隔离效果。
例如，可以对于“学生”这样一个业务实体]]></description><category></category></item><item><title><![CDATA[SpringBoot - 排坑 - IDEA找不到或无法加载主类以及找不到测试类的解决办法]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108916815</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108916815</guid><author>ws6afa88</author><pubDate>Sun, 04 Oct 2020 10:28:19 +0800</pubDate><description><![CDATA[1. IDEA找不到或无法加载主类
今天用IDEA做一个SpringBoot项目，启动时突然出现错误，显示找不到或无法加载主类
后来调了半天，只需一步操作即可
mvn clean compile

操作如下：

2. IDEA找不到测试类
后来用junit进行测试时，又提示找不到测试类，该测试类明明在指定的路径上啊！急死，于是又调了半天，原来是pom文件中的junit依赖与其他依赖有冲突，于是直接删除了junit依赖，重新导入，并刷新maven即可

于是一切就ok了，这个坑在此记录一下。

...]]></description><category></category></item><item><title><![CDATA[Spring原理 - 最通俗易懂理解IOC]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108914565</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108914565</guid><author>ws6afa88</author><pubDate>Sat, 03 Oct 2020 23:28:52 +0800</pubDate><description><![CDATA[Spring的核心是IOC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)，那么如何来理解IOC呢，这里做一个最最通俗易懂的例子来说明为什么要用IOC，以及IOC到底是怎么实现的。
比如我们新创建了一个动物园，这个动物园里有猴子，按照我们原先创建类的方式，这个动物园的创建的方式是这样的：
public class Monkey {
    public void say(){
        System.out.printl]]></description><category></category></item><item><title><![CDATA[springboot - 利用@PostConstruct对自定义Bean进行初始化]]></title><link>https://blog.youkuaiyun.com/ws6afa88/article/details/108899577</link><guid>https://blog.youkuaiyun.com/ws6afa88/article/details/108899577</guid><author>ws6afa88</author><pubDate>Fri, 02 Oct 2020 09:59:13 +0800</pubDate><description><![CDATA[开发博客系统的时候有一个需求，就是希望系统启动时，自动将指定文件夹中的md文件写入到数据库，这样我每更新一篇文章只需将文章拷贝入那个文件夹即可。（当然也可以开发界面上传的方式，但我不想搞得那么复杂，怎么方便怎么来）。数据库表长这样：

存储文章的文件夹长这样：

这里用@PostConstruct这个注解很好实现，注意系统启动时，初始化的顺序为：构造方法 -&gt; @Autowired -&gt; @PostConstruct
@Component
@Order(Ordered.HIGHEST_PRECE]]></description><category></category></item></channel></rss>