2016-04-26 2 views
5

У меня есть приложение Spring Boot. Он работает на двух серверах. Серверы имеют одинаковую конфигурацию. Один из этого работает ... с другой стороны я получаю это исключение при запуске егоSpringBoot - Не удалось запустить встроенный TomCat

2016-04-26 08:24:17.633 ERROR [localhost-startStop-1]: Error starting Tomcat context: org.springframework.beans.factory.BeanCreationException 
2016-04-26 08:24:17.903 ERROR [main]: Application startup failed 
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) 
    at it.besmart.parkserver.StartServer.main(StartServer.java:13) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:54) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:99) 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:76) 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:457) 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:168) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:160) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) 
    ... 14 more 

Трассировка стека продолжается много строк, в основном я получаю проблемы на автомобильной проводке и инъекционные деятельности, с первопричиной

Invocation of init method failed; nested exception is org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 

Но мой db.properties файл:

jdbc.driverClassName = com.mysql.jdbc.Driver 
jdbc.url = jdbc:mysql://192.168.3.240:3306/SMARTPARK?useSSL=false 
jdbc.username = parkuser 
jdbc.password = xxxxxxxxxxxxxxxx 
hibernate.dialect = org.hibernate.dialect.MySQLDialect 
hibernate.show_sql = false 
hibernate.format_sql = false 

БД работает (второй сервер регулярно подключается к нему ..) и всем привилегии для пользователей и хостов правильны

Это мой 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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>it.besmart</groupId> 
    <artifactId>eparkserver</artifactId> 
    <version>1.0.0</version> 
    <packaging>jar</packaging> 

    <name>eparkserver</name> 
    <description>ePark server</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.3.RELEASE</version> 
     <relativePath /> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
     <start-class>it.besmart.parkserver.StartServer</start-class> 
     <!-- 
     <tomcat.version>8.0.29</tomcat.version> 
     --> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-log4j</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.pi4j</groupId> 
      <artifactId>pi4j-core</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</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> 
       <configuration> 
        <executable>true</executable> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>server-copy</id> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <phase>package</phase> 
         <configuration> 
          <target> 
           <echo message="Push to server /home/pi/park/" /> 
           <scp trust="yes" todir="pi:[email protected]:/home/pi/park/"> 
            <fileset dir="${basedir}/target"> 
            </fileset> 
           </scp> 
          </target> 
         </configuration> 
        </execution> 
       </executions> 
       <dependencies> 
        <dependency> 
         <groupId>org.apache.ant</groupId> 
         <artifactId>ant-jsch</artifactId> 
         <version>1.9.6</version> 
        </dependency> 
       </dependencies> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Все мои настройки Hibernate в HibernateConfiguration.class (я мигрировали это приложение из Spring MVC для Spring ботинке)

@Configuration 
@EnableTransactionManagement 
@ComponentScan({ "it.besmart" }) 
@PropertySource(value = { "classpath:db.properties" }) 
public class HibernateConfiguration { 

@Autowired 
private Environment environment; 

@Bean 
public LocalSessionFactoryBean sessionfactory(){ 
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
    sessionFactory.setDataSource(dataSource()); 
    sessionFactory.setPackagesToScan(new String[] {"it.besmart.models"}); 
    sessionFactory.setHibernateProperties(hibernateProperties()); 
    return sessionFactory; 
} 

@Bean 
public DataSource dataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName")); 
    dataSource.setUrl(environment.getRequiredProperty("jdbc.url")); 
    dataSource.setUsername(environment.getRequiredProperty("jdbc.username")); 
    dataSource.setPassword(environment.getRequiredProperty("jdbc.password")); 
    return dataSource; 
} 

private Properties hibernateProperties() { 
    Properties properties = new Properties(); 
    properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); 
    properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); 
    properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); 
    return properties;   
} 

@Bean 
@Autowired 
public HibernateTransactionManager transactionManager(SessionFactory s) { 
    HibernateTransactionManager txManager = new HibernateTransactionManager(); 
    txManager.setSessionFactory(s); 
    return txManager; 
} 
} 

Я не знаю, что происходит

+0

Spring Boot обычно настраивает собственный DataSource и EntityManagerFactory ... Почему вы решили создать свой собственный, а не тот, который предоставляется? Возможно, это мешает вашей собственной конфигурации. Также второй сервер даже способен подключиться к серверу, то есть правила брандмауэра и т. Д. –

+0

Как вы загружаете 'db.properties'? , Стандарт Spring boot - это ['application.properties'] (https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external- конфигурации-профиль-специфическое-свойство). –

+0

Отредактированный исходный вопрос, у меня есть класс HibernateConfiguration, потому что я реорганизовал приложение из Spring MVC в Boot. Но приложение работает на сервере и всегда работало ... – besmart

ответ

0

1) При использовании Spring Boot вы не должны включать другие зависимости Spring напрямую, но полагайтесь на собственное управление зависимостями Boot , При использовании предоставленных «стартеров» вы можете быть уверены, что все необходимые библиотеки будут включены в соответствующую версию. Документация: https://spring.io/guides/gs/spring-boot/#use-maven

2) Руководство по планированию не является веб-приложением, поэтому у вас, вероятно, есть какой-то заплесневелый материал в вашем pom.xml из руководства REST?

«Хороший» pom имел бы «весеннюю загрузку-стартер-сеть» (для удобства) или все зависимости, включенные в стартер, перечислены отдельно. Просто проверьте, что у вас их есть. Также убедитесь, что вы включили @EnableAutoConfiguration в свой SpringApplication. Добавьте классы для запуска в массиве Object к методу запуска SpringApplication: SpringApplication.run (новый Object [] {Application.class, ScheduledTasks.class}, args);

Enjoy :)

+0

Извините @ Abdel, но я не могу понять все, что вы написали. Я сделал POM с утилитой весенней загрузки, добавив все, что мне нужно (спящий режим, jackson, log4j и т. Д.), И это то, что мне предоставила утилита. У меня также есть мой начальный класс, аннотированный с помощью '@ SpingBootApplication'. Приложение - это только репозиторий REST, он запускает и предоставляет некоторые службы REST. – besmart

2

У меня была та же проблема. Добавьте это:

<dependency> 
<groupId><groupId></groupId> 
<artifactId><some dependency></artifactId> 
<version><version></version> 
<exclusions> 
    <exclusion> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
    </exclusion> 
</exclusions> 

0

Добавить новый файл под SRC/основные/ресурсов с именем application.properties

spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.datasource.url=jdbc:mysql://192.168.3.240:3306/SMARTPARK?useSSL=false 
spring.datasource.password=xxxxxxxxxxxxxxxx 
spring.datasource.username=parkuser 
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect 
spring.jpa.show-sql=true 

Удалить HibernateConfiguration класс & на своем главном классе поставил @EnableTransactionManagement аннотацию.

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