想写个本地工程,用 SpringBoot 写 ,但是不依赖内置 tomcat 或者扔进 tomcat 里,就没办法持续运行。。。
-
请问有什么办法能不依赖 tomcat 用 SpringBoot 写成本地工程么?
-
有什么其他的框架可以像 SpringBoot 那种打成 jar 的 写一个本地工程吗?
写 webx 写多了,本地工程都不知道该咋写了。。。
谢谢各位
想写个本地工程,用 SpringBoot 写 ,但是不依赖内置 tomcat 或者扔进 tomcat 里,就没办法持续运行。。。
请问有什么办法能不依赖 tomcat 用 SpringBoot 写成本地工程么?
有什么其他的框架可以像 SpringBoot 那种打成 jar 的 写一个本地工程吗?
写 webx 写多了,本地工程都不知道该咋写了。。。
谢谢各位
|
bk201Mar 24, 2017
1
无非还是内嵌容器比如
Embedded Tomcat ,脱离容器的没遇到过。 |
|
ihuotuiMar 24, 2017 via iPhone
2
你用 sevlert 吗?用 http 解析吗?
|
|
vcfvctMar 24, 2017 via Android
3
standalone 肯定支持的!没有 web 的 dependency 的话就不会把 embedded tc 打进去,所以其实用来写平时 utility jar 也很方便!我们最近还放在 AWS lambda 上 run 一些 task ,也挺好!
|
|
zhuyaoMar 24, 2017
4
用 spring boot 不用 tomcat 那就没什么意义啊
|
|
mkstringMar 24, 2017
5
可以的哟。打成 jar 包后直接运行 java -jar xx.jar 就可以了。
|
|
6
@ihuotui #2 额 其实不会用到 sevlert 的。。。就是本地应用
|
|
7
当然可以,只要你的应用不依赖 servlet
|
|
8
@mkstring #5 但是 好像我的工程运行一下 main 就结束了。。。程序就终结了
|
|
9
- 首先干掉你本地的 servlet 相关的依赖
- 如果只是个 commmand line 应用,你可以使用继承 CommandLineRunner ,参考这里: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-simple/src/main/java/sample/simple/SampleSimpleApplication.java |
|
TakWolfMar 24, 2017
10
楼主估计想要这个文档:
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-traditional-deployment 1. JavaWeb 运行,只要是 sevlert ,就无法脱离容器。 2. Spring boot 运行可以不用内置 tomcat ,而是打包成 war ,部署到独立容器中。参考上面文档。 |
|
11
@TakWolf 其实不是呀,我是想完全脱离 tomcat 。就是个 Java 本地工程
|
|
ooTwTooMar 24, 2017 via iPhone
12
那就不用 SpringBoot 啊,直接 Spring4 搭建一套啊。但你不用 Servlet 容器怎么跑?
|
|
13
@ooTwToo 想写成本地工程
|
|
springmarkerMar 24, 2017 via Android
14
那谁来解析 http 协议呢
|
|
15
@springmarker 我不需要连接网络呀,我就是本地跑
|
|
ixiaozhiMar 24, 2017
16
swing?
|
|
springmarkerMar 24, 2017 via Android
17
本地 application?为什么要用 springboot
|
|
plprapperMar 24, 2017
18
有一个 http 的接口 也没啥不好的, 至少可以用来暴露 metric monitor 。
|
|
19
|
|
20
@plprapper #18 主要是没必要依赖 tomcat
|
|
21
@reeco #9 请问可以保持在后台运行么?
|
|
MntCwMar 24, 2017 via Android
22
桌面 JAVA 应用?
|
|
murmurMar 24, 2017
23
可以考虑用 jetty
|
|
24
楼主是希望用 Java 写一个本地的常驻进程吗?
|
|
fighter2011Mar 24, 2017
25
你可以看看 playframework
|
|
dremyMar 24, 2017 via Android
26
不使用 HTTP 协议的 Web 应用?
难道自己用 TCP 协议来通信? |
|
27
@dremy #26 不需要网络服务,就是个本地工程
|
|
28
|
|
flowerwrongMar 24, 2017
29
那你用 java se 不就好了
|
|
30
@scipio #24 是 就是这个
|
|
31
@flowerwrong #29 但是用到 redis solr mq 什么的 spring 不是更加方便么
|
|
lululauMar 24, 2017
32
springboot 和 tomcat 有啥关系。。。
|
|
lululauMar 24, 2017
33
springboot 和 web 也没关系啊
|
|
34
@lululau #32 springboot 内置了 serlet 容器,默认是 tomcat
|
|
misaka19000Mar 24, 2017 via Android
35
@yuhuan66666 点错成感谢了,你程序运行结束自然就退出了啊,没懂常驻是什么意思,要不来个死循环?
|
|
v2orzMar 24, 2017
36
请查阅官方文档:
71.5 Create a non-web application |
|
v2orzMar 24, 2017
37
详细点说, CommandLineRunner ,然后你需要自己去 hook 关闭、停止
不然你觉得为什么 tomcat 可以一直运行,循环啊 |
|
reecoMar 24, 2017
38
|
|
wc951Mar 24, 2017
39
看看 maven 依赖树就知道 springboot 只有引入了 web 的 starter 之后才会内置 tomcat ,非 web 项目可以在 new SpringApplication 的时候 setWebEnvironment(false)
|
|
40
@wc951 #39 是,但是如何做到没有容器情况下后台常驻呢
|
|
wc951Mar 24, 2017
41
@yuhuan66666 Thread.currentThread().join()
|
|
AccIdentMar 24, 2017
42
nohup
|
|
incompatibleMar 24, 2017
43
用框架多了真的容易废掉。你的需求用纯 java se 就可以搞定啊。
一个 public static void main(String[] args)方法,方法内部启动一个非 daemon 的 Thread ,在 Thread 里做循环不就行了? 如果要用 spring 管理 bean 的话,直接 new ClasspathXmlApplicationContext("/classpath/to/your/bean/definition.xml"),想用哪个 bean 就从这个 ApplicationContext 里用 getBean()取就行了。 |
|
44
233333 一堆人的回复我看傻了,感觉楼主的需求有一个 ExecutorService ,别 shutdown 就行
|
|
21gramsMar 24, 2017
45
难道不是 jdk 就足够了吗? 非 web 用什么 springboot ,能给你什么好处?
|
|
xuhaoyangxMar 24, 2017
46
@incompatible #43 我也是这么觉得-。-
|
|
macroidealMar 25, 2017 via iPhone
47
springboot 不就是为了这个目的诞生的么,
你可'能用法不对 |
|
hyrijkMar 25, 2017
48
后台运行
nohup java -jar jar 包 & |
|
sorraMar 25, 2017
49
@phx13ye +1 ,开一个线程池(1~n 个线程都可以), ExecutorService.awaitTermination 或瞌睡轮询 isTerminated 。线程池里跑永久任务。
|
|
jack80342Oct 11, 2017
50
最近翻译了 Spring Boot 的最新文档,欢迎 Fork。
https://www.gitbook.com/book/jack80342/spring-boot/details |
|
zhiguangJul 17, 2018
51
呵呵,那些说用框架就废了的,springboot 难道不是可以根据注解自动配置吗,楼主应该就是想要这种功能
|
|
qbmillerFeb 23, 2019
52
题外话: 在游戏行业几年,出来面试互联网, 每次一提到 spring 就头疼, 好多程序员的确是离开 spring 不会写代码了...
但现在自己看完 spring 源码后,还是感觉挺好的. 看个人需求吧. |
|
zhangfeiwudiJun 5, 2019
53
SpringApplication application = new SpringApplication(Springboot1Application.class);
//关闭 web 默认启动 application.setWebApplicationType(WebApplicationType.NONE); application.run(); |
|
go_starterJun 11, 2019
54
很简单啊,去除 web 相关依赖或者设置 WebApplicationType.None。代码里面用死循环,打包 jar 运行可以常驻后台。任务比较多的话建议使用线程池。
|