2016-02-28 3 views
2

Я новичок в Spring Boot. Я просмотрел документы и несколько учебников. То, что я понял из них, Spring Boot облегчает процесс разработки. Spring Boot упрощает создание автономных приложений Spring Spring Spring, которые вы можете «просто запустить». До учебников все было в порядке.Интеграция Spring Boot с существующим приложением Spring

Но предположим, что у вас уже есть приложение (SpringMVC + Hibernate + MySql), могу ли я использовать Spring Boot в этом приложении? Чтобы понять ответ, я решил интегрировать Spring Boot в один проект. Я загрузил образец рабочего кода с http://www.journaldev.com/3531/spring-mvc-hibernate-mysql-integration-crud-example-tutorial и попытался интегрировать Spring Boot. Я не могу заставить это работать. Я становлюсь ниже исключения.

Exception in thread "main" java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.logging.ClasspathLoggingApplicationListener 
at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:414) 
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:394) 
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:385) 
at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:263) 
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:237) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) 
at com.journaldev.spring.Application.main(Application.java:14) 

Caused by: java.lang.NoClassDefFoundError: 
org/springframework/context/event/GenericApplicationListener 

Теперь я полностью смущен. У меня создается впечатление, что Spring Boot не может быть интегрирован над каким-либо приложением. Вам нужно отладить приложение с нуля. Не уверен, верю я или нет. Пожалуйста, объясните мне, как я могу воспользоваться преимуществами Spring Boot в уже разработанном Spring приложении?

Ниже pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.journaldev.spring</groupId> 
<artifactId>SpringMVCHibernate</artifactId> 
<name>SpringMVCHibernate</name> 
<packaging>war</packaging> 
<version>1.0.0-BUILD-SNAPSHOT</version> 
<properties> 
    <java-version>1.6</java-version> 
    <org.springframework-version>4.0.3.RELEASE</org.springframework-version> 
    <org.aspectj-version>1.7.4</org.aspectj-version> 
    <org.slf4j-version>1.7.5</org.slf4j-version> 
    <hibernate.version>4.3.5.Final</hibernate.version> 
</properties> 
<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework-version}</version> 
     <exclusions> 
      <!-- Exclude Commons Logging in favor of SLF4j --> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 
    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 

    <!-- Apache Commons DBCP --> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.4</version> 
    </dependency> 
    <!-- Spring ORM --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 

    <!-- AspectJ --> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>${org.aspectj-version}</version> 
    </dependency> 

    <!-- Logging --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${org.slf4j-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>${org.slf4j-version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${org.slf4j-version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.15</version> 
     <exclusions> 
      <exclusion> 
       <groupId>javax.mail</groupId> 
       <artifactId>mail</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>javax.jms</groupId> 
       <artifactId>jms</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.sun.jdmk</groupId> 
       <artifactId>jmxtools</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.sun.jmx</groupId> 
       <artifactId>jmxri</artifactId> 
      </exclusion> 
     </exclusions> 
     <scope>runtime</scope> 
    </dependency> 

    <!-- @Inject --> 
    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
    </dependency> 

    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <!-- Test --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
    </dependency> 

</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.9</version> 
      <configuration> 
       <additionalProjectnatures> 
        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
       </additionalProjectnatures> 
       <additionalBuildcommands> 
        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
       </additionalBuildcommands> 
       <downloadSources>true</downloadSources> 
       <downloadJavadocs>true</downloadJavadocs> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <compilerArgument>-Xlint:all</compilerArgument> 
       <showWarnings>true</showWarnings> 
       <showDeprecation>true</showDeprecation> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <configuration> 
       <mainClass>org.test.int1.Main</mainClass> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
    <finalName>${project.artifactId}</finalName> 
</build> 
</project> 
+0

Я много пытался решить исключение, но не смог это сделать. –

+0

Какие стартовые модули вы используете для настройки приложения загрузки Spring? –

+0

Pls share your pom.xml – Avis

ответ

4
Caused by: java.lang.NoClassDefFoundError: 
org/springframework/context/event/GenericApplicationListener 

Из приведенных выше ошибок, приложение не может найти класс, определенный из зависимостей баночки. GenericApplicationListener добавлен из весенней версии 4.2 AFAIK.

<org.springframework-version>4.0.3.RELEASE</org.springframework-version> 

Обновите весеннюю версию >4.2 и перепроверить.

Здесь идет путь до dependency management. Spring-boot позволяет легко перемещаться. Вот что говорит документация весной загрузки.

  • Обеспечить упрямый РОМ «стартер», чтобы упростить ваш Maven конфигурацию
  • автоматически настроить Spring по возможности

Мы не должны беспокоиться о зависимостях много отдельно от поставщика базы данных конкретных банках для добавления в соответствии с требованиями.

API

Я получаю впечатление, что весна загрузка не может быть интегрирована выше вида применения. Вам нужно отладить приложение с нуля.

Нет, когда у нас есть конфигурация maven, мы все об изменении корневой помпы с их зависимостями. Все о абстракции зависимостей. Создание приложения с корневого уровня, несомненно, легко, но, следуя принципам maven, мы можем даже заставить существующее приложение следовать весенней загрузке.

Пожалуйста, объясните мне, как я могу воспользоваться преимуществами Spring Boot в уже разработанном Spring приложении?

Изучите эти зависимости, проанализируйте их корень POM. Они дают нам все зависимости, которые вы добавляете в обычное приложение. Это помогает нам с конфигурациями сборки и многими другими зависимостями плиты котла.

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
</dependencies> 

Помимо вышеперечисленного,

  • Что воспитание детей в мавена
  • Как изменить версию в детской ПОМ

Поможет вам в настройке приложений.

+0

Это случилось с тем, что я пытался перенести раннее весеннее приложение на весенний ботинок. обновление зависимостей spring-context решило проблему. –

0

Spring Boot управляет зависимостями для вас. Все зависимости в релизе для springboot проверяются на совместимость с разумными значениями по умолчанию. Вы можете определить свой собственный или переопределить, но его рекомендуется, чтобы вы этого не сделали. Обратитесь к официальной документации ниже:

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-dependency-management

Каждый выпуск Spring ботинке связан с базовой версией Spring Framework, поэтому мы настоятельно рекомендуем Вам не указывать свою версию по своему усмотрению.

Для существующего приложения может быть трудно получить соответствие версий, это, безусловно, выполнимо, что будет зависеть от сложности приложения, времени на руке и тестирования регрессии. С точки зрения пути миграции прокомментируйте все зависимости, которыми вы управляете, и дайте пружинной втягивать это в приложение, например. spring-boot-starter-web уже тянет весенний mvc 4.2.4, в то время как ваш pom определяет его как 4.0.3.RELEASE. Это относится к другим зависимостям. Спящий режим и весенняя орма будут вытащены пружиной-стартером-данными-jpa.

У меня есть полностью функциональное корпоративное приложение с почти одинаковыми зависимостями, используя весеннюю загрузку-стартер-паутину, весеннюю загрузку-стартер-данные-jpa, систему безопасности с пружинным загрузчиком и весенний ботинок-стартер-freemarker и банку для клиента БД. Но наше приложение было довольно новым, когда мы мигрировали.

1

Просто хочу добавить, я закончил все мои R & D и решает все проблемы. Я создал приложение Spring Boot и опубликовал его по github. https://github.com/gauravdubey58/SpringBootLegacy

В этом приложении я использую Spring MVC и Hibernate с конфигурацией xml.

Смежные вопросы