记录_20190712

mysql修改root用户密码

1、进入mysql
=》mysql -uroot -p

2、修改密码(两种方式)

其一
1) 修改root的localhost本地访问密码
=》set password for root@localhost = 'qtqwuuowei@2019';

其二
1) use mysql;
=》进入数据库

2) update user set authentication_string= password('qtqwuuowei@2019') where host = '%' and user = 'root';
=》修改root的远程主机访问密码
=》(备注:需要先选择数据库,否则会报错)

3、刷新权限
=》flush privileges;

修改密码遇到的问题

1)error 1054 (42s22): unknown column 'password' in 'field list'
=》password字段在5.6及其以上版本改成了authentication_string

2)linux上密码修改生效,登陆时要用新密码,而客户端连接工具用旧密码仍然可以登陆
=》mysql针对于root有两个主机,一个是localhost(本地主机),一个是%(远程主机)

mybatis动态sql

1)mybatis里面的判断数组长度
=》list用size或size()
=》字符串数组用length,不能用length()

idea之gradle配置

cause: org.jetbrains.plugins.gradle.tooling.util.modulecomponentidentifierimpl.getmoduleidentifier()
=》gradle版本导致的,如果你是使用的idea内置的gradle,那么你就从网上下个4.8版本的,然后指定本地gradle的安装目录即可;

启动mongodb

ps aux | grep mongo
kill -9 10363
=》找到mongod进程,并kill他

mongod --dbpath /data/db
=》在该数据目录(默认目录)启动mongd

nohup mongod --dbpath /data/db >> /opt/log/mongodb.log 2>&1 &
=》让mongod在后台运行
=》必须按照这个格式来,后面的“2>&1 &”得加上,否则会出现一系列问题,如:进程启动了,但是mongo连接不上,一直在等待中
=》启动服务那招不行,mongod似乎没有服务
=》命令对大小写敏感,不能用大写

mongo
=》连接到服务器

mongodump是一个命令行工具。而不是使用mongo,输入mongodump。
mongodump是一个可执行文件mongo,你需要在os shell中执行它,而不是在mongodb shell中执行它:

mongorestore -h 127.0.0.1:27017 -d paintingstone_db /opt/mydata/mongodb/paintingstone_db
=》还原mongodb数据库,执行成功

mongorestore -h localhost:27017 -d paintingstone_db /opt/mydata/mongodb/paintingstone_db
=》未找到主机,不能用localhost

mongodb还原时会自动新建数据库

mongodump -h 127.0.0.1 -d paintingstone_db -o /opt/mydata

mongodump -h 127.0.0.1 -d paintingstone_db -o /opt/backup/mongodb/$(date +%y%m%d_%h%m%s)

mongodb备份与mysql不同的是,mongodb备份文件为文件夹格式,而mysql为.sql格式

数据库常见异常

; bad sql grammar []; nested exception is java.sql.sqlexception: operand should contain 1 column(s)
=》in子查询

sql打印时,parameters就是代表哪些占位符的值

如果想授予root在任意主机访问数据库的权限 grant all privileges on . to 'root'@'%' identified by '123456' with grant option;
=》这个操作执行完之后会出现一句提示:ignoring query to other database,但是密码已经修改成功,修改的是远程主机访问密码,本地访问密码没有修改

mysql

mysql的安装目录为:/var/lib/mysql

定时备份mysql数据库

新建mysql_data_bak.sh文件,写入以下代码:
mysqldump -uroot -p123 paintingstone_db> /opt/backup/mysql/blod_$(date +%y%m%d_%h%m%s).sql

开启该文件的全部权限
chomd 777 mysql_data_bak.sh

vim /etc/crontab
=》修改定时任务配置文件,写入以下代码:
00 01 * * * root /opt/backup/mysql_data_bak.sh

service cron restart
=》重启定时任务服务

/etc/init.d/cron restart
等同于
service cron restart

mysqldump: [warning] using a password on the command line interface can be insecure.
=》mysql备份时给我的提示,只是警告,不是错误

启动redis报错

启动redis用service redis start即可,再用redis-cli命令连接到服务器

io.lettuce.core.rediscommandexecutionexception: misconf redis is configured to save rdb snapshots, but is currently not able to persist on disk. commands that may modify the data set are disabled. please check redis logs for details about the error.
=》在往redis写入数据时抛出该异常,解决方案如下:

tail /var/log/redis/redis-server.log
=》查看最新10条日志,找到以下信息:
=》failed opening .rdb for saving: read-only file system

解决办法:
连接到redis服务器(redis-cli),输入以下命令:
=》config set stop-writes-on-bgsave-error no


等待归类区域

前台传递字符串,后台用list或者string[]都可以被解析为数组的

markdownpad2

行首四个空格
=》添加代码

nano和vim都可以编辑文件,nano是新手入门用的,功能没有vim那么齐全

晚上或周末也可以安排面试,提前沟通比较好

var $li = $(".pay-list").find("li.selected");
=》找到某个带有selected类样式的li元素

素材

{"口味":["原味", "奶油", "岩烧", "咸香"], "包装":["手袋单人份", "礼盒双人份", "全家福礼包"]}

{"口味":"原味","包装":"手袋单人份"}
{"口味":"原味","包装":"礼盒双人份"}
{"口味":"原味","包装":"全家福礼包"}

{"口味":"奶油","包装":"手袋单人份"}
{"口味":"奶油","包装":"礼盒双人份"}
{"口味":"奶油","包装":"全家福礼包"}

{"口味":"岩烧","包装":"手袋单人份"}
{"口味":"岩烧","包装":"礼盒双人份"}
{"口味":"岩烧","包装":"全家福礼包"}

{"口味":"咸香","包装":"手袋单人份"}
{"口味":"咸香","包装":"礼盒双人份"}
{"口味":"咸香","包装":"全家福礼包"}

5cf755de3ae93536c8153724

后台controller返回body中的内容,如果之前使用表单提交的,那么前台接收到controller返回结果,会自动跳转页面;

调用支付宝支付接口

调取支付宝支付接口,后台会返回form表单

<form name="punchout_form" method="post" action="https://openapi.alipaydev.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=pda1j7wbdaypdb%2b46afr3ejsg8pvbl8xbogquv2nkt13olxvkomb1fe45%2fvkfvujptg91x3h3c7ie8hp4pdpg9othlmyctu9saqlayk6iaepepfcletzo5jbwbgn7tcsw99gdy42gbncpzzdgeenwh96pslfplf3exomkssh17kokwv6gf4o98zx4zx9jd0ghukp9egu0k%2bz5arpddz0blgijqapk8s2645vrnftoakl7xcjwfi69ivwlw2eushywjjzt6a%2bttdsdz2bxkecrzpekwdgjusnrhtwecwjwdtzi%2bm5wykatt%2fvyyn3byaemfz0e8bakeumf7tq3fza8w%3d%3d&return_url=http%3a%2f%2f%c3%8d%c3%a2%c3%8d%c3%b8ip%3a%c2%b6%c3%8b%c2%bf%c3%9a%2fsccess.html&notify_url=http%3a%2f%2f%c3%8d%c3%a2%c3%8d%c3%b8ip%3a%c2%b6%c3%8b%c2%bf%c3%9a%2ferror.html&version=1.0&app_id=2016092600598504&sign_type=rsa2&timestamp=2019-06-27+17%3a09%3a04&alipay_sdk=alipay-sdk-java-3.1.0&format=json">
<input type="hidden" name="biz_content" value="{&quot;body&quot;:&quot;红魔手机 努比亚出品游戏手机&quot;,&quot;out_trade_no&quot;:&quot;dzcp100010001&quot;,&quot;product_code&quot;:&quot;fast_instant_trade_pay&quot;,&quot;subject&quot;:&quot;红魔手机&quot;,&quot;timeout_express&quot;:&quot;10m&quot;,&quot;total_amount&quot;:&quot;0.1&quot;}">
<input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

那么前台怎么处理呢?
1、如果你前台直接是表单提交,非ajax,而后台直接返回form表单数据,那么前台接收数据后会自动跳转页面
=》因为后台返回的数据中写了js的表单提交代码

2、这种就是手里有form表单后,我该怎么跳转到支付宝支付页面
=》其实就是将这个form表单放在body里面,然后提交表单,页面就跳过去了
=》这里后台返回数据中那个js表单提交代码会失效,需要手动再写一次

var div=document.createelement('div');
div.innerhtml=res; // data就是接口返回的form 表单字符串
document.body.appendchild(div);
document.forms[0].submit();
调用支付宝支付接口遇到的问题

1、关于notifyurl和returnurl,我验证两者是否只有被设置外网时才能访问
=》notifyurl没有生效,returnurl生效
=》然后我将notifyurl改成外网地址,发现请求是生效的
=》于是得出结论,在开发测试时,notifyurl必须设置外网,而returnurl可以设置外网/内网

如果感觉到maven项目的编译文件没有改变,那么你可能是没有执行compile命令,执行完你会发现日志有很多信息输出的;
=》傻逼了,是我linux没有杀死正在运行的java程序进程

一个jar包在运行的时候,可以运行另一个jar包,在linux中,竟然没有出现端口被占用的错误

支付宝支付还是有问题的,我支付成功后,他没有提示,还呆在原地,但是支付状态确实已经改动了

natapp来内网穿透
notify_url这个页面是支付宝主动访问的,所有需要natapp来内网穿透,这是官网上截取的。

1、脸谱星球利息发放规则
存三个月,利息为10%
存六个月,利息为40%
存十二个月,利息为100%

支付宝支付验签失败

验签不是用应用公钥,而是要支付宝公钥
=》沙箱账号是有下支付宝公钥的,就在应用公钥旁边
=》意思是应用公钥主要是用来生成支付宝公钥的,其实他在项目中用不到,项目中要配置的是应用私钥和支付宝公钥

单独查看内存使用情况的命令:free -m
查看内存及cpu使用情况的命令:top
也可以安装htop工具,这样更直观,
安装命令如下:sudo apt-get install htop
安装完后,直接输入命令:htop
就可以看到内存或cpu的使用情况了。

前端访问后台接口,如果超过六秒就会自动断开,提示超时,后台会抛出一个异常:
=》org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
=》那么这个问题怎么解决呢,要让后台不抛出这个异常倒是没问题,我设置spring的超时时间即可,但是问题其实问题不在这,而在于这个接口的请求时间确实很长,为保证用户体验性,前台不能转圈太久。因此我们需要将该接口进行拆分,分好几个接口去查询数据。

消息队列发送消息

第一种

String message = GsonUtils.toJson(dbOrder);
String msgId = UUID.randomUUID().toString();
CorrelationData correlationData = new CorrelationData(msgId);
rabbitTemplate.convertAndSend(ExchangeConfig.EXCHANGE_01, RabbitMqConfig.ROUTING_KEY_1, message, correlationData);

第二种

String json = GsonUtils.toJson(dbOrder);
String msgId = UUID.randomUUID().toString();
// 将 msgId 和 message 绑定
Message message = MessageBuilder.withBody(json.getBytes())
                                .setContentType(MessageProperties.CONTENT_TYPE_JSON)
                                .setCorrelationId(msgId).build();
// 将 msgId 和 CorrelationData 绑定
CorrelationData correlationData = new CorrelationData(msgId);
rabbitTemplate.convertAndSend(ExchangeConfig.EXCHANGE_01, RabbitMqConfig.ROUTING_KEY_1, message, correlationData);

=================== 消费者 ===================
============== params ==============
以后注释就用这种形式,19个等于号

支付宝提示让我在支付回调接口中进行订单号、金额这种的验证,想了想确实没错,我之前是想在调用支付接口时去判断订单号与金额等,现在觉得支付接口去判断的话可能有点冗余,而在支付回调接口中进行判断后,如果支付信息有误,那么可以进行退款操作。

需要注意的是 支付宝的异步通知,每个订单的异步通知实行分频率发送:15s 3m 10m 30m 30m 1h 2h 6h 15h,也就是说一笔订单会回调你近10次左右,在处理订单业务逻辑的时候务必要注意去重处理

delete语句针对的表不能加别名
DELETE FROM tb_node_activity WHERE (SELECT COUNT(*) FROM tb_user_member um WHERE tb_node_activity.user_member = um.user_number) = 0;
月份判断

节点存币,每个月要在存币的日期给用户发放利息,那么用户在31号存的币,在后续月份没有31号那么怎么发放呢?
=》java自带的日期工具类有个方法是,当前日期加上月数等于哪个日期
=》所以31号存的币,小月时在30号会发放利息

哲学

圣人不死,大盗不止

rock climbing 攀岩

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.4/elasticsearch-2.4.4.tar.gz
=》wget命令可以从下载链接下载文件,这样就避免了从windows上面下载,下载的文件放在当前目录

所有的查询都会影响到文档的评分及排名。如果我们需要在查询结果中进行过滤,并且不希望过滤条件影响评分,那么就不要把过滤条件作为查询条件来用。而是使用filter方式:

无查询条件,直接过滤

如果一次查询只有过滤,没有查询条件,不希望进行评分,我们可以使用constant_score取代只有 filter 语句的 bool 查询。在性能上是完全相同的,但对于提高查询简洁性和清晰度有很大帮助。

adduser seconduser
=》添加用户

su root
=》切换用户

root切换至其他用户,无需输入密码
其他用户切换至root,需要输入密码

netstat -anp | grep 9200
=》查看正在运行的某个端口

ps aux | grep tomcat
=》查看正在运行的某个程序

我们主要更改ES的绑定ip和性能调优。
这里我们绑定了三个ip,并禁用掉删除全部索引的功能,同时针对ES的内存和缓存进行优化

bootstrap.memory_lock: true
index.cache.field.max_size: 50000
index.cache.field.expire: 30m
index.cache.field.type: soft

network.host: 101.37.*.25,10.29.*.58,127.0.0.1

action.disable_delete_all_indices : true

如果不以root用户启动ES,会出现很多问题,例如没有权限进入log文件--从而导致启动失败

方法一:在启动时指定变量
./elasticsearch -Des.insecure.allow.root=true

方法二:在elasticsearch可执行文件中指定变量
vi elasticsearch
// 找到ES_JAVA_OPTS在其后追加
ES_JAVA_OPTS="-Des.insecure.allow.root=true" 

jvm uses the client vm, make sure to run java with the server vm for best performance by adding -server to the command line

running as ROOT user. this is a bad idea!
Killed

Likely root cause: java.nio.file.AccessDeniedException: /opt/install-path/el
=》傻逼了,没有对用户赋予一定的权限
=》chown -R elasticsearch.es *

ES启动报错--没有权限进入某些文件的解决办法:
chown -R seconduser /opt/install-path/elasticsearch-2.4.4
chgrp -R seconduser /opt/install-path/elasticsearch-2.4.4
备注:那些什么将用户放在用户组里面,然后赋予R权限的办法没用

可以看到绑定了两个端口:
9300:集群节点间通讯接口
9200:客户端访问接口
我们在浏览器中访问:http://192.168.56.101:9200

chgrp(转变文件所属用户组)
chown(转变文件拥有者)
chmod(变动文件属性)

FATAL Error: [elasticsearch.url]: definition for this key is missing

删除文件夹
rm -rf 文件夹名称

fcc转化为hct,比率为1 : 0.75

包装类型与基本类型相比,会有问题吗

很奇怪,为啥我用tar -zxvf 竟然解压不了这个包,也没有报错,必须得用下面的办法

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.5-linux-x86_64.tar.gz

sha1sum kibana-5.6.5-linux-x86_64.tar.gz 

tar -xzf kibana-5.6.5-linux-x86_64.tar.gz

cd kibana-5.6.5-linux-x86_64/

非root用户是不能解压文件的

修改环境变量

vim /etc/profile
source /etc/profile

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.zip

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.zip

https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-windows-x86_64.zip

这个kibana真是有毒,一定要es的版本和他完全对应

kibana会自动检测服务器上面安装的es,所以不用在配置文件中设置es地址也行

elasticsearch-head-master安装

使用node.js环境

node -v
npm install -g grunt-cli
安装完grunt后,还得在当前文件夹安装下依赖,执行
npm install
grunt server

启动成功,可以访问页面,但是会发现没有连接上ES服务器,于是需要设置跨域访问,在elasticsearch.yml配置文件中添加以下代码:

http.cors.enabled: true
http.cors.allow-origin: "*"

ES-HEAD如果为绿色则代表未连接成功,当颜色为黄色时就是已连接成功;
检查下ES是不是启动暂停了,需要按下回车才会继续启动

_id 与 id尽量保持一致
根据_id进行删除

luceen更新的原理是先删除后增加
es底层为luceen,所以亦如此

分词器:中文1个汉字就是1个分词

query_string 会自动先分词

default_field 默认搜索域

分析器对英文的支持性好,对中文的支持性不好
=》这句话怎么理解
=》因为英文输入每个单词之间会由空格隔开,而中文都是紧紧挨在一起的

es启动后会自动扫描ik中的属性文件,从而加载ik分词器

request body or source parameter is required
=》查看标准分词器分词效果,用的原来的办法直接在get请求后加参数,系统抛出该异常,原因是ES版本更新后,需要将参数写在body中

到项目路径下执行maven打包
mvn clean package -Dmaven.skip.test=true
=》为啥我打包下来得到的是.zip,而不是.jar

git项目拉取下来后,可以在项目目录中更换版本

query_string和ik分词器有什么关系

ik分词器下载地址
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.0.0/elasticsearch-analysis-ik-6.0.0.zip

ik分词器的版本差异有一点点
比对6.0.0、6.3.0、7.0.0
只有6.0.0有子文件夹elasticsearch和plugin-descriptor.properties文件

ES这一块对版本的要求可真严,三位数必须完全一样

ik_smart 按最少切分

ik_max_word 按最细粒度划分

未来发布的elasticsearch 6.0.0版本为保持兼容,仍然会支持单index,多type结构,但是作者已不推荐这么设置。在elasticsearch 7.0.0版本必须使用单index,单type,多type结构则会完全移除。

二,单index,多type结构弊端
人们经常会谈到index类似传统sql数据库的“database”,而type类似于"table"。现在想想,这是一个非常糟糕的比喻,而这个比喻会造成很多错误的假设。
在传统的sql数据库中,各个"table"之间是互相独立的,在一个表中的列都与另一个表相同名称的列无关。
①,而在我们elasticsearch中同一 Index 下,同名 Field 类型必须相同,即使不同的 Type;
②, 同一 Index 下,TypeA 的 Field 会占用 TypeB 的资源(互相消耗资源),会形成一种稀疏存储的情况。尤其是 doc value ,为什么这么说呢?doc value为了性能考虑会保留一部分的磁盘空间,这意味着 TypeB 可能不需要这个字段的 doc_value 而 TypeA 需要,那么 TypeB 就被白白占用了一部分没有半点用处的资源;
③,Score 评分机制是 index-wide 的,不同的type之间评分也会造成干扰。
④,索引元数据本身是放在主节点中维护的,CP 设计。意味着涉及到大量字段变更及元数据变更的操作,都会导致该 Index 被堵塞或假死。我们应该对这样的 Index 做隔离,避免影响到其他 Index 正常的增删改查。甚至当涉及到字段变更十分频繁且无法预定义 schema 的场景时,是否要使用 ES 都应该慎思熟虑了!

“香蕉你个巴拉”无论用ik_smart还是ik_max_word都无法将香/蕉作为单独的分词,因为按照实际意义来说这是没有意义的,所以分词算法是正确的

Caused by: java.lang.IllegalArgumentException: unknown setting [cluster-name] did you mean [cluster.name]?

这提示还蛮智能的

Error creating bean with name 'elasticsearchClient' defined in class path resource
Caused by: java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8]
=》报错原因是因为你的redis和你的elasticsearch中都使用到了netty,但是他们之间存在冲突导致的
=》在启动类加上这句话: System.setProperty("es.set.netty.runtime.available.processors","false");
=》【错误】但是在启动测试类时依旧会抛出以上异常,所以在测试方法中要将这句代码加上,操蛋,搞得我以为项目出大问题了
=》似乎没有找到合适的解决办法

long 与 Long的大小比较有问题,要用long 与Long.longValue()比较

我的父亲母亲
卧虎藏龙
尖峰时刻2
艺伎回忆录

redis启动时执行以下命令

config set stop-writes-on-bgsave-error no

src/main/java中的类不能引入test包下面的类???

service rabbitmq-server status

项目能启动,不代表测试类能启动,一个测试类出错,其他测试类都不能启动

rabbitmqClient这种对象在test和非test包中都被注入,在启动项目时,运行非test内容不会报错,但是在运行test内容时竟然会报错

springboot junit 如何在spring初始化之前加内容

logstash-plugin.bat install logstash-input-jdbc
=》在logstash/bin目录下用git运行这个命令竟然可以下载logstash-input-jdbc插件

用 logstash-input-jdbc 将mysql 数据同步到elasticsearch中时候 设置schedule => "* * * * *" 只能一分钟更新一次,怎么可以实现mysql 与elasticsearch与mysql同步,MySQL 变化 立马同步数据到elasticsearch中

启动logstash
logstash -f logstash_default.conf

启动logstash-input-jdbc监听
logstash.bat -f logstash.conf

Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

jdbc.sql中sql语句后面不能带有分号,否则执行同步时会报mysql语法错误

logstash-plugin.bat list
=》进入logstash 下bin目录 查看已安装的插件:
=》注意windows下面有.bat后缀,而linux下没有

logstash-plugin.bat install logstash-input-mongodb

mongodb数据同步到ES没有弄成功,应为logstash.conf一直报错,所以先抛弃他

在ES中,每张数据表都需要建立一个索引,因为每个mappings中只能有一个type,所以之前说index时数据库的说法是错误的

互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:

编码 --> 构建 --> 集成 --> 测试 --> 交付 --> 部署

上面整个流程中最重要的组成部分就是持续集成(Continuous integration,简称CI)。

持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。

它的好处主要有两个:

  1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;

  2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

自动化构建
项目被微服务化后,各个服务之间的关系错中复杂,打包构建的工作量相当可怕。不过没关系,本文将借助Jenkins,帮助你一键自动化部署,从此你便告别了加班。

集群结构的好处就是系统扩展非常容易。如果随着你们系统业务的发展,当前的系统又支撑不住了,那么给这个集群再增加节点就行了。但是,当你的业务发展到一定程度的时候,你会发现一个问题——无论怎么增加节点,貌似整个集群性能的提升效果并不明显了。这时候,你就需要使用微服务结构了。

微服务的想法好是好,但开发、运维的复杂度实在是太高。为了解决这些问题,阿里巴巴的Dubbo就横空出世了。

当我们使用了微服务架构后,我们将一个原本完整的系统,按照业务逻辑拆分成一个个可独立运行的子系统。为了降低系统间的耦合度,我们希望这些子系统能够运行在独立的环境中,这些环境之间能够相互隔离。

在Docker出现之前,若使用虚拟机来实现运行环境的相互隔离的话成本较高,虚拟机会消耗较多的计算机硬件/软件资源。Docker不仅能够实现运行环境的隔离,而且能极大程度的节约计算机资源,它成为一种轻量级的“虚拟机”。

我们只需在Jenkins中配置好代码仓库、各个模块的构建顺序和构建命令,在以后的构建中,只需要点击“立即构建”按钮,Jenkins就会自动到你的代码仓库中拉取最新的代码,然后根据你事先配置的构建命令进行构建,最后发布到指定的容器中运行。你也可以让Jenkins定时检查代码仓库版本的变化,一旦发现变动就自动地开始构建过程,并且让Jenkins在构建成功后给你发一封邮件。这样你连“立即构建”的按钮也不需要按,就能全自动地完成这一切构建过程。

File newFile= new File(dir,fileName);

newFile.delete();

file.transferTo(newFile);

Apache POI [1] 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。

ETL (数据仓库技术) 编辑 讨论2
ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。

一行代码完成 JAVA 的 EXCEL 读写——EasyExcel 的方法封装
=》我们可以对apache poi进行封装,做成一个插件,使得在实体类上面加上注解,简单调用一个函数就可以进行excel的导入,并且能判断模板格式是否正确,某某列未填写等异常信息

前端下载用a标签就行了,href是下载文件地址,download是下载文件想要显示的名称(带后缀名)
=》我们用js创建一个a标签,然后触发他的click()事件就行了
=》创建一个标签后,可以直接调用这个标签的函数,不需要将他附加到html中

做导入功能是,EXCEL模板中的列比较简单的尽量用中文表示,如性别有男和女,虽然在数据库中保存的是0和1,但是在模板中要让别人填写中文,后台自己再去转换,如果选项值太多了,那就不这样搞了;

download名字就是下载文件的名字,如果写了后缀名就会覆盖原有的后缀名,否则还是原来的后缀名
如果href用的http+ip地址,那么download会失效
=》我的href属性是一个网址,然后download属性我赋值了,可是点击弹出下载框给我的文件名不是我download赋的名字还是href属性最后一段的名字

简介:角色扮演游戏(Role-playing game),简称为RPG,是游戏类型的一种。

XSSFWorkbook:poi-ooxml-3.9-20121203.jar.org.apache.poi.xssf.usermodel.XSSFWorkbook
HSSFWorkbook:poi-3.9-20121203.jar.org.apache.poi.hssf.usermodel.HSSFWorkbook

apache poi 3.17版本的jar中似乎只有HSSF,没有XSSF

MIME类型
application/vnd.ms-excel
=》xls
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
=》xlsx
上传文件file类型的input添加accept属性即可控制MIME类型,多种类型用逗号分隔

eg 如

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

原因:HSSFWorkbook只能处理扩展名为.xls的文件,也就是excel2007以前的文件。
解决办法:可以将.xlsx文件另存为.xls文件再进行处理(不是直接改扩展名)。

Java Excel文件导入功能HSSFWorkbook(xls)和 XSSFWorkbook (xlsx)

java.lang.IllegalStateException: Cannot get a NUMERIC value from a STRING cell

列的位置顺序不能互换

XSSF可以解析后缀名为.xls和.xlsx的文件,而HSSF只能解析.xls文件
=》我是将.xlsx重命名为.xls来测试的,我不知道是否替换后是否就是office 2007年之前的文档了

获取列数
getLastCellNum()
getPhysicalNumberOfCells()

处理手机号,要用到科学计数法

BigDecimal的toPlainString()

Excel导入优化:
1、将上传的文件先存到磁盘某个路径
=》但是写完之后,无论成功与否,zzy又把这个文件删除了,如此一来有何意义
2、无论文件内容如何,只要保证我们需要的列存在就行,就算顺序发生变化也没关系
3、错误提示定位到具体的行与列

我记起来了,我以前使用的JEXCEL对Excel进行读写

PS: Excel单元格在填写时前后空格会被自动忽略掉

记录一次bug,我在导入商品数据Excel时,将list.add()操作放进了内层循环,导致list中的内容虚多了11倍,我一直没发现这个bug,因为插入到数据库时数据量总数是正常的。
=》因此我怀疑mongodb对数据插入操作做了特殊处理,他判断了重复数据,从而去重
=》也不知道是不是有点牵强,因为这是逐条插入的,并非批量插入
=》暂时不去纠结这个问题

linux 启动rabbitmq
service rabbitmq-server start

转载于:https://www.cnblogs.com/syjp/p/11174761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值