2016-04-26 120 views
5

我有一個春天啓動應用程序。它運行在2臺服務器上。這些服務器具有相同的配置。 的這種工作原理一一...另一方面開始時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 

的DB運行(第二服務器定期連接到它..)和所有特權對用戶和主機是正確的

這是我的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> 

我所有的休眠設置在HibernateConfiguration.class(我從遷移Spring MVC的這個程序,春季啓動)

@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

春季啓動正常配置其自身的DataSource和EntityManagerFactory的......您爲什麼選擇創建自己的,而不是提供什麼?這可能會干擾您的配置。也是第二臺服務器甚至能夠連接到服務器,即防火牆規則等 –

+0

你是如何加載'db.properties'? 。春天啓動的標準是['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啓動時,您不應該包含其他Spring的依賴直接,但依靠引導自己的依賴管理。當使用提供的「初學者」時,您可以確保所有需要的庫都將包含在匹配的版本中。文檔:https://spring.io/guides/gs/spring-boot/#use-maven

2)調度指南不是一個Web應用程序,所以你可能在REST指南的pom.xml中有一些模糊的東西?

一個「好」 POM將有「彈簧引導起動網」(爲方便起見),或者包含在單獨列出啓動所有的依賴。只要檢查你是否有他們。還要確保在SpringApplication中包含@EnableAutoConfiguration。添加類中的對象陣列運行SpringApplication的run方法:SpringApplication.run(新對象[] {Application.class,ScheduledTasks.class},參數);

享受:)

+0

對不起@Abdel,但我不明白你寫的所有內容。我用彈簧啓動工具製作了POM,添加了我需要的所有東西(hibernate,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註解。