java - 如何在没有登录和 cli 的情况下在 Aws ec2 上运行 .Jar 文件?
问题描述
我创建了一个与 firebase 连接的 java-server。此服务器用于侦听 Firebase 更改并相应地更新数据库。为了让它一直运行,我在我的主函数中添加了 CountDownLatch 这是我的代码。
CountDownLatch latch = new CountDownLatch(1);
while (true)
{
nextGamesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
nextGames = snapshot;
setNextGame(nextGames);
}
@Override
public void onCancelled(DatabaseError error) {
System.out.println(error.toString());
System.out.println("3");
}
});
latch.await();
}
我分享上面的代码是因为我是 java 新手,如果有更好的方法来做这件事,我真的很感激建议。
让我们进入正题。我已将整个项目打包在一个 jar 文件中,并将该文件部署在我的 Aws ec2 实例上。一切都运行良好,除了我总是需要从我的个人电脑上调用这个类。我希望这个文件自己运行,而不需要从外部系统调用它。我已经查看了 tomcat,但它适用于 HTTP 请求,或者如果我对 tomcat 的理解不正确,请告诉我。
所以问题是。我怎样才能永远在我的实例上运行这个 Jar。
解决方案
部署到 AWS 是一个非常广泛的主题,涉及 ASG 和负载平衡,以实现高可用性、可扩展性和容错。CICD 的 Jenkins/Terraform/Docker/Packer。
但只是为了回答您的问题,请使用 Ec2 实例的“用户数据”功能并指定您要运行的命令。在用户数据中提及该命令将确保该命令在 Ec2 启动时运行。
例如,
java -cp /home/ec2-user/App.jar com.test.MySampleClass
假设:App.jar 已经在 Ec2 实例中可用。
如果是web应用,可以部署到tomcat。再次使用 Ec2 用户数据功能并提到一堆命令来下载并启动它。
推荐阅读
- .net - 使用 `#pragma warning disable MSB3245` 禁用 MSB3245 和 MSB3243 警告不起作用
- flutter - 如何在 Flutter 中切换选项卡时启用 ListView 在 TabView 内的滚动
- ansible - Ansible 过滤器根据子列表值了解项目是否存在
- bokeh - HoverToolTip 持续散景
- c++ - 声明不兼容,但似乎匹配并且包含标头
- r - R arules:表示重复项集
- ibm-cloud - 如何启用 IBM 公共云上同一子网上的私有 IP 上的经典基础架构虚拟服务器之间的通信(如 ssh)?
- javascript - preact-router/match 没有 babel
- javascript - 无法使用 node-cron 停止 cron 作业
- css - 有什么方法可以改变表格内条的颜色?