简化Spring应用开发的一个框架;
整个Spring技术栈的一个大整合;
J2EE开发的一站式解决方案;
2014,martin fowler
微服务:架构风格(服务微化)
一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
单体应用:ALL IN ONE
微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;
给maven 的settings.xml配置文件的profiles标签添加
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
开始第一个HelloWorld测试
git clone https://github.com/legendHHH/SpringBootSelf.git
git init
git checkout -b dev
git checkout dev
==>本地存在dev的分支可以直接切换
git branch --set-upstream origin dev
git branch
git branch -d dev
git push origin --delete dev
注意: 在删除远程分支时,同名的本地分支并不会被删除,所以还需要单独删除本地同名分支
git branch | grep 'branchName'
git status
==> 查看代码变动有哪些
git add .
==> 具体文件使用 git add test.java
git commit -m '[ADD]提交信息'
git push
==>提交变更到远程
注意:需要先切换到合并主分支,即master
git merge origin/dev
git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。
git cherry-pick <HashA> <HashB>
==>支持一次转移多个提交。
或者
git cherry-pick dev
==> 表示转移该分支的最新提交
git fetch
git pull
git diff
git stash
git branch --set-upstream-to=origin/remote_branch your_branch
git branch -m old_local_branch_name new_local_branch_name
git branch -m old_local_branch_name new_local_branch_name
重命名远程分支对应的本地分支
git push origin :old_local_branch_name
删除远程分支
git push origin new_local_branch_name
重新推送新命名的本地分支
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
git tag --list 列出所有的标签
git tag <your_tag_name> 创建一个标签
git tag -d <your_tag_name> 删除一个标签
git push --delete origin <your_tag_name> 删除远程仓库的标签
git push origin <your_tag_name> 推送一个标签到远程
git push origin --tags 推送多个本地标签到远程
解决办法:主要原因是安全设置的问题.
首先执行 git config http.sslVerify "false" 若出现下列错误:git config http.sslVerify "false" fatal: not in a git directory
再继续执行 git config —global http.sslVerify "false" 问题解决
安装:sudo apt install openssh-server
sudo vim /etc/ssh/sshd_config
#启用密码验证 PasswordAuthentication yes
#关闭密钥验证 RSAAuthentication no PubkeyAuthentication no
/etc/init.d/ssh restart
-
查看系统时间 date
-
更改系统时间时区 timedatectl set-timezone Asia/Shanghai
-
可以重启后查看,防止重启后失效 reboot
date
[email protected] 密码:Oracle123
cp jdk-8u291-linux-x64.tar.gz /usr/java1.8
cd /usr tar -zxvf java1.8
vim /etc/profile
将光标移到最后一行,粘贴如下内容:
#java environment
export JAVA_HOME=/usr/jdk1.8.0_291
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
source /etc/profile
java -version
-- 查看配置文件位置 systemctl show --property=FragmentPath docker
-- 修改配置文件 sudo vim /usr/lib/systemd/system/docker.service 在该行添加如下内容:(这里端口为2375,所以后面在idea中连接时也要填写该端口) ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
-- 重新加载配置文件 systemctl daemon-reload
-- 重启docker systemctl restart docker
-- 测试 curl 远程服务器ip:2375/info curl 远程服务器ip:2375/version
- 引入GAV坐标
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.1.2.RELEASE</version>
</dependency>
-
抛出RuntimeException异常后,继续重试,最多重试5次,每次在上一次的基础上延后1秒,multiplier为乘系数。若5次重试后依旧失败,则默认调用带有注解@Recover的方法,给接口返回一个默认值。
-
测试
2021-07-21 10:07:24.613 ERROR 18712 --- [nio-9909-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.retry.ExhaustedRetryException: Cannot locate recovery method; nested exception is java.lang.RuntimeException: idd不能小于0] with root cause
解决方法:调用方法和恢复方法的返回值需要一致
Dockerfile 用来构建 Docker 镜像,那么 docker-compose 则是用来创建容器的。
Docker 有三个主要的功能:Build、Ship 和 Run,使用 docker-compose 可以帮我们在 Run 的层面解决很多实际问题。docker-compose 通过一个 yaml 模板文件来统一管理多个容器的配置,如网络、数据卷、执行指令、环境变量、资源限制等等。有了 docker-compose 我们便可以一键重启、关闭、删除、监控所有的 docker 服务,只需要一次配置,则可以对容器进行统一管理,那么此时我们则不必为了每次要运行一堆容器时写大量的命令而头疼。
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。 你可以也通过执行下面的命令,高速安装Docker Compose。
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version # 查看版本号,测试是否安装成功
你可以通过修改URL中的版本,可以自定义您的需要的版本。
java -jar app.jar > app.log 2>&1 &
部署过项目的应该对这命令很熟悉,相信大部分人都知道>表示的是重定向,那么什么是重定向?2>&1又是什么意思?
每个进程可以打开多个文件,所以每个进程都会有一个私有的文件描述符表(file descriptors table)。
下文称file descriptors table中的每一个条目为file descriptor,称file descriptor中的整数为fd。
文件描述符表的前3项已经被默认使用了。
java -jar app.jar > app.log 2>&1 &
这条指令的意思就是将app.jar程序用>运算符重定向标准输出,由原本的指向显示器改为app.log文件。
2>是用来重定向标准错误,因为标准错误在描述符表中的fd就是2,同样,其实重定向标准输出也可以表示为1>,不过一般简写为>。
标准错误和标准输出可以重定向到同一个地方,比如指令中的&1表示的就是标准输出,2>&1的含义就是重定向标准错误到标准输出表示的数据流中。
字面意思就是 sort内存溢出,考虑增加服务器的排序缓冲区(sort_buffer_size)大小。
mysql> show variables like '%sort_buffer_size%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| innodb_sort_buffer_size | 1048576 |
| myisam_sort_buffer_size | 8388608 |
| sort_buffer_size | 262144 |
+-------------------------+---------+
3 rows in set (0.01 sec)
mysql> SET GLOBAL sort_buffer_size = 1024*1024;
补充:EXPLAIN需要分析sql运行情况在分析原因
- 1.把mysql库中user表中的一条记录的Host字段值改为%,奇怪的是一定要用以下语句设置一下密码才行
- 2.update user set Password=PASSWORD("123456")WHERE Host="%";
- 3.执行flush privileges;命令使立即生效
INSERT INTO `mysql`.`user`(`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`) VALUES ('%', 'root', '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '', 'N');
scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上 scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地
这个错误是由于Windows系统和Linux系统的不同编码造成的。Windows下的回车是\r\n,而Linux下的回车是\n,所以用shell远程编写的脚本中的回车不被Linux系统识别,但使用vim编辑的时候还看不到\r。
解决方法:用vim编辑脚本文件时加上-b,即
vim -b filename
,这样打开的文件是"Binary mode",可以看到多出来的东西,显示的是^M,删掉保存运行就行了。
开发中往往会遇到这样的情况,调试一个请求,但是请求中有报错的跳转,结果一刷新页面就自动跳转了,也看不到请求报错,
这个时候只要勾选上preserver log即可谷歌浏览器保留页面跳转前的请求
#!/bin/bash
#description: 启动重启server服务
#启动命令所在目录
HOME='/data/tsapp'
#过滤查询执行.jar的线程PID
pid=`ps -ef|grep TSApp.jar|grep -v grep|awk '{printf $2}'`
#执行jar
start(){
if [ -n "$pid" ]; then
echo "server already start,pid:$pid"
return 0
fi
#进入命令所在目录
cd $HOME
#启动服务 把日志输出到HOME目录的server.log文件中
nohup java -jar $HOME/TSApp.jar > $HOME/server.log 2>&1 &
spid=`ps -ef|grep TSApp.jar|grep -v grep|awk '{printf $2}'`
echo "program is start on pid:$spid"
}
#停止
stop(){
if [ -z "$pid" ]; then
echo "not find program on pid:$pid"
return 0
fi
#结束程序,使用讯号2,如果不行可以尝试讯号9强制结束
kill -9 $pid
rm -rf $pid
echo "kill program use signal 2,pid:$pid"
}
status(){
if [ -z "$pid" ]; then
echo "not find program on pid:$pid"
else
echo "program is running,pid:$pid"
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
status
;;
*)
echo "Usage: {start|stop|status}"
;;
esac
exit 0
执行方法:给脚本加权限,
chmod 777 tsapp.sh
-- 启动jar
./tsapp.sh start
-- 停止jar
./tsapp.sh stop
-- 重新启动jar
./tsapp.sh restart
-- 查看jar运行状态
./tsapp.sh status
在装有MySQL的机器上登录MySQL mysql -u root -p password
执行 use mysql;
执行 update user set host = '%' where user = 'root'; #这一句执行完可能会报错,不用管它。
执行 FLUSH PRIVILEGES;
-- 非必须步骤
查看user表中的数据:select Host, User,Password from user;
修改user表中的Host:update user set Host='%' where User='root';
8.0版本
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 ,'password'改成你的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码 ,'password'是你的密码
grant all privileges on *.* to root@'%' identified by "password";
第四步是刷新MySQL的权限相关表,一定不要忘了,我第一次的时候没有执行第四步,结果一直不成功,最后才找到这个原因
网络不通畅
mysql 服务未启动
防火墙未开放端口
安装nvm后报错:Could not retrieve https://nodejs.org/dist/index.json. Get "https://nodejs.org/dist/index
在本地找到安装nvm的路径,在nvm文件夹下找到settings.txt,添加以下代码即可:
node_mirror:npm.taobao.org/mirrors/node/
npm_mirror:npm.taobao.org/mirrors/npm/
-
创建容器的时候设置时区 添加参数 -v /etc/localtime:/etc/localtime 启动容器 docker run -d -v /etc/localtime:/etc/localtime -p 8888:8080 tomcat:latest
-
启动后的容器修改时区 执行date 命令查看时间,会发现容器中的时间少了8个小时,这是由于时区不一致.
docker exec -it <容器名> /bin/bash ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime docker restart <容器名>
复制主机的localtime(只是容器、宿主机时间同步) docker cp /etc/localtime 753f856bca45:/etc/
-
安装Nodejs
-
安装forever
- 进入项目路径:执行:npm install forever -g
- /创建链接,使用forever时就不需要加入路径:ln -s /root/home/downloads/node-v5.2/bin/forever /usr/bin/forever
-
用forever:启动forever start xxx.js
-
重启:forever restart xxx.js
-
停止:forever stop xxx.js
大致产生的原因是,开始安装svn的时候command line client没选中安装。
解决办法: modify 一下svn 步骤: 1、找到你的svn安装包,双击, 2、之后选择(modify)修改安装 3、之后会看到command line client tools前面是个叉 4、点下叉,选择Entire feature will be installed on local hard drive5、然后就next, install就可以了。 注意:安装完后,再确定一下环境变量path里,有没有"C:\Program FilesTortoiseSVN\bin"如果有,就大功告成,只差最后一步了。 6、之后再按照IDEA提示 fix it
重启一下IDEA就不会报错了。
Started by user XXX
Running as SYSTEM
[EnvInject] - Loading node environment variables.
Building in workspace /data/jenkins/workspace/iQueue/IQueue
Updating http://10.19.37.21/RD_Projects/Trunk/Src/iQueue at revision '2022-06-30T11:22:44.768 +0800' --quiet
Using sole credentials zhangzebin1/****** in realm ‘<http://10.19.37.21:80> Subversion repositories’
ERROR: Failed to update http://10.19.37.21/RD_Projects/Trunk/Src/iQueue
org.tmatesoft.svn.core.SVNException: svn: E204900: Can't open 'C:\WINDOWS\TEMP\report.tmp': 拒绝访问。
svn: E175002: REPORT of '/RD_Projects/!svn/vcc/default': 500 Internal Server Error (http://10.19.37.21)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:70)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:57)
at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.runReport(DAVRepository.java:1363)
at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.update(DAVRepository.java:859)
at org.tmatesoft.svn.core.internal.wc16.SVNUpdateClient16.update(SVNUpdateClient16.java:507)
at org.tmatesoft.svn.core.internal.wc16.SVNUpdateClient16.doUpdate(SVNUpdateClient16.java:364)
at org.tmatesoft.svn.core.internal.wc16.SVNUpdateClient16.doUpdate(SVNUpdateClient16.java:274)
at org.tmatesoft.svn.core.internal.wc2.old.SvnOldUpdate.run(SvnOldUpdate.java:27)
at org.tmatesoft.svn.core.internal.wc2.old.SvnOldUpdate.run(SvnOldUpdate.java:11)
at org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperationRunner.java:21)
at org.tmatesoft.svn.core.wc2.SvnOperationFactory.run(SvnOperationFactory.java:1239)
at org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:294)
at org.tmatesoft.svn.core.wc.SVNUpdateClient.doUpdate(SVNUpdateClient.java:311)
at org.tmatesoft.svn.core.wc.SVNUpdateClient.doUpdate(SVNUpdateClient.java:291)
at org.tmatesoft.svn.core.wc.SVNUpdateClient.doUpdate(SVNUpdateClient.java:387)
at hudson.scm.subversion.UpdateUpdater$TaskImpl.perform(UpdateUpdater.java:159)
at hudson.scm.subversion.WorkspaceUpdater$UpdateTask.delegateTo(WorkspaceUpdater.java:168)
at hudson.scm.SubversionSCM$CheckOutTask.perform(SubversionSCM.java:1065)
at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:1041)
at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:1014)
at hudson.FilePath.act(FilePath.java:1163)
at hudson.FilePath.act(FilePath.java:1146)
at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:961)
at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:884)
at hudson.scm.SCM.checkout(SCM.java:505)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1206)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:637)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:509)
at hudson.model.Run.execute(Run.java:1907)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
ERROR: Subversion update failed
org.tmatesoft.svn.core.SVNException: svn: E204900: Can't open 'C:\WINDOWS\TEMP\report.tmp': 拒绝访问。
svn: E175002: REPORT of '/RD_Projects/iManager/!svn/vcc/default': 500 Internal Server Error (http://10.1.3.251)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:70)
新增一个权限账号即可
show global variables like 'max_allowed_packet';
+--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 4194304 |
可以看到默认情况下该项的大小只有4m,接下来将该值设置成150m(10241024150) set global max_allowed_packet=157286400;
通过调大该值,一般来说再次导入数据量大的sql应该就能成功了,如果任然报错,则继续再调大一些就行,请注意通过在命令行中进行设置只对当前有效,重启mysql服务之后则恢复默认值,但可以通过修改配置文件(可以在配置文件my.cnf中添加max_allowed_packet=150M即可)来达到永久有效的目的,可其实我们并不是经常有这种大量数据的导入操作,所以个人觉得通过命令行使得当前配置生效即可,没有必要修改配置文件。
防止项目请求接口跨域问题
- 第一种:在tomcat部署项目中,需要修改tomcat配置文件解决跨域。修改tomcat下面的conf/web.xml
在此文件下方新增(在节点上面新增)
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
或者在项目中进行修改,下载对应版本的tomcat-catalina的jar包
https://repo1.maven.org/maven2/org/apache/tomcat/tomcat-catalina/9.0.40/tomcat-catalina-9.0.40.jar
2、在WEB-INF/web.xml配置过滤器
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 总结 spring CORS跨域请求解决方案总结:(建议采用方案1)
1、springboot CORS 跨域请求解决三大方案,springboot CorsFilter解决跨域问题
https://www.iteye.com/blog/fanshuyao-2517777
2、cors-filter使用,cors-filter解决跨域访问,cors-filter跨域请求
https://www.iteye.com/blog/fanshuyao-2517803
3、org.ebaysf.web的cors-filter使用,cors-filter跨域请求
https://www.iteye.com/blog/fanshuyao-2517820
4、java tomcat-catalina CorsFilter使用,apache tomcat-catalina CorsFilter使用
https://www.iteye.com/blog/fanshuyao-2517821
5、springboot jsonp 跨域请求,springboot使用jsonp跨域
https://www.iteye.com/blog/fanshuyao-2517789
下载cors-filter-2.9.jar,java-property-utils-1.9.jar这两个库文件,放到lib目录下。(可在
http://search.maven.org上查询并下载。)工程项目(如:test-demo)中web.xml中的配置如下:
<!--CORS 跨域资源访问-->
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowGenericHttpRequests</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowSubdomains</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, HEAD, POST, OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>X-Test-1, X-Test-2</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.maxAge</param-name>
<param-value>3600</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
pom版本依赖
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api -->
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
eclipse部署项目会出现报错:Tomcat version 8.5 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, and 7 Web modules
经过上网查询,这句话的意思是:Tomcat 8.5 版仅支持 J2EE 1.2、1.3、1.4 和 Java EE 5、6 和 7 Web 模块。
我们只需要进到eclipse打开项目下的 .setting 目录中,编辑 org.eclipse.wst.common.project.facet.core.xml 这个文件
将 这一项的版本号降低到 3.0 即可。(我的 Tomcat 为 8.5,Jdk 为 1.8)
解决办法:在tomcat安装路径下找到conf/context.xml,在其中加入一条配置
<Resources cachingAllowed="true" cacheMaxSize="100000" />
我解压的文件夹中包含中文名称,如 王小热热.png,这样解压完成后就会报错:java.lang.IllegalArgumentException: MALFORMED
解决方案: 设置编码方式为GBK即可。 zipFile = new ZipFile(srcFile, Charset.forName("GBK"));
cd MongoDB的bin目录下 mongod.exe --install --logpath=D:\software\MongoDB\mongodb-win32-x86_64-2008plus-ssl-3.6.11\log\MongoDBloglog.txt --dbpath=D:\software\MongoDB\mongodb-win32-x86_64-2008plus-ssl-3.6.11\data --serviceName=MongoDB
1.自带工具删除 yum remove nodejs npm -y
2.手动删除残留 进入 /usr/local/lib 删除所有 node 和 node_modules文件夹 进入 /usr/local/include 删除所有 node 和 node_modules 文件夹
进入 /usr/local/bin 删除 node 的可执行文件node和npm
检查 ~ 文件夹里面的"local" "lib" "include" 文件夹,然后删除里面的所有 "node" 和 "node_modules" 文件夹
完成。
淘宝镜像源下载nodejs:https://npm.taobao.org/mirrors/node/v14.2.0/node-v14.2.0-linux-x64.tar.gz
解压:tar -xvf node-v14.2.0-linux-x64.tar.gz
配置环境变量
# 编辑环境变量,按i进入编辑模式,按Esc 输入wq回车后退出并保存
vi /etc/profile
# ----------将以下内容粘贴到合适的位置(最顶上/下都可以)---------
export NODE_HOME=/root/node-v14.2.0-linux-x64 # node目录
export PATH=$NODE_HOME/bin:$PATH
刷新环境变量 source /etc/profile
编译报错Error:(21, 1) java: Couldn't retrieve @Mapper annotation
是因为swagge2里面引入了MapStruct的版本
mvn dependency:tree > maven.txt
mvn dependency:tree -Dverbose -Dincludes=org.mapstruct:mapstruct
exclude排除不同版本,使用相同版本的MapStruct。
注意:Lombok版本大于1.18.16时,需要添加lombok-mapstruct-binding。
- 添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.1.Final</version>
</dependency>
- lombok<1.18.16时:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
- lombok>1.18.16时:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
<scope>provided</scope>
</dependency>
关于lombok和mapstruct的版本兼容问题,maven插件要使用3.6.0版本以上、lombok使用1.16.16版本以上,另外编译的lombok mapstruct的插件不要忘了。否则会出现下面的错误:No property named “aaa” exists in source parameter(s). Did you mean “null”?
这种异常就是lombok编译异常导致缺少get setter方法造成的。还有就是缺少构造函数也会抛异常。
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
- 修改conf下面的elasticsearch.yml配置文件
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
完整的yml配置文件
http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
-
进入安装es的 bin/文件夹下 找到 elasticsearch-setup-passwords.bat 或者打开cmd运行
elasticsearch-setup-passwords interactive
然后设置几个用户的密码
- 修改项目的配置
spring:
data:
# elasticsearch配置
elasticsearch:
# 开启es仓库
repositories:
enabled: true
client:
reactive:
endpoints: 127.0.0.1:9200
connection-timeout: 3000
socket-timeout: 3000
username: elastic
password: 123456
elasticsearch:
rest:
uris: 127.0.0.1:9200
username: elastic
password: 123456
一般情况下,这个模糊查询是没有问题的,但是当testWord的字段过长时,会导致es搜索失效。通过资料查询,这个文本的范围在256~32766之间,如果是汉字查询,因为一个汉字占2个字节,还会在此基础上除2。
- 设置版本 curl -sL https://rpm.nodesource.com/setup_14.x | sudo -E bash -
setup_14.x 是对版本的设置,我需要的是14.x系列的最新版本。你可以指定具体的版本
- 执行安装 sudo yum install nodejs
地址栏输入:http://localhost:8099/script】或【系统管理-执行脚本命令】执行脚本命令行
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')
启动参数上加上
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8327
完整===> nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8327 app.jar >D:/app.log 2>&1 &
在tomcat的bin目录下的catalina.sh文件首行加上
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8427"
加完之后重启tomcat
- 第一步:正常编译jar包,将lib文件夹解压出来。这时的pom.xml配置文件如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.DemoApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugins>
<build>
进入项目根目录,执行命令:mvn clean install 将编译后的 Jar 包解压,拷贝 BOOT-INF 目录下的 lib 文件夹 到目标路径
- 第二步 修改pom.xml配置文件,使我们编译出来的jar包不包含lib:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.DemoApplication</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugins>
<build>
配置完成后,再次执行编译:mvn clean install
生成的 Jar 包体积明显变小,如下所示, 外部的 jar 包已经不会被引入了。
- 第三步 运行编译后的jar包
将 步骤 1 解压出来的 lib 文件夹、步骤 2 编译的 jar 包放在同一个目录, 运行下面命令:
java -Dloader.path=D:/lib -jar /path/to/demo-0.0.1-SNAPSHOT.jar 或者在 maven 中输入一下命令导出需要用到的 jar 包
mvn dependency:copy-dependencies -DoutputDirectory=D:\ideaWork\lib -DincludeScope=runtime
mkdir -p /usr/local/docker/rancher-2.5.12/rancher mkdir -p /usr/local/docker/rancher-2.5.12/log mkdir -p /usr/local/docker/rancher-2.5.12/kubelet mkdir -p /usr/local/docker/rancher-2.5.12/cni
docker run --privileged -d --restart=unless-stopped -p 8082:80 -p 8443:443 -v /usr/local/docker/rancher-2.5.12/rancher:/var/lib/rancher -v /usr/local/docker/rancher-2.5.12/log:/var/log -v /usr/local/docker/rancher-2.5.12/cni:/var/lib/cni -v /usr/local/docker/rancher-2.5.12/kubelet:/var/lib/kubelet --name rancher rancher/rancher:v2.5.12
在线上生产环境, JVM 的 Xms 和 Xmx 设置一样大小的内存容量, 避免在 GC 后调整堆大小带来的压力。产生内存抖动
设置-XX: +HeapDumpOnOutOfMemoryError 参数,让 JVM 碰到 OOM 场景时输出 dump 信息。