winsw,一个能将windows上运行的程序转换成系统服务的工具。
我们都知道spring boot程序能自启动,打好包后直接运行java命令就能启动项目,不需要依赖tomcat等web容器。如果是linux系统还好说,linux能在后台运行命令。但是windows就不是很方便了,命令执行完毕后总有一个黑窗口是不能关闭的。
今天我们就利用winsw来让spring boot程序部署在windows系统上,并且实现自启动。
工具
1. spring boot项目
2. winsw
第一步准备spring boot项目
这里我们写一个简单的小项目,就叫demo吧。如果已经有spring boot项目了略过。
1. application.yaml
app:
name: demo1
2. Application.java
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${app.name}")//读取配置文件里的app.demo变量,值为demo1
private String name;
@GetMapping({"","/","index"})//浏览器访问localhost:8080后页面输出demo1
public String index(){
return name;
}
}
3. 打包
使用maven命令打包后会在项目的target目录下生成demo-0.0.1-SNAPSHOT.jar
4. 部署
将打好的jar包复制到一个目录下,例如d:\projects\demo。
5. 运行命令启动项目
java -jar demo-0.0.1-SNAPSHOT.jar
6. 浏览器打开访问localhost:8080
- 能访问
- 页面输出demo1
7. 修改配置,重启项目
普通的spring项目最后打包的是一个war包,部署到tomcat后会自动解压,我们可以更改解压后的配置文件。
但是spring boot是直接运行的jar包,并不会有解压的操作。想要在启动的时候修改配置文件,这里提供两种方法。
- (简单)启动命令增加参数
java -jar demo-0.0.1-SNAPSHOT.jar --app.name=demo2
- (推荐)增加外部配置文件目录
增加config目录,将application.yaml复制到config下。spring boot启动会读取config目录下的配置文件并覆盖掉jar包里面的配置文件
![](https://img.haomeiwen.com/i18052029/4c1da5f76e1ae7d5.png)
![](https://img.haomeiwen.com/i18052029/a9dbe4d3dd0994ed.png)
![](https://img.haomeiwen.com/i18052029/7fab848c2a787a74.png)
![](https://img.haomeiwen.com/i18052029/b376c49c53afc690.png)
第二步利用winsw将spring boot项目变成服务
1. 下载winsw
![](https://img.haomeiwen.com/i18052029/0d08d96b288ee4ec.png)
![](https://img.haomeiwen.com/i18052029/24b77f022c962b0f.png)
选择最新的版本(例如2.2.0),然后下载winsw-xxx-bin.exe。
2. 修改为winsw.exe方便使用。将exe文件移动到部署目录(本例是:d:\projects\demo)
3. 编写winsw.xml
注意上述第2步exe文件的名字和第3步xml文件的名字必须一致。如果你的exe文件时winsw-2.2.0-bin.exe,那么xml的文件名也必须是winsw-2.2.0-bin.xml
<service>
<id>demo</id>
<name>demo</name>
<description>这里是服务描述信息</description>
<executable>java</executable>
<arguments>-jar demo-0.0.1-SNAPSHOT.jar</arguments>
<logmode>rotate</logmode>
</service>
id和name
安装服务以后,服务名就是此处的name值
尽量一致
尽量短
windows service中唯一
description是描述信息,随便填,不要破坏xml结构就行了
executable是执行的命令。这里是java
- 直接写java意味着你已经在环境变量里面配置了java_home
- 如果没有配置环境变量,那么你需要写全路径。例如(d:\dev\jdk8\bin\java)
arguments是命令执行需要的参数,这里是-jar demo-0.0.1-SNAPSHOT.jar
logmode是日志记录的方式
具体信息可以参考github
4. 安装服务
用管理员进入cmd命令行
winsw install
可能提示需要你安装.net之类的,安装就好了
5. 运行服务并测试
winsw start
启动完毕后访问浏览器看结果
6. 关闭,重启,删除服务,查看服务状态
winsw stop/restart/uninstall/status
7. 看日志
有任何安装、启动的问题可以去查看错误日志
![](https://img.haomeiwen.com/i18052029/864ced3e7138645c.png)
网友评论