SpringBoot框架在使用的过程中,会用到很多注解,其中包括@PostConstruct(启动时执行)以及@Scheduled(定时器),
但是如果使用了@PostConstruct注解,并且方法体内包含死循环,为什么要死循环呢,因为我要监听socket通讯,所以要一直不断的执行,但是这个时候,程序启动时就不会扫描到定时器的注解,导致定时器无法执行,这个时候,可以把监听的方法写在AgvWebApplication.java中,并且实现CommandLineRunner接口,这样程序启动的时候,会自动执行循环,并且不会影响定时器的使用,一举两得。
public class AgvWebApplication implements CommandLineRunner{
public static void main(String[] args) {
SpringApplication.run(AgvWebApplication.class, args);
}
@Override
public void run(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8083);) {//1创建服务端
log.info("服务端已启动,等待客户端连接..");
for (; ; ) {
try {
Socket socket = serverSocket.accept();
log.info("客户端加入,客户端IP[{}],端口号:[{}]",socket.getInetAddress(),socket.getPort());
SocketThread socketThread = new SocketThread(socket);
socketThread.start();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
log.info("error", e);
}
}
}
|