Автозапуск весеннего приложения - PullRequest
2 голосов
/ 05 октября 2008

Итак, есть ли способ инициализировать и запустить приложение 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();
}

Полагаю, это не сложно, но кто-то нашел способ предоставить способ просто указать context.xml в командной строке или, что еще лучше, в файле манифеста?

Цель здесь - упростить создание весенних приложений в виде исполняемых jar-файлов. Я надеюсь, что я могу указать некоторый служебный класс как Main-Class в манифесте. Полагаю, мне также нужно было бы указать начальную точку приложения, компонент и метод, с которого начинается процесс.

Ответы [ 2 ]

6 голосов
/ 05 октября 2008

Я постараюсь ответить на вопрос так, как я его понимаю:

Как упаковать банку, содержащую конфигурацию пружины, такую ​​как мне просто нужно использовать java -jar myjar.jar?

Фрагмент кода, который у вас есть в вашем вопросе, просто работает. Вам не нужно параметризовать context.xml. Вам просто нужно связать ваш код и его зависимости (пружины и т. Д.) В один 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.xml в каталоге src/main/resources.

Итак, в этом pom.xml есть несколько важных моментов:

  1. весенняя зависимость (говорит сама за себя, я верю)
  2. конфигурация плагина maven jar , который добавляет основной класс в качестве записи манифеста
  3. плагин maven shade , который является плагином, отвечающим за сбор всех зависимостей / классов и упаковку их в одну единственную банку.

Исполняемый файл будет доступен на target\stackoverflow-autostart-spring-app-0.1.jar при запуске mvn package.

У меня есть этот код, работающий на моей коробке, но я только что понял, что не могу прикрепить zip-файл здесь. Кто-нибудь знает место, где я мог бы сделать это и связать здесь?

Я создал git-репозиторий на github с кодом, связанным с этим вопросом, если вы хотите проверить его.

Надеюсь, это поможет.

3 голосов
/ 05 октября 2008

Да. Напишите простой SpringMain, который принимает в качестве аргументов произвольное количество файлов xml и properties. Затем вы можете (в основном методе) инициализировать приложение из этих файлов. Запуск вашей программы - это просто вопрос:

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

Затем вы используете атрибуты жизненного цикла (init-method) в соответствующих бобах, чтобы запустить приложение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...