博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用spring boot devtools不要多此一举加try...catch
阅读量:5934 次
发布时间:2019-06-19

本文共 2748 字,大约阅读时间需要 9 分钟。

spring-boot-devtools是个好东西,在开发调试时可以随时热部署,不用每次手工启停。前两天一个项目查log,发现总有这样的错误日志输出:

org.springframework.boot.devtools.restart.SilentExitExceptionHandler$SilentExitException

  at org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread(SilentExitExceptionHandler.java:90)

  at org.springframework.boot.devtools.restart.Restarter.immediateRestart(Restarter.java:184)

  at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:163)

  at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:552)

  at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartingEvent(RestartApplicationListener.java:67)

  at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:45)

  at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)

  at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)

  at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)

  at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:68)

  at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48)

  at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)

  at org.test.Application.main(Application.java:15)

看一下项目的主体结构,大致是这样的,我做了简化:

首先是spring boot的启动入口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package 
org.test;
 
import 
org.springframework.boot.SpringApplication;
import 
org.springframework.boot.Banner.Mode;
import 
org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public 
class 
Application {
    
public 
static 
void 
main(String[] args) {
        
try 
{
            
SpringApplication app = 
new 
SpringApplication(Application.
class
);
            
app.setBannerMode(Mode.OFF);
            
app.setWebEnvironment(
false
);
            
app.run(args);
        
}
        
catch
(Exception ex) {
            
ex.printStackTrace();
        
}
    
}
}

主服务大致是这样的(已简化):

1
2
3
4
5
6
7
8
9
10
11
12
package 
org.test;
 
import 
javax.annotation.PostConstruct;
import 
org.springframework.stereotype.Service;
 
@Service
public 
class 
MainService {
    
@PostConstruct
    
public 
void 
startServer() {
        
System.out.println(
"START"
);
    
}
}

只要一启动,就会报上面的错误,但实际上又不影响任何功能,devtools的热部署功能也仍然生效。对比以前的项目查了查,发现问题出在main()方法上,SpringApplication.run()一但放到try...catch块里就会导致devtools抛个异常。把main()里的try...catch去掉,或者把app.run(args)这句移出try...catch,或者catch到异常不要printStackTrace(),再运行就不会有错误日志了。

具体原因等有空了再去翻源码吧,对spring boot来说,启动时try...catch真的是多此一举。

     本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/1919063,如需转载请自行联系原作者
你可能感兴趣的文章
[LeetCode]59. Spiral Matrix II
查看>>
DHCP冲突的解决方法
查看>>
log4j1.x maven下配置
查看>>
SVN 服务端和客户端的安装及使用
查看>>
MySQL 5.7 Invalid default value for 'CREATE_TIME'报
查看>>
Redis分布式缓存安装(单节点)
查看>>
linux下编译httpd程序
查看>>
Linux学习感悟及目标制定
查看>>
常用命令2
查看>>
蓝绿发布、滚动发布、灰度发布等部署方案对比与总结
查看>>
Linux Debian8 Rsync+Sersync实现数据实时同步
查看>>
学习五十一
查看>>
面向对象的三个基本特征
查看>>
docker容器中没有vi
查看>>
python wxpython制作计算器
查看>>
Photoshop修复画笔工具、污点修复画笔工具使用方法
查看>>
DNS服务之反向解析
查看>>
SSL虚拟主机
查看>>
Java基础——过滤器和监听器
查看>>
公司要安装电脑监控软件你同意吗?
查看>>