pagehelper-spring-boot-starter配置多数据源的分页


需求:同时连接Mysql和Oracle两个数据源,需要配置自动分页。

首先参考:https://www.cnblogs.com/xuwujing/p/8964927.html

补充说明,按照参考文档进行配置后,还是无法正确解析Oracle和Mysql的分页,所以,最终放弃通过application.yml配置文件进行配置,直接在Mysql和Oracle的SessionFactory分别写死如下代码:

Interceptor interceptor = new PageInterceptor();
Properties properties = new Properties(); properties.setProperty(“helperDialect”, “mysql”);//Oracle数据库时设置为oracle properties.setProperty(“reasonable”, “true”); interceptor.setProperties(properties);
sessionFactory.setPlugins(new Interceptor[] {interceptor});

最后SpringBoot启动时,设置排除自动配置:

@SpringBootApplication(exclude = PageHelperAutoConfiguration.class)

总结,两个数据源总的思路是:分别设置Mysql文件解析目录,设置不同的Mybatis配置,对应不同的sessionfactory和事务管理器,然后在sessionfactory中对pagehelper的方言进行正确设置,即可正在在两套数据源中分别进行切换。服务层调用Mapper的时候,是自动完成sessionFactory映射的,所以配置完后,在服务层调用的时候并不知晓数据的差异。

Advertisements

Oracle使用spool快速导出超大表


为了将Oracle的数据迁移到Mysql,使用Navicat类的工具迁移太慢,针对超1亿级别的个别表,使用spool先导出成CSV文件,然后在mysql中使用load命令装载CSV文件中的数据到表中。

注意点如下,一定要关掉命令输出,关掉之前,一秒钟1万条,关掉后,一秒钟大约20万条:

set SERVEROUT off
set TERM off

第二个注意点,要设置行的长度,防止换行,且需要设置截断行后多余的空白字符、防止分页

SET LINESIZE 2500
set trimspool on
set pagesize 0

outfile.sql文件命令如下:

set colsep ,
set feedback off
set heading off
set trimout on
set pagesize 0
set echo off
set SERVEROUT off
set TERM off
set trimspool on
SET LINESIZE 2500
spool /data/output.csv
select ‘”‘ || C1 || ‘”,”‘ || C2 || ‘”,”‘ || C3 || ‘”,”‘ || PKID || ‘”‘ from SCHEMA.TABLE_NAME;
spool off
exit

启动命令:

sqlplus -s user/password@orcl @outfile.sql

Mysql导入命令:

load data infile “/var/lib/mysql-files/output.csv” into table SCHEMA.TABLE_NAME fields terminated by ‘,’ enclosed by ‘”‘;

设置好行分割符和字段使用双引号括起来。

MongoDB仅更新指定字段


MongoDB更新时默认会丢弃未指定的字段,通过使用$set,可以仅更新指定字段。

Update Specific Fields
If the <update> document contains update operator modifiers, such as those using the $set modifier, then:
The <update> document must contain only update operator expressions.
The update() method updates only the corresponding fields in the document.
To update an embedded document or an array as a whole, specify the replacement value for the field. To update particular fields in an embedded document or in an array, use dot notation to specify the field.

更新语法示例:

db . product_ info . update( {publish_ name : “平台”},{$set: {push_address: “修改后”}})

CentOS 7.5离线安装Oracle 11gR2


操作系统:CentOS 7.5 64bit,安装方式为gnome Desktop,附加系统工具以及兼容X Window安装包
Oracle版本:11gR2

Oracle11gR2官方文档链接

安装系统建立默认用户的时候建立非oracle的账号。
由于是离线安装,使用ssh登录,上传CentOS DVD镜像文件,上传Oracle安装文件,之后直接操作服务器键盘鼠标进行安装。

1. 通过sftp上传文件
/Users/xieshaohu/Downloads
put /Users/xieshaohu/Downloads/CentOS-7-x86_64-DVD-1804.iso
put /Users/xieshaohu/Downloads/linux.x64_11gR2_database_2of2.zip
put /Users/xieshaohu/Downloads/linux.x64_11gR2_database_1of2.zip

2. 修改Linux为本地源
mkdir /media/CentOS
mount -t iso9660 /media/CentOS-7-x86_64-DVD-1804.iso /media/CentOS
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.old
mv /etc/yum.repos.d/CentOS-CR.repo /etc/yum.repos.d/CentOS-CR.repo.old
mv /etc/yum.repos.d/CentOS-Debuginfo.repo /etc/yum.repos.d/CentOS-Debuginfo.repo.old
mv /etc/yum.repos.d/CentOS-fasttrack.repo  /etc/yum.repos.d/CentOS-fasttrack.repo.old
mv /etc/yum.repos.d/CentOS-Sources.repo /etc/yum.repos.d/CentOS-Sources.repo.old
mv /etc/yum.repos.d/CentOS-Vault.repo /etc/yum.repos.d/CentOS-Vault.repo.old

3. 启用本地源
vi /etc/yum.repos.d/CentOS-Media.repo
enable = 1

4. 安装依赖
yum -y install elfutils-libelf-devel\
binutils \
compat-libcap1 \
compat-libstdc++*.i686 \
compat-libstdc++-33 \
gcc \
gcc-c++ \
glibc*.i686 \
glibc \
glibc-devel*.i686 \
glibc-devel \
ksh \
libaio*.i686 \
libaio \
libaio-devel-*.i686 \
libaio-devel \
libgcc*.i686 \
libgcc \
libstdc++*.i686 \
libstdc++ \
libstdc++-devel*.i686 \
libstdc++-devel \
libXi*.i686 \
libXi \
libXtst-*.i686 \
libXtst \
make \
sysstat \
unixODBC \
unixODBC-devel xhost xdpyinfo xorg-x11-xauth

5. 建立账户
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd -g 502 dba
/usr/sbin/groupadd -g 503 oper
/usr/sbin/groupadd -g 504 asmadmin
/usr/sbin/groupadd -g 506 asmdba
/usr/sbin/groupadd -g 505 asmoper
/usr/sbin/useradd -u 502 -g oinstall -G dba,oper oracle
passwd oracle

6. 设置用户组
/usr/sbin/usermod -g oinstall -G dba,oper,asmdba oracle

7. 修改内核参数
vi /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

sysctl -p

8. 创建安装目录
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle/product/11.2.0/db_home1
chown -R oracle:oinstall /u01/
chmod -R 775 /u01/

9. 修改/etc/security/limits.conf
vi /etc/security/limits.conf
oracle soft nofile 1024
oracle hard nofile 65536

10. 配置全局环境变量
/etc/profile
if [ $USER = “oracle” ]; then
if [ $SHELL = “/bin/ksh” ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

11. 配置Oracle环境变量
vi /home/oracle/.bash_profile
export DISPLAY=:0.0
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_SID=orcl; export ORACLE_SID
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_home1; export ORACLE_HOME
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/ust/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jre:$ORACLE_/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

12. 禁用selinux
vi /etc/selinux/config
disabled

13. 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

14. 登录oracle账号,执行安装
./runInstaller

重要提示:安装过程中,如果碰到安装界面显示灰色遮盖,一直卡住不动,直接回车。出现次现象的原因是由于提示信息窗口没有展开显示,导致待确认操作。安装过程中一共出现三次此现象,前两次直接回车。最后一次是在数据库实例创建完毕后,把鼠标放到遮盖的窗口上拉开,按照提示执行两个脚本。最后即可安装完成。

Nginx配置图片服务器


前端网站需要显示图片,在Nginx配置了一个imagelib URL过滤器,用于拦截图片请求,直接读取图片文件进行回显
server {
listen 80;
server_name 10.132.252.121;
access_log /var/log/nginx/default.access.log main;
location / {
root /data/html;
index index.html index.htm;
}
location ^~ /imagelib {
expires 24h;
root /data/imagelib/;
access_log /var/log/nginx/images.access.log;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /data/imagelib/;
proxy_redirect off;
proxy_set_header Host 127.0.0.1;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
}
}

 

解决Elasticsearch中文搜索只能搜索单个汉字,不能搜索词语的问题


问题原因:ES默认分词规则不能支持中文,通过安装IK Analysis for Elasticsearch支持中文分词。

重要提示:不能再已经导入数据的index中修改mapping,所以建立index之后立即配置分词器字段,然后再导入数据。

  1. 首先从https://github.com/medcl/elasticsearch-analysis-ik/tree/master下载ES对应版本的IK插件进行安装,安装方法参考链接中的文档。
  2. 使用以下命令重新创建一个Index

    curl -XPUT http://localhost:9200/cdh_es

  3. 设置需要使用IK分词器的字段,其中cdh_es是index,testdata是type,desc是需要进行IK分词的字段。

    curl -XPOST http://localhost:9200/cdh_es/testdata/_mapping -d ‘{“properties”: {“desc”: {“type”: “text”, “analyzer”: “ik_smart”, “search_analyzer”: “ik_smart”}}}’

  4. 其中分词有两种设置方法,ik_max_word和ik_smart,他们的区别如下,可以根据自己项目的情况进行选择:

    ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

    ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

  5. 添加数据后就能进行查询了。

 

macOS 盒盖休眠掉电解决办法


2018款MacBookPro,盒盖总是会掉电2%-8%不等。

2018-12-13更新:

恢复tcpkeepalive为1,按照如下方式设置免打扰模式,也能解决掉电问题,昨晚上测试,一个晚上没有掉电。系统版本10.14.2

以下方法废弃,因为关闭tcpkeepalive会禁用find my Mac功能,现在使用上面的设置免打扰的功能进行节电。

–分割线–

使用pmset命令修改tcpkeepalive,降低耗电量。默认是 1 ,打开状态,通过pmset命令修改为0

$ pmset -g custom

设置为关闭,-b参数为仅设置电池模式tcpkeepalive关闭,关闭tcpkeepalive时会出现如下警告信息,直接忽略

$ sudo pmset -b tcpkeepalive 0

Warning: This option disables TCP Keep Alive mechanism when sytem is sleeping. This will result in some critical features like ‘Find My Mac’ not to function properly.

修改完之后结果如下:

$ pmset -g custom
Battery Power:
lidwake 1
standbydelayhigh 86400
standbydelaylow 10800
standby 1
proximitywake 0
ttyskeepawake 1
Standby Battery Threshold 50
powernap 0
gpuswitch 2
hibernatefile /var/vm/sleepimage
hibernatemode 3
displaysleep 2
sleep 1
tcpkeepalive 0
halfdim 1
acwake 0
lessbright 1
disksleep 10
AC Power:
lidwake 1
standbydelayhigh 86400
standbydelaylow 10800
standby 1
proximitywake 1
ttyskeepawake 1
hibernatemode 3
powernap 1
gpuswitch 2
hibernatefile /var/vm/sleepimage
Standby Battery Threshold 50
womp 1
displaysleep 10
networkoversleep 0
sleep 1
tcpkeepalive 1
halfdim 1
acwake 0
disksleep 10