2021年9月22日
下载的docker镜像默认存储路径是/var/lib/docker .具体的镜像文件就在containers文件夹中
docker save -o d:/docker/zen.tar easysoft/zentao:15.5
docker run -d -p 80:80 \
-e adminer_user="admin" -e adminer_passwd="qqzj126" -e mysql_root_password=qqzj126 \
-e bind_address="false" \
-v /opt/data/zbox/:/opt/zbox/ \
-v /opt/mysqldata:/var/lib/mysql \
--name zentao-server \
easysoft/zentao:15.5
docker logs -f
2021年6月1日
运行命令(注意路径)
java -jar /web/share-book.jar > /web/log.txt &
该命令的意思是:执行share-book.jar这个文件,并且输出到log.txt文件,&表示后台运行
解决更新项目带来的频繁重启操作,创建2个脚本
start.sh
#! /bin/bash
#注意:必须有&让其后台执行,否则没有pid生成 jar包路径为绝对路径
java -jar /web/share-book.jar > /web/log.txt &
# 将jar包启动对应的pid写入文件中,为停止时提供pid
echo $! > /web/pid.txt
stop.sh
#! /bin/bash
pid=$(cat /web/pid.txt)
kill -9 $pid
启动项目:./start.sh
停止项目:./stop.sh
2021年4月19日
一.问题描述:windows本地调试hadoop程序时报错错误信息:
其原因是需要在windows本地搭建hadoop环境,下载winutils文件,并将hadoop-2.8.4包内的bin文件替换,将下载文件中hadoop.dll放到c:\windows\system32下
二.解决过程如下:
1.下载hadoop,去凯发k8网页登录官网下载对应的hadoop版本,我在linux集群搭建的是hadoop-2.8.4,因此将hadoop-2.8.4下载到windows本地
https://www.jianshu.com/p/a65a95108620
2021年1月14日
如果不配置.gitignore的文件,带push代码的时候就会把一写不必要的文件push到远程仓库,如.idea文件。如果不小心出现此文件在远程仓库可以通过一下步骤delete此文件:
1.配置.gitignore文件(新建/编辑)
echo '.idea' >> .gitignore
2.将.gitignore文件上传到远程仓库
git pull git add .gitignore git commit -m 'edit .gitignore' git push origin master
3.删除git的.idea文件
git rm --cached -r .idea
4.同步到远程仓库
git commit -m 'delete .idea' git push origin master
完成之后就可以发现git仓库中的.idea文件已经被删除,而且之后push代码也不会再把.idea文件上传。
ps:我在使用pycharm编写python代码,一般是通过new -> .ignore file -> .gitignore file
自动生成.gitignore文件。
下面是我自己比较常用的.gitignore文件简短配置:
.project .settings/ .prefs .pydevproject .idea/ .idea .ds_store .cache *.pyc *.html *.xlm
2020年12月1日
1、java heap space 一次申请太大的内存空间
2、gc overhead limit exceeded 创建太多的对象,gc收集不完
2020年11月19日
摘要:
2020年11月17日
1、 vim /etc/rc.d/rc.local
2、添加内容
export java_home=/usr/java/jdk1.8.0_111
/app/tomcat/bin/startup.sh start
3、
chmod 777 /etc/rc.d/rc.local
2020年10月30日
/**
* synchronized 放在普通方法上,内置锁就是当前类的实例
* @return
*/
public synchronized int getnext() {
return value ;
}
/**
* 修饰静态方法,内置锁是当前的class字节码对象
* sequence.class
* @return
*/
public static synchronized int getprevious() {
//return value --;
return 0;
}
2020年8月31日
1、数据库配置
首先使用canal需要修改数据库配置
[mysqld]
log-bin=mysql-bin # 开启
binlog binlog-format=row # 选择 row 模式
server_id=1 # 配置 mysql replaction 需要定义,不要和 canal 的 slaveid 重复
创建canal数据库用户
create user canal identified by 'canal';
grant select, replication slave, replication client on *.* to 'canal'@'%';
flush privileges;
2、安装canal
下载:
解压(修改版本号):tar zxvf canal.deployer-1.1.4.tar.gz -c ./canal
配置开放服务器端口:11110、11111、11112
修改canal配置文件(这里设置了两个instance,即两个数据库):
vi canal/conf/canal.properties
canal.destinations = example1,example2
配置instance:
cp -r canal/conf/example conf/example1
mv conf/example conf/example2
第一个数据库配置
vi canal/conf/example1/instance.properties
canal.instance.master.address=32.1.2.140:3306
第二个数据库配置
vi canal/conf/example2/instance.properties
canal.instance.master.address=32.1.2.140:3307
#如果需要新增一个instance,只需要修改canal.properties文件,并新增一个instance配置即可,无需重启canal。
运行:
sh canal/bin/startup.sh # 查看日志
cat canal/logs/canal/canal
3、java使用样例
引入pom依赖,需要与安装的canal版本一致
com.alibaba.otter canal.client 1.1.4
示例代码(异步打印两个数据库的修改内容):
package cn.spicybar.dblog; import com.alibaba.otter.canal.client.canalconnector; import com.alibaba.otter.canal.client.canalconnectors; import com.alibaba.otter.canal.protocol.canalentry.entry; import com.alibaba.otter.canal.protocol.canalentry.entrytype; import com.alibaba.otter.canal.protocol.canalentry.rowchange; import com.alibaba.otter.canal.protocol.message; import java.net.inetsocketaddress; import java.util.list; public class canalclient { public static void main(string[] args) { new thread(() -> initconnector("example1")).start(); new thread(() -> initconnector("example2")).start(); } private static void initconnector(string destination) { canalconnector connector = canalconnectors.newsingleconnector(new inetsocketaddress("32.1.0.237", 11111), destination, "", ""); try { connector.connect(); connector.subscribe(".*\\..*"); connector.rollback(); while (true) { message message = connector.getwithoutack(1000); if (message.getid() != -1 && message.getentries().size() > 0) { printentry(message.getentries()); } connector.ack(message.getid()); } } finally { connector.disconnect(); } } private static void printentry(list entries) { for (entry entry : entries) { if (entry.getentrytype() == entrytype.transactionbegin || entry.getentrytype() == entrytype.transactionend) { continue; } try { rowchange rowchange = rowchange.parsefrom(entry.getstorevalue()); system.out.println(rowchange.getsql()); } catch (exception e) { throw new runtimeexception("error ## parser error, data:" entry.tostring(), e); } } }
2020年8月7日
public int binarysearch(long value) {
int middle = 0;
int low = 0;
int pow = arr.length;
while(true) {
middle = (pow low) / 2;
if(arr[middle] == value) {
return middle;
} else if(low > pow) {
return -1;
} else {
if(arr[middle] > value) {
pow = middle - 1;
} else {
low = middle 1;
}
}
}
}