Ошибка загрузки Spring: невозможно запустить EmbeddedWebApplicationContext из-за отсутствия bean-компонента EmbeddedServletContainerFactory

Я пытаюсь поместить данные в GemFire ​​с помощью Spring Data GemFire.

Я перешел по этой ссылке

@Region("stockdata")
public class StockInfo {

    @Id 
    public String symbol;

    public String price;

    @PersistenceConstructor
    public StockInfo(String symbol, String price) {
        super();
        this.symbol = symbol;
        this.price = price;
    }

    @Override
    public String toString() {
        return "StockInfo [symbol=" + symbol + ", price=" + price + "]";
    }

    public String getSymbol() {
        return symbol;
    }
    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }

}

StockRepository класс:

public interface StockRepository extends CrudRepository<StockInfo, String> {
    StockInfo findByName(String symbol);

}

Основной класс:

@Configuration
@EnableGemfireRepositories
public class Application implements CommandLineRunner {

    @Bean
    CacheFactoryBean cacheFactoryBean() {
        return new CacheFactoryBean();

    }

    @Bean
    LocalRegionFactoryBean<String, StockInfo> localRegionFactory(final GemFireCache cache) {
        return new LocalRegionFactoryBean<String, StockInfo>() {

            {
                setCache(cache);
                setName("stockdata");
                setClose(false);
            }
        };
    }
    @Autowired
    StockRepository stockRepositry;
    public void run(String... arg0) throws Exception {
        StockInfo fbStock = new StockInfo("FB", "100");
        StockInfo aaplStock = new StockInfo("AAPL", "200");
        StockInfo msftStock = new StockInfo("MSFT", "300");

        System.out.println("Before linking up with Gemfire...");
        for (StockInfo stockInfo : new StockInfo[] {fbStock, aaplStock,msftStock }) {
            System.out.println("\t" + stockInfo);
        }

        stockRepositry.save(fbStock);
        stockRepositry.save(aaplStock);
        stockRepositry.save(msftStock);

        System.out.println("Lookup each Stock by name...");

        for (String symbol : new String[] { fbStock.symbol, aaplStock.symbol,msftStock.symbol }) {
            System.out.println("\t" + stockRepositry.findByName(symbol));
        }

    }

    public static void main(String[] args) throws IOException {
        SpringApplication.run(Application.class, args);
    }

Pom.xml:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>
    <properties>
        <java.version>1.7</java.version>
    </properties>
    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-gemfire</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency> 
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    </dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </repository>
</repositories> 

Ошибка ниже:

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:347) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1112) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1101) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at com.emc.geode.entity.Application.main(Application.java:62) [classes/:na]
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:183) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:156) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    ... 8 common frames omitted

person Aman    schedule 01.12.2015    source источник
comment
Скорее всего вам не хватает spring-boot-maven-plugin в помпе   -  person jny    schedule 01.12.2015
comment
@jny .it is there .. ‹build› ‹plugins› ‹plugin› ‹groupId› org.springframework.boot ‹/groupId› ‹artifactId› spring-boot-maven-plugin ‹/artifactId› ‹/plugin› ‹/ плагины >   -  person Aman    schedule 01.12.2015
comment
Как вы его создаете и запускаете?   -  person jny    schedule 01.12.2015
comment
java -jar GeodeRest-0.0.1-SNAPSHOT.jar   -  person Aman    schedule 01.12.2015
comment
Как вы создаете файл jar? С maven?   -  person jny    schedule 01.12.2015
comment
Позвольте нам продолжить это обсуждение в чате.   -  person Aman    schedule 01.12.2015


Ответы (2)


Вам нужно добавить @SpringBootApplication в свой основной класс.

@EnableGemfireRepositories
@SpringBootApplication
public class Application implements CommandLineRunner {

и в вашем pom добавьте зависимость spring-boot-starter-web вместо spring-web

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
person reos    schedule 01.12.2015

Чтобы упростить конфигурацию Pivotal GemFire ​​в приложении Spring Boot, вы можете рассмотреть возможность использования (начиная с) Spring Boot для Pivotal GemFire ​​ (SBDG) проект.

SBDG основан на Spring Data для Pivotal GemFire ​​ (SDG) вместе с другими проектами Spring, очевидно, Spring Boot, но также и Spring Session для Pivotal GemFire ​​ (SSDG; здесь), а также. Он применяет все концепции Spring Boot (например, упрямый, «соглашение по конфигурации» с использованием автоконфигурации и т. Д.) При разработке приложений Pivotal GemFire. со Spring в целом и Spring Boot в частности.

Например, в вашем приложении SBDG автоматически настроит репозитории SD [G], делая явное объявление @EnableGemfireRepositories ненужным.

У использования SBDG есть много других преимуществ.

Пища для размышлений.

person John Blum    schedule 16.04.2019
comment
На самом деле, я заметил, что вы используете Spring Boot 1.x, который в то время имел модуль spring-boot-starter-data-gemfire. Этот стартовый модуль больше не существует в Spring Boot 2.0 и был заменен проектом SBDG, на который я ссылался в своем ответе выше. - person John Blum; 16.04.2019