这个项目启动于2020年7月13号,是给苏州轨道公司做的一套系统。这套系统包括前端Vue,后端SSM,机器学习算法,以及内外网的项目部署和数据的实时对接。近完工,所以想做个总结,将做的过程中遇到的问题包括见到的博客资源记录一下。如有错误之处,还请大佬指点。
一.配置nginx
启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看nginx是否启动 ps -ef|grep nginx
/usr/local/nginx/sbin/nginx -s reload 重启nginx
二.配置tomcat
https://blog.csdn.net/wangleiqqaaaaa/article/details/103528224
1.创建文件夹tomcat
mkdir tomcat
2.将压缩包apache-tomcat-8.5.50.tar解压到tomcat中
tar -zxvf apache-tomcat-8.5.50.tar
进入apache-tomcat-8.5.50目录
启动tomcat ./startup.sh
停止tomcat ./shutdown.sh
查看tomcat是否启动 ps -ef|grep tomcat -
查看tomcat启动过程 ./catalina.sh run
三.配置redis
https://blog.csdn.net/weixin_34128501/article/details/92400407
启动redis
进入目录 /usr/local/redis/bin ./redis-server redis.conf
四.mysql
1.分区
查看分区信息
SELECT table_name,partition_name,partition_description,table_rows FROM
information_schema.PARTITIONS
WHERE table_name = ‘djt_jtts_kq_road_jc_status_copy1’;
删除分区
alter table djt_jtod_ksl_zdflow drop partition djt_jtod_zoneod_bike_20200323;
添加年月日分区
ALTER TABLE djt_jtts_kq_road_jc_status_copy1 ADD PARTITION (PARTITION djt_jtts_kq_road_jc_status_20200323 VALUES IN (‘2020-03-23’));
添加年月分区
ALTER TABLE djt_jtts_dmgd_pj_link ADD PARTITION (PARTITION djt_jtts_dmgd_pj_link_202001 VALUES IN ((2020,‘01’)));
2.ISNULL
判断某字段不为空
SELECT a.oId,a.dId,a.cnt from
(SELECT
o_gjfx_id AS oId,
d_gjfx_id AS dId,
ISNULL(o_gjfx_id) as oFlag,
ISNULL(d_gjfx_id) as dFlag,
cnt_user AS cnt FROM
djt_jtod_gjod_gjfx ) as a where a.oFlag=0 AND a.dFlag=0 ORDER BY a.cnt DESC LIMIT 10
3.concat
更新小时,将8改为08
UPDATE djt_jtts_mainroad_jc_link set statistic_hour = CONCAT(‘0’,statistic_hour) where statistic_hour in (‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’)
截断小时:将8:00:00改为08:00:00
UPDATE gd_short_pred_line set statistic_hour = CONCAT(‘0’,statistic_hour) where substring_index(statistic_hour,":",1) in (‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’)
substring_index(“aaa_bbb_ccc”,"_",1) ,返回为 aaa;
substring_index(“aaa_bbb_ccc”,"_",2) ,返回为 aaa_bbb;
substring_index(substring_index(“aaa_bbb_ccc”,"",-2),"",1) ,返回为 bbb;
4.大于小于
在xml中如果用到<=或者>=时
<= <=
= >=
5.format
截断
format(jc.ydzs,0)
0 保留0位小数
6.随机数
返回一个不大于f的最大整数
floor(f)
返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。
rand(),rand(n)
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:
SELECT FLOOR(7 + (RAND() * 6));
7.cast
like concat(‘%’,#{字段},‘%’);
CAST(SUBSTRING_INDEX(rx_pct,"%",1) AS DOUBLE)/100 %号转Double
8.trim
select code,name,`desc`,speed,cnt,krx,kcf,
substring_index(wkt," ",1) as lon,
substring_index(wkt," ",-1) as lat from
(select id as code,name,`desc`,speed,cnt,krx,kcf, TRIM(BOTH ')' FROM (TRIM(BOTH 'Point (' FROM wkt_pt))) as wkt from djt_detour_sections) as a
五.防火墙
https://blog.csdn.net/qq_27870421/article/details/93165382
看一下public区域下所有已打开的端口
firewall-cmd --zone=public --list-ports
添加端口号
firewall-cmd --zone=public --add-port=8080/tcp --permanent
重启防火墙
firewall-cmd --reload
查看8080端口号是否可用
firewall-cmd --zone=public --query-port=8080/tcp
查看防火墙状态,如果是dead状态,即防火墙未开启
systemctl status firewalld.service
开启或重启、关闭防火墙
systemctl start firewalld.service
systemctl restart firewalld.service
systemctl stop firewalld.service
六.java
1.BigDecimal
Double f4 = 1 - (value1 + value2 + value3);
BigDecimal b4 = new BigDecimal(f4);
double value4 = b4.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
java 如何将列表拼接成字符串
https://www.cnblogs.com/hgnulb/p/9940306.html
StringUtils.join(list.toArray(), separator);
separator设置分隔符
2.集合
Java Stream流之求和
double max = list.stream().mapToDouble(User::getHeight).sum();
根据code排序
Collections.sort(stationVOS,Comparator.comparing((AdStationVO s)->s.getCode()));
根据name分组
List<AdStationVO> stationVOS = new ArrayList<>();
List<StationLinesDTO> result = trackService.findStations(change);
Map<String, List<StationLinesDTO>> map = result.stream().collect(Collectors.groupingBy(StationLinesDTO::getLineName));
for(Map.Entry<String, List<StationLinesDTO>> entry : map.entrySet()) {
AdStationVO adStationVO = new AdStationVO();
// char key = entry.getKey().charAt(0);
adStationVO.setName(entry.getKey());
adStationVO.setCode(entry.getValue().get(0).getLineCode());
adStationVO.setStations(entry.getValue());
stationVOS.add(adStationVO);
}
Collections.sort(stationVOS,Comparator.comparing((AdStationVO s)->s.getCode()));
3.geojson
(1)点
PointFeatureUtils
try {
PointFeatureUtils geoUtils = new PointFeatureUtils("mag:Integer,nid:String,kind:Integer,max:Integer");
List<SimpleFeature> features = new ArrayList<>();
for (LonLatCntDTO item : mapList) {
SimpleFeature feature = geoUtils.createPointFeature(item.getLat(), item.getLon(), null, new Object[]{item.getCnt(), null, Math.ceil(maxLevel / max * item.getCnt()), maxLevel.intValue()});
features.add(feature);
}
return GeoUtils.packageFeatureCollection(features);
} catch (org.locationtech.jts.io.ParseException | IOException e) {
throw new BizException(e.getMessage());
}
(2)线
LineFeatureUtils
try {
LineFeatureUtils geoUtils = new LineFeatureUtils("code:Integer,name:String");
List<SimpleFeature> features = new ArrayList<>();
for (DetourMapValue item : valueList) {
String wkt = "MULTILINESTRING(("+item.getLonlat1()+","+item.getLonlat2()+"))";
SimpleFeature feature = geoUtils.createLineFeature(wkt,null,new Object[]{item.getCode(),item.getName()});
features.add(feature);
}
return GeoUtils.packageFeatureCollection(features);
} catch (IOException | ParseException e) {
throw new BizException(e.getMessage());
}
(3) 面
MultiPolygon
ComplexGeoUtils complexGeoUtils = new ComplexGeoUtils();
List<SimpleFeature> features = new ArrayList<>();
features.add(complexGeoUtils.createVehMultiPolygon() ;
七.Git
1 进入git bash
在cmd中输入git,进入项目根目录下
查看当前分支的log,wq退出
2 合并代码
在idea中提交代码(或者在git bash下提交)
1.commit
2.pull 主分支
3.push 自己的分支(lf)
查看是否有未commit的代码
git diff
在lf分支下,切换分支到develop
1.git checkout develop
2.git pull origin develop
3.git merge lf
4.git push origin develop
其他分支便可以拉取develop上的合并的新代码
八.部署maven war包
注意:
服务器上不可以使用log4jdbc
使用一般的mysql驱动
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://x.x.x.x:xxxx/xx?useUnicode=true&characterEncoding=utf8&useCompression=true
username: xx
password: xx
1.打包
进入idea,在maven窗口下,Lifecycle
(1)clean
(2)install
(3)package
在target目录下会出现war包
2.将war包上传
使用Xftp将war包上传至服务器上的tomcat/apache-xxx/webapps下
Xftp公测版: https://www.netsarang.com/zh/version-7-open-beta/
3.target无法删除
前提:Xftp进入target目录下
通过maven 打包时在clean 时提示 target 文件被占用
原因是Xftp进入target上传war包时,占用了进程,在clean过程中无法结束进程
解决办法:
在开始搜索框中,输入“资源监视器”,打开资源监视器,如下图所示:
在该窗口中,切换到cpu 页签,然后在 关联的句柄中,输入 文件名(target),按下回车键,即可查找到被占用的进程
右键结束进程即可
4.启动tomcat
使用xshell连接服务器
(1)先确认是否可以访问到tomcat
查看tomcat是否启动
ps -ef|grep tomcat -
查看防火墙状态,如果是dead状态,即防火墙未开启
systemctl status firewalld.service
启动防火墙
systemctl start firewalld.service
看一下public区域下所有已打开的端口
firewall-cmd --zone=public --list-ports
如果无8080端口号,需要增加8080端口号
firewall-cmd --zone=public --add-port=8080/tcp --permanent
查看8080端口号是否可用
firewall-cmd --zone=public --query-port=8080/tcp
重启防火墙
firewall-cmd --reload
进入bin目录下,启动tomcat
./startup.sh
查看tomcat是否可以访问
出现如下界面即可
ps:可用通过命令显示pid来杀掉tomcat进程
ps -ef|grep tomcat -
kill -3 id
(2)查看tomcat日志
./catalina.sh
(3)访问接口
http://ip:端口号/war包名/路径