解决tuples must be non-null错误

环境:

CentOS7

Java8

PostgreSQL11

程序:

Spring Boot + Druid

运行程序报NullPointerException:tuples must be non-null

网上搜不到解决方法,看来是个只有自己才犯的sb错误。

经尝试,是数据库版本太高导致。安装pg10解决问题。

CentOS安装Java

说那么多都没用,简单粗暴

yum install java

linux学习随手记

记忆力不好,命令什么的根本记不住,所以记录下来吧,学点记点。

创建文件夹
mkdir xx
删除文件夹
rm -rf xx
删除文件
rm -f xx

解压zip
unzip jas.zip -d /usr/local/jar/

设置文件夹及子文件文件夹权限
chmod -R 777 xx

运行sh
./xxx.sh

查看某端口占用情况
lsof -i:8000

杀死进程
kill -9 进程pid

从末尾查看文件
tail -f xxx

 

连ftp报500 OOPS: priv_sock_get_result解决方法

今天连ftp突然连不上了,报500 OOPS: priv_sock_get_result

我以为我密码输错了,试了好多都不行,急哭我。

后来上网一搜,是需要升级pam。

yum update pam

什么破事都要发博客吗?!

CentOS安装Redis

由于CentOS官方yum源里面没有Redis,需要安装一个第三方的yum源,这里用了Fedora的epel仓库
yum install epel-release

安装Redis
yum install redis

启动Redis
service redis start

设为开机启动(我也不知道好不好用模仿的其他设开机启动)
systemctl enable redis

yum install真是太方便辣,还要gcc编译的真是太麻烦了

CentOS安装PostgreSQL

https://yum.postgresql.org/repopackages.php

挑选一个版本,比如11,CentOS 7 – x86_64,复制链接

安装yum源
yum install https://download.postgresql.org/pub/repos/yum/testing/11/redhat/rhel-7-x86_64/pgdg-centos11-11-1.noarch.rpm
安装PostgreSQL
yum install -y postgresql11-server postgresql11-contrib
初始化数据库
/usr/pgsql-11/bin/postgresql-11-setup initdb

启动数据库
systemctl start postgresql-11
开机自启
systemctl enable postgresql-11

配置远程访问
vi /var/lib/pgsql/11/data/postgresql.conf
将listen_addresses = 'localhost'
改为listen_addresses = '*'

设置允许访问ip
vi /var/lib/pgsql/11/data/pg_hba.conf
在IPv4 local connections下方添加允许连接的IP
如果想允许所有IPv4地址,则加入一行host all all 0.0.0.0/0 md5
(此处用户不应all,应单个用户单个用户添加,postgres用户不应外网也可访问)
重启数据库
systemctl restart postgresql-11.service

修改默认用户密码

PostgreSQL安装后会创建一个用户,名为postgres。

su - postgres 切换至用户。
psql -U postgres 登录数据库。 
ALTER USER postgres with encrypted password 'xxx'; 设置默认用户postgre的密码,此处密码为xxx,可自行修改。 
\q 退出数据库。 
exit 退出用户。

创建新用户

su - postgres
psql
创建新用户
CREATE USER zhuqiaochu WITH PASSWORD '*****';
创建数据库
CREATE DATABASE exampledb OWNER zhuqiaochu;
将exampledb数据库的所有权限都赋予dbuser
GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;

 

参考:

https://blog.csdn.net/DaSo_CSDN/article/details/75330009

https://blog.csdn.net/zhangzeyuaaa/article/details/77941039

WordPress优化之路(Memcache、Batcache)

网上说法是:

由于 WordPress 默认支持 Object Cache,所以在 WordPress 实现 Memcached 就是使用 Memcached 把 WordPress 的 Object Cache 写到内存中去,下次直接从内存中读取。相比直接从数据库去读取数据,或者从 Object Cache 数据存到文件,然后从硬盘中读取,Memcached 有很大的速度优势。

WordPress 启用 Memcached 这样的内存缓存之后,每次访问 WordPress 页面,都要从内存中获取多个缓存对象。

而 Batcache 主要就是解决这个问题,它是基于 Memcached 的 WordPress 缓存插件,它的工作原理是:把当前整个页面作为一个对象缓存到内存中,这样再次访问 WordPress 页面的时候,直接获从内存中获取这个对象即可,速度极快。

个人理解:

WordPress默认的Object Cache这种缓存机制是把缓存的内容用类似key-value这种形式存到数据库里,Memcache则直接存到内存中,加快了读取速度。

Batcache则更进一步,直接把整个页面缓存到内存中,下次访问直接从内存中取页面,速度更加快。

安装Memcache

which memcached                       //如果已经安装,会有“/usr/bin/memcached”类似的输出
php -m | grep memcache                //如果已经安装,会显示memcache,否则没有输出
yum search memcached                  //检查有没有安装包,有了可以执行第三部
yum -y install memcached
yum -y install php-pecl-memcache      //memcache关联php
pecl install memcache          //如果需要php扩展,就用下面这个命令
若提示“ERROR: `phpize' failed”这样的报错,再安装php-devel
yum install php-devel

配置php.ini文件:
打开/etc/php.ini文件,添加一行来载入memcache扩展:
extension=memcache.so
chkconfig memcached on
启动,停止,重启
service memcached start
service memcached stop
service memcached restart

安装好以后,还需要重启apache
httpd -k restart

可以访问phpinfo()页面,来看看是否安装成功。

安装成功会显示如下:

安装Memcache插件

网上说的方法是下载然后上传到指定目录,但我觉得可能直接从插件库里安装也会好用的。

PHP Memcache 扩展:http://wordpress.org/extend/plugins/memcached/
PHP Memcached 扩展:https://wordpress.org/plugins/memcached-is-your-friend/

把下载的:object-cache.php 复制到 wp-content

我装的是Memcache,所以下的第一个。后来看网上说Memcached是新版本,性能更好。

安装Batcache插件

直接在WordPress插件库里搜索batcache,安装。

在线编辑advanced-cache.php源码

var $max_age =  604800; // Expire batcache items aged this many seconds (zero to disable batcache)

var $remote  =    0; // Zero disables sending buffers to remote datacenters (req/sec is never sent)

var $times   =    1; // Only batcache a page after it is accessed this many times... (two or more)
var $seconds =  0; // ...in this many seconds (zero to ignore this and use batcache immediately)

max_age代表缓存过期时间(以秒为单位),times表示访问多少次才创建缓存(2是最小值),seconds表示在多少秒之后才创建缓存(0表示立即)。

 

至此折腾结束,至于效果如何,明天看看吧。。洗漱碎觉

 

参考:

https://www.cnblogs.com/kenshinobiy/p/7398765.html

https://blog.csdn.net/doubleface999/article/details/55798750

http://blog.wpjam.com/m/wordpress-memcached/

http://blog.wpjam.com/m/batcache/

http://www.daniao.org/72.html

 

Android分屏(双屏异显)

新来个机器,双屏幕金融终端,作为一个金融终端,连个非接读卡器都没有也是醉了,读卡写卡全靠NFC。。

既然要分屏,就研究一下分屏显示吧。

获取设备上的屏幕

DisplayManager mDisplayManager;
Display[]  displays;
mDisplayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE);
displays = mDisplayManager.getDisplays();

其中主屏是displays[0],副屏是displays[1]

新增类继承Presentation,用来显示副屏

Presentation继承自Dialog,用起来和Dialog挺像。

public class SplashSubScreen extends Presentation {
    public SplashSubScreen(Context outerContext, Display display) {
        super(outerContext, display);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xx);
    }
}

显示副屏

mSplashSubScreen = new SplashSubScreen(this, displays[1]);
mSplashSubScreen.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mSplashSubScreen.show();

运行发现崩溃报错:

BadTokenException: Unable to add window android.view.ViewRootImpl$W@2cb086cf — permission denied for window type

不知道是不是因为我这App全屏运行原因导致的,解决方法是加入权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Presentation的DataBinding

Presentation是继承自Dialog,所以按照Dialog的data binding方法即可。

mSubScreenSplashBinding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), R.layout.sub_screen_splash, null, false);
setContentView(mSubScreenSplashBinding.getRoot());

 

 

参考:

https://blog.csdn.net/wlwl0071986/article/details/48542923

https://stackoverflow.com/questions/34967868/how-to-use-data-binding-in-dialog

尝试解决WordPress长时间不访问失去响应问题(失败。。)

最近发现WordPress长时间不访问,Nginx会报504错误,再访问几次就可以正常访问。猜想可能是MySQL长时间不访问断开连接导致。所以第一步先把WordPress日志打开。

修改配置文件wp-conifg.php

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );

日志文件在wp-content目录下。

等八个小时候再次访问看看日志是否记录了有用的信息。

参考:

http://www.wpbeginner.com/wp-tutorials/how-to-set-up-wordpress-error-logs-in-wp-config/

CentOS7安装Nginx及二级域名转发

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安装
sudo yum install -y nginx

设置开机运行
sudo systemctl enable nginx.service

启动
sudo systemctl start nginx.service

重启
nginx -s reload


编辑配置文件
vim /etc/nginx/nginx.conf

在域名服务商设置二级域名解析,解析到服务器ip。服务器80出口是Nginx,Nginx配置二级域名转发。

server {
    listen       80;   
    server_name  *.truestudio.tech;  

    if ($http_host ~* "^(.*?)\.truestudio\.tech$") {
        set $domain $1;
    }  

    location / {  
        if ($domain ~* "zhuqiaochu") {
           proxy_pass http://localhost:81;
        }
        if ($domain ~* "www") {
           proxy_pass http://localhost:82;
        }
        tcp_nodelay     on;
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        root   html;
        index  index.html index.htm;
    }
}

 

参考:

https://www.cnblogs.com/songxingzhu/p/8568432.html

https://www.jb51.net/article/113997.htm

https://blog.csdn.net/Metropolis_cn/article/details/73613022?locationNum=7&fps=1