2016-04-26 18 views
5

Tôi có một ứng dụng Khởi động mùa xuân. Nó chạy trên 2 máy chủ. Các máy chủ có cùng cấu hình. Một một trong này nó hoạt động ... mặt khác tôi nhận được ngoại lệ này khi khởi động nóSpringBoot - Không thể khởi động TomCat được nhúng

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 

Các vết đống tiếp tục cho rất nhiều hàng, chủ yếu là tôi nhận được vấn đề trên hệ thống dây điện tự động và các hoạt động tiêm, với nguyên nhân gốc rễ

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

Nhưng tôi db.properties tập tin là:

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 

Các DB đang chạy (máy chủ thứ hai kết nối với nó thường xuyên ..) và tất cả các đặc quyền cho người dùng và host là chính xác

Đây là pom.xml của tôi

<?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> 

Tất cả các thiết lập chế độ ngủ đông của tôi là trong HibernateConfiguration.class (i di cư ứng dụng này từ Spring MVC Spring 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; 
} 
} 

Tôi không biết điều gì đang xảy ra

+0

Khởi động bình thường thường cấu hình DataSource và EntityManagerFactory của riêng nó ... Tại sao bạn lại chọn tạo riêng của mình thay vì những gì được cung cấp? Có thể điều này đang can thiệp vào cấu hình của riêng bạn. Cũng là máy chủ thứ hai thậm chí có thể kết nối với máy chủ, tức là quy tắc tường lửa, v.v. –

+0

Bạn đang tải 'db.properties' như thế nào? . Chuẩn khởi động mùa xuân là ['application.properties'] (https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external- config-profile-specific-properties). –

+0

Đã chỉnh sửa câu hỏi gốc, tôi có lớp HibernateConfiguration vì tôi đã tái cấu trúc ứng dụng từ MVC mùa xuân sang Khởi động. Nhưng ứng dụng hoạt động trên máy chủ và luôn hoạt động ... – besmart

Trả lời

0

1) Khi sử dụng Spring Boot, bạn không nên bao gồm các phụ thuộc Spring khác trực tiếp, nhưng dựa vào quản lý phụ thuộc của Boot . Khi sử dụng "người mới bắt đầu" được cung cấp, bạn có thể chắc chắn rằng tất cả các thư viện cần thiết sẽ được bao gồm trong một phiên bản phù hợp. Tài liệu: https://spring.io/guides/gs/spring-boot/#use-maven

2) Hướng dẫn lập biểu không phải là một ứng dụng web, do đó bạn có thể có một số nội dung mốc trong tệp pom.xml từ hướng dẫn REST?

Một pom "tốt" sẽ có "spring-boot-starter-web" (để thuận tiện) hoặc bất kỳ phụ thuộc nào khác được bao gồm trong bộ khởi động được liệt kê riêng lẻ. Chỉ cần kiểm tra xem bạn có chúng. Ngoài ra, hãy đảm bảo bạn bao gồm @EnableAutoConfiguration trong SpringApplication của mình. Thêm các lớp để chạy trong một mảng Object để chạy phương thức chạy của SpringApplication: SpringApplication.run (new Object [] {Application.class, ScheduledTasks.class}, args);

Thưởng thức :)

+0

Xin lỗi @Abdel nhưng tôi không thể hiểu tất cả những gì bạn đã viết. Tôi đã thực hiện POM với tiện ích khởi động mùa xuân, thêm tất cả những thứ tôi cần (hibernate, jackson, log4j và vv) và đây là những gì tiện ích đã cho tôi. Tôi cũng có lớp bắt đầu được chú thích với '@ SpingBootApplication' Ứng dụng này chỉ là một kho lưu trữ REST, nó bắt đầu và trưng ra một số dịch vụ REST. – besmart

2

Tôi cũng gặp phải vấn đề tương tự. Thêm này:

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

0

thêm một file mới dưới src/main/tài nguyên với tên 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 

Di HibernateConfiguration lớp & trên lớp chính của bạn đặt @EnableTransactionManagement chú thích.

Các vấn đề liên quan