2016-04-26 39 views
5

Ho un'applicazione Spring Boot. Funziona su 2 server. I server hanno la stessa configurazione. Uno uno di questo funziona ... d'altra sto ottenendo questa eccezione quando si inizia èSpringBoot - Impossibile avviare TomCat incorporato

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 

L'analisi dello stack continua per un sacco di righe, per lo più ho problemi sul cablaggio auto e attività per via parenterale, con causa principale di file

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

ma il mio 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 

Il DB è in esecuzione (secondo server si connette ad esso regolarmente ..) e tutti i privilegi per gli utenti e gli host sono corretti

Questo è il mio 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> 

Tutte le mie impostazioni di modalità sospensione sono in HibernateConfiguration.class (i migrato questa applicazione da Spring MVC a primavera Boot)

@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; 
} 
} 

Non so cosa sta succedendo

+0

Spring Boot normalmente configura il proprio DataSource ed EntityManagerFactory ... Perché hai scelto di crearne uno personale invece di quello che viene fornito? Può essere che ciò stia interferendo con la tua configurazione. Inoltre, il secondo server è anche in grado di connettersi al server, ad esempio le regole del firewall ecc. –

+0

Come si carica 'db.properties'? . Spring boot standard è ['application.properties'] (https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external- -specifiche proprietà config-profilo-). –

+0

Domanda originale modificata, ho una classe HibernateConfiguration perché ho refactored l'app da Spring MVC a Boot. Ma l'app funziona su un server e ha sempre funzionato ... – besmart

risposta

0

1) Quando si utilizza Spring Boot non si dovrebbero includere direttamente le altre dipendenze di Spring, ma si basano sulla gestione delle dipendenze di Boot . Quando si utilizzano gli "antipasti" forniti, si può essere sicuri che tutte le librerie necessarie saranno incluse in una versione corrispondente. Documentazione: https://spring.io/guides/gs/spring-boot/#use-maven

2) La guida di pianificazione non è un'app Web, quindi probabilmente hai alcune cose ammuffite nel tuo pom.xml dalla guida REST?

Un "buon" pom avrebbe "spring-boot-starter-web" (per comodità) oppure tutte le dipendenze incluse nell'avviatore elencate singolarmente. Basta controllare di averli. Assicurati inoltre di includere un @EnableAutoConfiguration nella tua SpringApplication. Aggiungere le classi da eseguire in una matrice Oggetto al metodo di esecuzione di SpringApplication: SpringApplication.run (new Object [] {Application.class, ScheduledTasks.class}, args);

Enjoy :)

+0

Scusa @Abdel ma non riesco a capire tutto ciò che hai scritto. Ho creato il POM con l'utility di avvio a molla, aggiungendo tutte le cose di cui ho bisogno (ibernazione, jackson, log4j e così via) e questo è ciò che mi ha dato l'utilità. Ho anche annotato la mia classe iniziale con '@ SpingBootApplication'. L'applicazione è solo un repository REST, avvia ed espone alcuni servizi REST. – besmart

2

Ho avuto lo stesso problema. Aggiungere questo:

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

0

aggiungere un nuovo file in src/main/risorse con il nome 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 

Rimuovere HibernateConfiguration classe & sulla tua classe principale messo @EnableTransactionManagement annotazione.