前言:springboot项目开发时,会遇到项目重新启动的情况。在百度上资料比较零碎需要整理,实践时需要踩坑,自己在项目中已经实现的功能拿出来与大家分享。希望每一位coder能在编程的路上少走一些弯路。

1.开发环境(development)

  • 在application.properties文件中加入如下的配置信息,为动态修改配置信息提供数据:
spring.application.name= SPRING-BOOT-APPLICATION
  • 在springboot主类中定义两个私有变量,用于存放main()方法的参数和SpringApplication.run()方法返回的值:
public class SpringbootwebApplication {
@Value( "${spring.application.name}" )
String appName;
private static String[] args;
private static ConfigurableApplicationContext context; public static void main(String[] args) {
SpringbootwebApplication.args = args;
SpringbootwebApplication.context = SpringApplication.run(SpringbootwebApplication.class, args);
}
}
  • RESTful API
@GetMapping("/api/refresh")
public Object restart(){
try {
ExecutorService threadPool = new ThreadPoolExecutor(1,1,0, TimeUnit.SECONDS,new ArrayBlockingQueue<>( 1 ),new ThreadPoolExecutor.DiscardOldestPolicy ());
threadPool.execute (()->{
context.close();
context = SpringApplication.run(SpringbootwebApplication.class,args);
} );
threadPool.shutdown();
return ResultBody.success("重启网站成功");
} catch (Exception e) {
throw new Exception(CommonEnum.INTERNAL_SERVER_ERROR);
}
}

2.生产环境(production)

项目打成jar包完成部署以后,生产环境重启失效项目缓存并未清理未达到预计效果,此时需要用脚本重启。

  • idea>settings>plugins search BashSupport

  • create bash file

  • bash linux restart. use: sh restart.sh restart
#!/bin/bash
#脚本与jar包放在同一目录下
#可替换为你自己的执行程序,其他代码无需更改
APP_NAME=springbootweb-0.0.1-SNAPSHOT.jar
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh restart.sh [start|stop|restart|status]"
exit 1
} #检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
} #启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_NAME > nohup.out 2>&1 &
echo "${APP_NAME} running successfully";
fi
} #停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
echo "${APP_NAME} Closing successfully"
else
echo "${APP_NAME} is not running"
fi
} #输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
} #重启
restart(){
stop
start
} #根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac

到了这一步其实还未结束,当你在网上一步步走到这里的时候以为linux敲个命令 sh restart.sh start 就万事大吉了。

其实这个时候bash很可能还不能用,因为开发环境是windows的bash,此时使用会异常。

解决方案:

使用dos2unix命令,转译bash > dos2unix restart.sh(需要安装插件)

1.下载插件

   Dos2Unix

2.上传taz。此时是压缩包格式用命令解压安装

tar -zxvf hd2u-1.0.0.tgz
cd hd2u-1.0.0.tgz
./configure && make && make install

3.此时如果安装不上dos2unix。此时需要另外一个插件popt

   Popt-1.18

tar -zxvf popt-1.18.tar.gz
cd popt-1.18
./configure && make && make install

4.验证一下Dos2Unix安装成功与否。

dos2unix -v

5.大功告成 转译。然后就可以愉快的使用bash了

dos2unix restart.sh

最新文章

  1. php函数fgets读取文件
  2. my vim
  3. maven引入jar包时,一个jar的引入错误,会导致后来的jar包的引入。
  4. IIS 内部运行机制
  5. EditText的hint不显示
  6. 怎样计算一个整数的位数&amp;并把每一位上的数字保存下来
  7. phpcms标签整理_当前栏目调用
  8. Web Service测试利器 Postman
  9. 创建维护计划时,提示“代理XP”组件已作为此服务器安全配置的一部分被关闭
  10. 构造函数继承关键apply call
  11. box-shadow IE8兼容处理
  12. Unity UGUI基础之InputField
  13. PageContext ServletContext ServletConfig辨析
  14. centos7.3 kubernetes/k8s 1.10 离线安装 --已验证
  15. Spring MVC 原理探秘 - 容器的创建过程
  16. dock容器操作命令
  17. 牛客训练四:Applese 涂颜色(费马小定理+快速幂)
  18. C# using关键字 --转
  19. Summary: sorting Algorithms
  20. shiro 核心单词

热门文章

  1. Java面试题(异常篇)
  2. Welcome To CUG_YZL&#39;s cnblogs
  3. windows版redis报错:本地计算机上的Redis服务启动后停止
  4. 如何安装CRX格式?Chrome插件离线安装,CRX格式安装方法 JSON-handle Chrome插件下载
  5. 初识ABP vNext(8):ABP特征管理
  6. html中实现倒计时功能(setInterval,clearInterval)
  7. 10.QT-QAudioOutput类使用
  8. W5300中文手册
  9. spring boot 在框架中注入properties文件里的值(Spring三)
  10. MySQL页分裂和页合并