当前位置: 首页 > 知识库问答 >
问题:

创建Spring boot独立应用程序

白博易
2023-03-14

我正在试图弄清楚如何构建一个Spring Boot独立应用程序。当然,要让东西自动连线需要一些初始的上下文起点。如果我只是尝试自动生成一个类来运行一个作业,那么即使我将它设置为静态,它也是空的。

有没有办法在一个独立的非Web应用程序中使用Spring@Services?

@SpringBootApplication
public class MyApplication {

    @Autowired
    private static JobRunnerService job;

    public static void main(String[] args) {
         SpringApplication.run(MyApplication.class, args);

         job.send();   //job is null !

    }
}

因此,首先将静态JobRunnerService连接到运行MyApplication的主程序,JobRunner(Service)类将非静态SshSessionService连接到其中。SshSession(服务)最终只有一个无参数的构造函数

@Service("jobRunnerService")
public final class JobRunner implements JobRunnerService{


    @Autowired
    private SshSessionService ssh;      

    @Autowired
     public JobRunner(SshSessionService ssh){
        this.ssh = ssh;

     }

     public void sendToAgent() { ....
}

@Service("sshSessionService")
public class SshSession implements SshSessionService {

    public SshSession() {

    }
}

它在JobRunnerService作业引用处开始为null。

共有1个答案

沈健
2023-03-14

想到了几种不同的解决方案

如果查看SpringApplication.run()方法,您会注意到它返回ApplicationContext。从中,您可以获取jobrunnerservice,例如。

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(MyApplication.class, args);
        JobRunnerService job = ctx.getBean(JobRunnerService.class);
        job.send();
    }
}

另一种解决方案是对send()方法使用@PostConstruct注释:

@Service("jobRunnerService")
public class JobRunner implements JobRunnerService {

    @PostConstruct
    public void send() { ... }
}
@Component
public class SendRunner implements ApplicationRunner {

    @Autowired
    private JobRunnerService job;

    @Override
    public void run(ApplicationArguments args) {
        job.send();
    }
}
@Service("jobRunnerService")
public class JobRunner implements JobRunnerService, ApplicationRunner {

    @Override
    public void send() { ... }

    @Override
    public void run(ApplicationArguments args) {
        send();
    }
}
 类似资料:
  • 问题内容: 如何使用Maven创建桌面(独立/ Swing)应用程序? 我正在使用Eclipse 3.6。 问题答案: 创建一个Maven项目,如下所示: 将以下条目添加到您的pom文件中: 将项目作为Maven项目导入到Eclipse,然后作为Java应用程序运行。

  • 请帮帮我,我用两个外部jar文件开发了一个简单的应用程序。在清理和构建的同时,它为应用程序和dist目录中的库文件夹创建了一个jar文件。当我尝试作为jar执行时,它执行得很完美

  • 现在假设我们想要使用 Spark API 写一个独立的应用程序。我们将通过使用 Scala(用 SBT),Java(用 Maven) 和 Python 写一个简单的应用程序来学习。 我们用 Scala 创建一个非常简单的 Spark 应用程序。如此简单,事实上它的名字叫 SimpleApp.scala: /* SimpleApp.scala */ import org.apache.spark.S

  • 在本章节中,我们将学习如何为 Docusaurus 创建独立页面(pages)。 这对于创建类似展示页面、练习页面或支持页面等 非经常修改的独立页面 非常有用。 独立页面的功能由 @docusaurus/plugin-content-pages 插件提供。 你可以使用 React 组件或 Markdown 来创建独立页面。 note 独立页面是没有侧边栏的,只有 文档(即 docs 目录下的文件)

  • 问题内容: 我正在考虑开发由两部分组成的桌面应用程序: 用户界面(例如Java应用) 后端Node.js服务器 2个部分通过插座连接。不要问为什么我知道这很奇怪。 我将希望能够为客户提供带有安装程序的应用程序。我不希望用户必须自己安装Node.js。 有没有一种方法可以独立安装Node.js服务器,即无需在系统上全局安装Node.js。 对于任何(Windows,Linux,Mac OS X …)