本文目录导读:

- 基于 Spring Boot 的 Web 服务启动
- 使用 Apache Commons Daemon 实现系统服务
- 使用 Java 内置的
ServerSocket实现简单 TCP 服务 - 使用 ScheduledExecutorService 实现定时任务服务
- 使用 Spring Boot + @Scheduled 启动定时服务
- 启动流程图(以 Spring Boot 为例)
- 总结对比
基于 Spring Boot 的 Web 服务启动
这是目前最常用的一种,适合构建 RESTful API 或微服务。
1 主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2 启动后执行的业务(可选)
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class StartupRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("服务启动完成,执行初始化任务...");
// 加载缓存、启动定时任务等
}
}
优点:内嵌Tomcat/Jetty,自动配置,开发者只需要关注业务代码。
使用 Apache Commons Daemon 实现系统服务
适用于需要注册为 Windows 服务或 Linux Systemd 服务的场景。
1 主服务类
public class MyService {
public static void main(String[] args) {
// 启动服务逻辑
System.out.println("服务已启动");
// ... 业务代码
}
}
2 使用 commons-daemon 包装
import org.apache.commons.daemon.Daemon;
import org.apache.commons.daemon.DaemonContext;
public class MyDaemon implements Daemon {
private Thread serverThread;
@Override
public void init(DaemonContext context) throws Exception {
System.out.println("初始化服务");
}
@Override
public void start() throws Exception {
serverThread = new Thread(() -> {
// 服务主循环
while (!Thread.currentThread().isInterrupted()) {
// 处理请求
}
});
serverThread.start();
}
@Override
public void stop() throws Exception {
serverThread.interrupt();
}
@Override
public void destroy() { }
}
然后使用 procrun(Windows)或 jsvc(Linux)将类安装为系统服务。
使用 Java 内置的 ServerSocket 实现简单 TCP 服务
适合自定义协议或轻量级内部服务。
import java.io.*;
import java.net.*;
public class SimpleTcpService {
public static void main(String[] args) throws IOException {
int port = 8080;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("服务启动,监听端口: " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
new Thread(() -> {
try (BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(
clientSocket.getOutputStream(), true)) {
String input;
while ((input = in.readLine()) != null) {
out.println("Echo: " + input);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
}
}
使用 ScheduledExecutorService 实现定时任务服务
适用于周期性执行任务的场景(如数据同步、监控检查)。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledService {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(() -> {
System.out.println("执行定时任务: " + System.currentTimeMillis());
// 实际业务逻辑
}, 0, 5, TimeUnit.SECONDS);
// 防止主线程退出
Runtime.getRuntime().addShutdownHook(new Thread(scheduler::shutdown));
System.out.println("定时任务服务启动,每5秒执行一次");
}
}
使用 Spring Boot + @Scheduled 启动定时服务
这是最简洁的定时任务实现方式(通常结合 Web 服务一起使用)。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@SpringBootApplication
@EnableScheduling
public class ScheduledApp {
public static void main(String[] args) {
SpringApplication.run(ScheduledApp.class, args);
}
}
@Component
class MyScheduledTask {
@Scheduled(fixedRate = 5000)
public void task() {
System.out.println("定时任务执行: " + System.currentTimeMillis());
}
}
启动流程图(以 Spring Boot 为例)
graph TD
A[main 方法入口] --> B[SpringApplication.run]
B --> C[初始化 Spring 容器]
C --> D[自动配置内嵌 Web 服务器]
D --> E[扫描 Bean & 依赖注入]
E --> F[执行 ApplicationRunner / CommandLineRunner]
F --> G[注册 ShutdownHook]
G --> H[服务就绪,等待请求]
总结对比
| 方案 | 适用场景 | 复杂度 | 典型框架/工具 |
|---|---|---|---|
| Spring Boot Web | RESTful API、微服务 | 低 | Spring Boot |
| Commons Daemon | 系统服务注册 | 高 | procrun/jsvc |
| ServerSocket | 自定义 TCP 协议 | 中 | 原生 Java |
| ScheduledExecutor | 定时任务 | 低 | 原生 Java |
| Spring @Scheduled | 定时任务 + Web | 低 | Spring Boot |
推荐:如果你在构建企业级服务,Spring Boot + @Scheduled(如需定时任务)是最常用、最稳定的选择,如果只是简单的后台脚本或定时任务,使用原生 ScheduledExecutorService 即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播