Приложение Autostart Spring

Итак, есть ли способ инициализировать и запустить приложение 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 в командной строке или, что еще лучше, в файле манифеста?

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

Вы только что сделали ... Это может помочь, если вы объясните, чего вы пытаетесь достичь. Вам нужен способ упаковки приложений Spring в виде исполняемых jar-файлов?

noah 05.10.2008 03:00

Ага, цель - исполняемый jar.

sblundy 05.10.2008 03:06

Хорошо, но, очевидно, вы можете просто изменить приведенный выше код, чтобы использовать args [0] вместо context.xml. Похоже, вы пытаетесь найти общий способ автоматической упаковки приложения Любые Spring в виде исполняемого файла jar. Я хочу сказать, что я все еще не уверен, чего вы хотите. Можете добавить подробностей?

noah 05.10.2008 03:27

Я думал, что этот URL-адрес был полезен при ответе на этот вопрос: stackoverflow.com/questions/4787719/…

user1288993 23.03.2012 23:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
3 501
2

Ответы 2

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

How to package a jar containing a spring configuration such as I just need to use java -jar myjar.jar?

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

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

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

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

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

Большое спасибо, что разместили свой образец приложения на github. Я пытался пройти через всю эту настройку и был так близок, но это не сработало. Я смог использовать твой скелет и начать работать. ОЧЕНЬ ПРИЗНАТЕЛЕН!

Dean Poulin 19.02.2013 21:14

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

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

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

Другие вопросы по теме