我正在开发一个Spring MVC应用程序,我使用Maven。我目前正在尝试创建一些Java"脚本"(我不确定我是否应该称它们为"脚本",我实际上是指"具有可以在命令行上调用的main(String[]args)方法的Java类"),以使用Liquibase完成一些工作。
"脚本"将从SpringMVC应用程序加载一些上下文文件,并可以从web应用程序访问属性文件。因此,他们将能够使用与应用程序等相同的数据库连接设置。
我的问题是:如何运行这些脚本?
在本地,我使用Eclipse,使用"运行方式/Java应用程序"运行这些"脚本"很容易。但我也想在我的prod服务器上运行它们,因为我不能在上面使用eclipse来启动它们。我应该怎么做才能在那里运行它们?
我应该以.war以外的其他格式导出我的应用程序吗?我应该从项目中创建一个额外的.jar,以便能够使用"java-jar"运行脚本吗?
我应该为这些脚本创建一个单独的项目吗?但是,脚本能够从位于另一个项目中的SpringMVC应用程序加载所需的上下文吗?
也许有一种我看不到的简单方法可以做到这一点?
UPDATE:我认为我可以实现我想要的目标的一种方法是让web应用程序公开web服务作为运行任务的门户。然后,我可以在命令行上使用wget或其他东西来调用它们。但我更希望能够直接访问类,而无需创建web服务。
"java脚本"的目的是什么
- 定期在bakcground做某事。您可以使用Quartz框架自动触发作业。请参阅Quartz调度程序
- 确保某个东西正常工作。在了解junit之前,我在类中运行了一个main()方法来查看某些东西是否正常工作。参见junit
(首先,我在SO上发现了一个类似的问题,它比我的问题简单易懂!)
实际上,我找到了两种从web应用程序项目本身运行"脚本"的方法:
1) 如果Maven安装在prod服务器上,您可以从生成的"目标"文件夹中运行脚本,方法是在启动脚本时设置类路径:
~cd/path/to/project/target/classes
~java-classpath。/:/path/to/project/target/myProject-0.0.1-SNAPSHOT/WEB-INF/lib/*com.path.to.scripts.ScriptToRun
2) 也可以从网络服务器本身运行脚本,.war就是在那里爆发的。我使用Tomcat:进行了测试
~cd/path/to/Tomcat/webapps/ROOT/WEB-INF/classes
~java-classpath。/:/path/to/Tomcat/webapps/ROOT/WEB-INF/lib/*com.path.to.scripts.ScriptToRun