背景介绍:
最近在学习spring,看到容器事件ApplicationEvent时,突然想到一个问题,因为在本地搭建了一套学习环境,每次启动web项目时都要首先手动启动mysql,有时忘了启动mysql时,控制台就会抛出数据库连接失败的异常信息,所以就在想,能否利用容器事件功能,在项目启动时自动启动mysql,项目停止时自动关闭mysql。
实现:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;/*** web项目启动时启动mysql;* web项目停止时关闭mysql* * @author Administrator**/
public class MySqlListener implements ServletContextListener {public void contextDestroyed(ServletContextEvent arg0) {try {Runtime runtime = Runtime.getRuntime();Process process = runtime.exec("net stop mysql");InputStream is = process.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is));String line = "";while ((line = reader.readLine()) != null) {line += line + "\n";}//process.waitFor();reader.close();is.close();process.destroy();System.out.println("正在关闭mysql数据库......");System.out.println(line);} catch (IOException e) {e.printStackTrace();} }public void contextInitialized(ServletContextEvent arg0) {try {Runtime runtime = Runtime.getRuntime();Process process = runtime.exec("net start mysql");InputStream is = process.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is));String line = "";while ((line = reader.readLine()) != null) {System.out.println(line);line += line + "\n";}reader.close();is.close();process.destroy();System.out.println("正在启动mysql数据库......");System.out.println(line);} catch (IOException e) {e.printStackTrace();}}
}
将监听器配置到web.xml中
<listener><listener-class>com....listener.MySqlListener</listener-class></listener>
这样就可以实现我想要的功能,大家有什么好的建议请留言!