在Tomcat部署之前运行java方法以启动数据库

时间:2018-04-07 02:03:53

标签: java tomcat gradle hsqldb

我正在开发一个具有HSQLDB持久性的Web项目。我的数据库实例处于服务器模式,因此,我需要运行cmd脚本/ Java方法来访问我的架构。

Tomcat是我用来在端口8080上放弃战争的容器.Gradle是我的构建系统。

目前我在部署应用程序之前使用以下main方法在运行时正确访问我的数据库:

public static void main(String[] args) throws IOException, ServerAcl.AclFormatException {

    final String URL = "file:~/db/cursago";
    String user = "user";
    String password = "password";
    HsqlProperties p = new HsqlProperties();
    p.setProperty("server.database.0",URL+";user="+user+";password="+password);
    p.setProperty("server.dbname.0","cursago");

    Server server = new Server();
    server.setProperties(p);
    server.setLogWriter(null);
    server.setErrWriter(null);
    server.start();
    System.out.println("Database is running with path: " + URL);
    System.out.println("Username: " + user+", Password: " + password);

}

我想知道是否有一种方法可以让Tomcat / Gradle / IntelliJ IDEA在项目部署之前运行此主要方法,而不是手动运行此脚本。

1 个答案:

答案 0 :(得分:0)

来自here

您可以在main中运行onApplicationEvent的内容,例如:

public class ApplicationListenerBean implements ApplicationListener<ContextRefreshedEvent> {

        @Override
        public void onApplicationEvent(ContextRefreshedEvent event) {
        final String URL = "file:~/db/cursago";
        String user = "user";
        String password = "password";
        HsqlProperties p = new HsqlProperties();
        p.setProperty("server.database.0",URL+";user="+user+";password="+password);
        p.setProperty("server.dbname.0","cursago");

        Server server = new Server();
        server.setProperties(p);
        server.setLogWriter(null);
        server.setErrWriter(null);
        server.start();
        System.out.println("Database is running with path: " + URL);
        System.out.println("Username: " + user+", Password: " + password);               
    }
}

这将触发每个事件,可以是应用程序启动或重新部署,并在应用程序处理请求之前发生。

您也可以连接您的房产。

如果服务器已在运行并且无法仅在此范围内运行,则存在一些困难。