自动启动弹簧应用程序

时间:2008-10-04 22:42:46

标签: java spring

有没有一种方法来初始化和启动命令行Spring应用程序而无需编写main方法。似乎所有这些主要方法都具有相同的形式

public static void main(final String[] args) throws Exception {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml", Boot.class);
    FooService fooService = (FooService) ctx.getBean("fooService");
    fooService.bar();
}

我认为这并不复杂,但有人找到了一种方法来提供一种方法来在命令行中指定context.xml,或者更好的是,在清单文件中?

这里的目标是将spring应用程序的创建简化为可执行jar。我希望我可以在清单中指定一些实用程序类作为Main-Class。我想我还需要指定app的起点,一个bean以及一个开始该过程的方法。

2 个答案:

答案 0 :(得分:6)

我会按照我的理解尝试回答这个问题:

  

如何打包包含弹簧配置的jar,例如我只需要使用java -jar myjar.jar

您问题中的代码段只是起作用。您无需参数化context.xml。您只需将代码及其依赖项(spring等)捆绑在一个jar中,并在jar文件中为主类提供适当的清单条目。

我个人使用maven 2,这是一个pom.xml我会用它做到这一点:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow</groupId>
  <artifactId>stackoverflow-autostart-spring-app</artifactId>
  <version>0.1</version>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring</artifactId>
      <version>2.5.2</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.stackoverflow.spring.autostart.Autostart</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

这是假设java代码的一些包名,源代码在src/main/java目录中,文件context.xmlsrc/main/resources目录中。

所以在这个pom.xml中有几个要点:

  1. 春天依赖(我相信自己说话)
  2. maven jar plugin的配置,将主类添加为清单条目
  3. maven shade plugin,这是负责收集所有依赖项/类并将它们打包到一个jar中的插件。
  4. 运行target\stackoverflow-autostart-spring-app-0.1.jar时,mvn package可以使用可执行jar。

    我有这个代码都在我的盒子上工作但只是意识到我不能在这里附加一个zip文件。任何人都知道我可以这样做的地方并在这里链接?

    如果您要查看,我创建了一个git repository at github,其中包含与此问题相关的代码。

    希望这有帮助。

答案 1 :(得分:3)

是。写一个简单的SpringMain,它将任意数量的xmlproperties文件作为参数。然后,您可以(在main方法中)从这些文件初始化应用程序。开始你的程序只需要:

java -cp myapp.jar util.SpringMain context.xml

然后使用相关bean上的生命周期属性(init-method)来启动应用程序