Spring Boot error: невозможно запустить EmbeddedWebApplicationContext из-за отсутствия компонента EmbeddedServletContainerFactory

71
5

Я пытаюсь поместить данные в 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 class:

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

спросил(а) 2015-12-01T17:16:00+03:00 4 года, 12 месяцев назад
1
Решение
59

Вам нужно добавить @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>

ответил(а) 2015-12-01T19:10:00+03:00 4 года, 11 месяцев назад
42

Чтобы упростить конфигурацию Pivotal GemFire в вашем Spring приложения загрузки, вы можете рассмотреть возможность использования (начиная с) Spring Ботинок для 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 ненужным явное объявление @EnableGemfireRepositories.


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

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

ответил(а) 2019-04-16T21:58:00+03:00 1 год, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема