那么有没有一种方法可以在不编写 main 方法的情况下初始化和启动命令行 Spring 应用程序。似乎所有这些主要方法都具有相同的形式
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();
}
我想这并不复杂,但是是否有人找到了一种方法来提供一种方法来仅在命令行或更好的是在 list 文件中指定 context.xml
?
这里的目标是简化 spring 应用程序作为可执行 jar 的创建。我希望我可以在 list 中指定一些实用程序类作为 Main-Class
。我想我还需要指定应用程序的起点、一个 bean 和一个方法,它是流程开始的地方。
最佳答案
我会尽量按照我的理解来回答这个问题:
How to package a jar containing a spring configuration such as I just need to use
java -jar myjar.jar
?
您问题中的代码片段很有效。您不必参数化 context.xml
。您只需将您的代码及其依赖项(spring 等)捆绑在一个 jar 中,并在 jar 文件中为主类添加适当的 list 条目。
我个人使用 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.xml
在 src/main/resources
目录。
所以在这个pom.xml
中有几个重点:
- spring 依赖(我相信不言自明)
- maven jar plugin 的配置, 将主类添加为 list 条目
- maven shade plugin ,这是负责收集所有依赖项/类并将它们打包到一个 jar 中的插件。
当运行 mvn package
时,可执行 jar 将在 target\stackoverflow-autostart-spring-app-0.1.jar
中可用。
我的盒子上都有这段代码,但我才意识到我无法在此处附加 zip 文件。任何人都知道我可以这样做的地方并链接到这里?
我创建了一个 git repository at github如果您想查看,请提供与此问题相关的代码。
希望这对您有所帮助。
关于java - 自动启动 Spring 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/171130/