我永远不会试图去战胜一个纯傻逼,因为他会用他丰富的经验来打败我...

分类目录
6月 22

springboot中对于@Autowired 注入为null解决办法

1、描述

有时候在某个类用@Autowired 进行注入时,会发现注入参数为null。

发现可能存在的原因:

(1)该类没有托管给spring 管理,一般在类的上面添加@Component

(2)你的这个类有被new出来的实例的,new 过的对象不会交给Spring容器管理 所以里面的 service或者dao注入不进来。MQ注册的时候出现过

2、解决方式

对于

(1)其实就加入@Component 就可以了。接下来讲怎么解决第

(2)种情况有时候你确实需要在这个new 的类去注入某些类,但是用@Autowired 又注入为null,这时候我们需要手动去弄Spring容器中的Bean实现ApplicationContextAware接口。

3月 10

composer更换阿里源

若项目之前已通过其他源安装,则需要更新 composer.lock 文件,执行命令:

composer update --lock

1月 15

记一次没有判断>0的被刷接口的操作

今天, 有一个刷礼物的接口被恶意刷了, 原因是, 在送礼的时候, 后台更新背包数量用 num- {$num}, 然后,就变成了正数了, 导致加了这么多的数量,
看来下次有这种更新数量的功能, 都得加一层判断正数.

8月 05

CI 链式where 查询bug

有一个bug,CI一个控制器中调用两个 model, 如果使用第一个model中使用了  $this -> db -> where()

在之后的 model 中 使用 CI 链式 select查询, 会把上面的 where条件带过来, 导致报错

解决办法,就是使用 $this->db->reset_query()   重置查询构造器

6月 27

记一个py-redis的坑

就是python redis 的 zincrby 的最后两个参数问题, 

因为之前做一个功能的时候, 在测试服一开始的好的, 然后到线上了之后,是不好的,

测试包含python2,3 :  正式只有python 3

所以, 改了一波代码,就是换了一个顺序,到正式,正式就好了

但是,测试服又不行了, 奇了个怪

然后各种搜搜,发现是python3改动了, 后面两个参数的顺序

py2:

def zincrby(self, name, value, amount=1):

py3:

def zincrby(self, name, amount, value):

简直是天坑啊

具体改动commit:
https://github.com/andymccurdy/redis-py/commit/a750c7946d41862a38955c35b6928f098911c406

11月 17

Idea 配置Maven项目发布.

        这次自己新开发的项目, 打算用 Java Web ssm 框架来开发。软件还是Idea,毕竟好用。

        前期的项目配置还是根据,Idea SpringMVC+Spring+MyBatis+Maven整合框架搭建秒杀系统 这篇文章来配置,然后Idea 配置Tomcat 部署

        直接进入正题,打开右上角的 Project Structre  或者使用 Ctrl+Alt+Shift+S 快捷键打开,先设置 Modules,先点绿色的加号,然后往下拉选择 web,然后配置,Web Resource Directories  设置到src/main/webapp 然后点ok,目录下如下图。        

        在然后,去设置 Artifacts,点绿色的加号,选择 Web Application Exploded 选择 From Modules,回弹出一个框,就是你刚刚在 Modules 配置的那个,选择即可 点ok即可。

         

    然后,配置Tomcat服务器,在右上角有一个 绿色的开始按钮,旁边,点击 Edit Configuration,回弹出一个框 。

     在点绿色加号 -> Tomcat Server -> Local  ,然后就是配置 Tomcat 服务器了

   

    第一个 Name:就是你这里显示的服务器名,随便写无所谓。

    Server 标签配置:

            Application serven:这里就要配置了,点击右边的Configure,弹出Application Servers,点击Tomcat Home,也就是你的Tomcat文件,所放置的位置,选择即可,剩下的都会自动加载,然后点ok,Server 剩余标签的内容,都选择默认即可,然后点Apply,下一步切换到 Deployment 配置

     



    Deployment 标签配置:

         主要是配置 Deploy at the server startup , 点击右边的加号,会有一个 Artifact External Source 两个标签,这里我们选择 Artifact  也是我们刚刚在 Project Stuctre  配置的 Artifact 包,直接选择即可,点ok

       

       

    至此,配置就结束了,可以点,右上角的 绿色按钮 或者 小虫子按钮就可以开始服务器了~ 



             如有疑问,欢迎在本博客下面留言,或者放邮件 至(i@ishwy.me), 邮件内说明来源。

11月 13

php数组中两个数组合并

2017-11-16 10:20:49更新

    今早,看到代码的时候,突然想起这种的 array_merge 的函数不是没用,而是我自己使用错误了,array_merge 不是引用赋值,而我之前是给他一个空数组,在给$data,所以,肯定是不成功的。。

    其实代码很简单,所以,改成了每次循环想结果数组里合并之。代码如下。效果图也就不贴了,是第二张图的效果,也是理想效果。


这两天做项目的时候遇到一个问题,数据是从数据库取的,所以,返回的数组的key名,就是数据库的字段名。

而数据呢,又是在数组的key名下面的数据,所以结构就类似下面这样:


最后想要的结果是:

起初,是想要 array_merge 来实现完成的,因为这个函数就是来做数组合并的发现。最后发现,如果想使用这个函数,就必须把数组里面的每个元素分开,所以,也就没打算使用这个方法了。

后面,使用 foreach + array_merge 来实现的时候发现 key 如果相关的话,前面的会被覆盖掉。

然后,想到了一个取巧的办法,就是先确定好一个数组【0】,然后在后面再接一个数组。然后,把数组放进这个数组里, 这样的话key,也不会存在重复了,而是会自动递增。

最后的效果就是,有一个key【0】的数组,有点不美观(优化的话只要用array_values 把数据取出来,我这里因为不需要这么优化,就不做了。

    

        $data = [];

        foreach($goodsMessage as $item) {

            $data = array_merge($data,$item['goodsMessage']);
            
        }


附上结果图:

上完成代码:

 $goodsMessage = [
            0 => [
                'goodsMessage' => [
                    0 => [
                        'id' => 0,
                        'age' => 0
                    ],
                    1 => [
                        'id' => 4,
                        'age' => 4
                    ],
                ]
            ],
            1 => [
                'goodsMessage' => [
                    0 => [
                        'id' => 1,
                        'age' => 1
                    ],
                    1 => [
                        'id' => 2,
                        'age' => 2
                    ],
                    2 => [
                        'id' => 3,
                        'age' => 3
                    ],
                ]
            ],
        ];

        foreach($goodsMessage as $item) {
            foreach ($item['goodsMessage'] as $v){
                    $data[0][] = $v;
            }
        }

 

11月 03

Idea SpringMVC+Spring+MyBatis+Maven整合框架搭建秒杀系统

因为工作繁忙的问题, 好久没写博客了 🙂

最近项目做完了, 也是闲的没事了,  因为公司另一个部门是使用Java开发的,  一直吹逼说Java比php安全, 效率高, 稳定之类的.  在下, 作为phper 怎么能忍,但是也不能无凭无据的怼。所以,自我学习一下Java看看到底哪里牛逼了。

学习路线  (楼主也只是上学出钱)  -> 

    1. Java的一些语法基础,(因为,有php基础所以基本就简单过了一遍)。

    2. Servlet的一些简单教程。(http请求、表单、cookie)之类的简单教程。

    3. Spring框架的一些理论知识点,主要是IoC和DI的相关知识点、事物管理

    4. SpringMVC框架,主要是看执行流程以及一些注解是使用。

    5. Mybatis框架, 主要是看了一些全局配置的配置和整合spring,在我的理解Mybatis就相当一个数据库链接驱动。

 

 相关知识点看完之后,就打算找一个项目试试手,在网上正好看到一个秒杀系统,正是用ssm的框架进行开发的,所以,在这里正好也记录一下,开发旅程。

     环境和开发工具:windows10 64位  idea 2017.3 。

     框架版本:是基于Maven 最新环境的,如下,  jdk1.8 Tomcat8.0  Spring 3.0  Spring MVC 4.3.7 Mybatis 3.4.2。

先用idea 配置搭建Maven:

    File -> new > Project -> 选择Maven,第二步要勾上之后,才能选择下列的maven-archatype-webapp选择,然后在next   


    GroupId : 就是改项目的名。

    ArtifactId:就是后面要打包的文件名。

    Version: 默认不变。然后后面两部可以一直next,下去,最后在finish

    

     

    然后, 根目录下就会有一个pom.xml文件, 这个文件就是配置Maven 包依赖的文件。为了不让文章显得杂余,我这里使用外链。

    >改项目pom.xml 配置文件,感觉也是基本的ssm的框架配置文件

      https://gitee.com/slgz/seckill/blob/master/pom.xml

        

    Idea 默认好像是不会自动import的,所以这里手动一下pom.xml 文件选择Maven -> Reimport ,时间长短,看自己的网速。等完成之后就会显示如下信息

    当然, ide给我们创建的项目,是缺少文件的。这里,我们在自己手动创建几个文件

    src/main/Java : 这里就是java源代码的文件夹,注意:这里要定义为Resources类型文件

    src/main/resources:这里就是相关的配置文件注意:这里要定义为Resources类型文件

    在一样的新建test的文件夹,

    src/main/Java

    src/main/resources

    接下来就是一些相关的配置顺序流程了,这里就不一一描述了,就说一下流程吧。

    先是配置Mybatis相关文件:

        在src/main/java/org/seckill类下,以下简称(seckill类)。

            以下,统一规定:命名规范就是,首字母大写 , 包中的geter seter toString方法,都可以通过idea的快捷键 Alt+INS 快捷键完成。

            新建entity 实体包,  此包就是定义数据库里对应的字段以及类型,并实现seter geter 方法  toSting方法。

            然后,新建Dao包,  此包就是实现entiry的实现类,定义 sql 方法名,注意,这里只是定义方法名,方法参数,类型。并不具体实现,具体实现后面再说

            

       在src/main/resources下新建spring文件夹,在spring文件夹里新建 spring-dao.xml文件,这里就是为了整合Mybatis过程。

             主要是配置过程:

                    1.   配置数据库相关的参数properties属性,这里就在 resources 目录下直接新增 jdbc.properties  文件,此文件是数据库的链接地址, 以及账号 密码等配置
                    2.   配置数据库连接池,主要还是通过c3p0完成链接。

                    3.   配置SqlSessionFactory对象,这里是关键主要完成的是。链接第二步的连接池,配置mybatis-config.xml 文件, 自动扫描entity包  , 自动扫描sql配置文件包,

                            这里就要在resources下新建mapper文件夹, mapper问价主要完成是具体sql语句的编写,因为mybatis就是通过原生sql来访问的。

                    4.  最后异步就是配置,动态mapper接口包,动态实现mapper接口。


        到这里基本的mybatis整合配置文件,为止。



        接下来配置Service包,在 resouces/spring 下新建spring-service.xml 文件夹, 主要就是配置spring的事务管理器。


        

        最后一部就是配置SpringMVC和spring的整合, 其实SpringMVC和spring是天然一体的, 天生就是在一起的。

        易于项目好维护, resources/spring  下新建 spring-web.xml 文件。

              主要配置:

                    1. 开启SpringMVC注解模式。

                    2. 静态资源默认Servlet配置,如js / css/ image

                    3. 配置jsp显示ViewResolver。

                    4. 一样的,自动扫描web相关的bean。



        至此,ssm框架整合的基本算是完成了。

            以此的顺序是:     Mybatis    ->  Spring   -> SpriongMVC


        


                    

           最后附上已经做完的项目链接:

                    https://gitee.com/slgz/seckill.git 

        

        

2月 18

php二维数组根据某个key相同合并数组

起初的原因是一个朋友,问我如下代码能不能把id相同的能不能合并成一个数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$a= [
    0=>[
     'id' =>1,
     'name'=>'技术部',
     'job'=>'后台开发'
    ],
    1=>[
     'id' =>1,
     'name'=>'技术部',
     'job'=>'前端开发'
    ],
    2=>[
     'id' =>2,
     'name'=>'设计部',
     'job'=>'UI设计师'
    ],
];

一开始我打算先取出 所有id 放在一个数组中,因为不想用循环所以打算用 array_column() 函数,取出id再去重在当做key使用,结果发现我家里安装的是php5.4的不支持。这个函数5.5才支持。。
于是,我去查了一下数组的手册就又想到个办法,发现实际上,我最终的想法还是哪 id 来做文章,所以我想何不直接循环用取id当key ?
所以代码如下,其实非常的简单。。比我一开始想的判断还简单很多,

1
2
3
4
$res = [];
foreach ($a as $k => $v) {
    $res[$v['id']][] = $v;
}

最终的效果
插图“>

———————————————————————–分割线——————————————————————————————————————–

新需求。说分类,意思就是下面这个样子,其实也很简单。。只要在上面原有的更改一下就行了,
// 部门一
// –职位一
// –职位二
// –职位三
// 部门二
// –职位一
// –职位二

1
2
3
4
foreach ($a as $key => $val) {
       $result[$val['id']]['name']   = $val['name'];
       $result[$val['id']]['job'][]  = $val['job'];
  }

最终的效果

插图“>

2月 08

centos6.5 安装swoole扩展

swoole是一个PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。

官网一共提供了两个方案,自主编译和pecl安装。但是感觉对我们这些小菜鸟并不是很友好,安装的时候出现的问题很多。所以我在这写个教程记录一下,也方便造福大众。:>

第一种PECL:
如果使用pecl的话就要使用phpize来生成php编译配置。所以如果没有安装过的同学,就需要先 yum install php-devel ,因为 php-devel 里面包括phpize,要查看phpize是否安装成功的方法也很简单。which phpize null
接下来还要继续安装pcre-devel zlib-devel和 yum install pcre-devel zlib-devel
提示complete 则代表安装成功。
接下来将可以愉快的 pecl install swoole了。如果出来如下图显示,则就代表安装完成。接下来就去php.ini 添加即可null