【问题标题】:Java Spring Boot with mysql configuration doesn't start带有 mysql 配置的 Java Spring Boot 无法启动
【发布时间】:2018-04-17 14:49:00
【问题描述】:

我一直在尝试用mysql启动spring boot,但没有成功。 当我点击运行时,服务器刚刚在 sql 进行查询后几秒钟后停止。

2017-11-05 04:13:04.607  WARN 4648 --- [           main] .t.AbstractTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2017-11-05 04:13:05.525  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)
2017-11-05 04:13:05.525  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.526  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.527  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.528  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.528  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException
2017-11-05 04:13:05.529  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal)
2017-11-05 04:13:05.531  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String)
2017-11-05 04:13:05.532  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.532  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.534  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String)
2017-11-05 04:13:05.534  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>)
2017-11-05 04:13:05.535  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.535  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.536  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.536  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String)
2017-11-05 04:13:05.537  INFO 4648 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-11-05 04:13:05.946 DEBUG 4648 --- [           main] org.hibernate.SQL                        : 
    select
        articulo0_.id as id1_0_0_,
        articulo0_.cantidad as cantidad2_0_0_,
        articulo0_.codigo as codigo3_0_0_,
        articulo0_.descripcion as descripc4_0_0_,
        articulo0_.nombre as nombre5_0_0_ 
    from
        articulo articulo0_ 
    where
        articulo0_.id=?
2017-11-05 04:13:05.991  INFO 4648 --- [           main] c.g.i.GestorInventarioApplicationTests   : Started GestorInventarioApplicationTests in 7.338 seconds (JVM running for 8.23)
2017-11-05 04:13:06.085  INFO 4648 --- [       Thread-4] o.s.w.c.s.GenericWebApplicationContext   : Closing org.springframework.web.context.support.GenericWebApplicationContext@4cc8eb05: startup date [Sun Nov 05 04:12:59 COT 2017]; root of context hierarchy
2017-11-05 04:13:06.102  INFO 4648 --- [       Thread-4] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

到此为止。

实体:

package com.gestor.inventario;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="articulo")
public class Articulo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(name="nombre")
    private String nombre;
    @Column(name="codigo")
    private String codigo;
    @Column(name="descripcion")
    private String descripcion;
    @Column(name="cantidad")
    private int cantidad;

    public Articulo() {}

    public Articulo(long id, String nombre, String descripcion, String codigo, int cantidad) {
        this.id = id;
        this.nombre = nombre;
        this.codigo = codigo;
        this.descripcion = descripcion;
        this.cantidad = cantidad;
    }
    public void setId(long id) {
        this.id = id;
    }

    public long getId() {
        return id;
    }

    public void setNombre(String vchNombre) {
        this.nombre = vchNombre;
    }

    public String getNombre() {
        return nombre;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCantidad(int cantidad) {
        this.cantidad= cantidad;
    }

    public int getCantidad() {  
        return cantidad;
    }
}

播种机:

package com.gestor.inventario;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class dbSeeder implements CommandLineRunner {
    private ArticuloRepository articulosRepository;

    @Autowired
    public dbSeeder(ArticuloRepository articulosRepository) {
        this.articulosRepository = articulosRepository;
    }

    @Override
    public void run(String... strings) throws Exception {
        List<Articulo> articulos = new ArrayList<>();
        articulos.add(new Articulo(1, "Nombre1", "Descripcion1", "Codigo1", 100));
        articulosRepository.save(articulos);
    }
}

控制器:

package com.gestor.inventario;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/articulos")
public class Controller {
    private ArticuloRepository articuloRepository;

    @Autowired
    public Controller(ArticuloRepository articuloRepository) {
        this.articuloRepository = articuloRepository;
    }

    @RequestMapping(value = "/all", method = RequestMethod.GET)
    public List<Articulo> getAll() {
        return articuloRepository.findAll();
    }

    @RequestMapping(value = "/insert", method = RequestMethod.POST)
    public List<Articulo> insert(@RequestBody Articulo obj) {
        articuloRepository.save(obj);
        return articuloRepository.findAll();
    }

    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
    public  List<Articulo> delete(@PathVariable long id){
        articuloRepository.delete(id);
        return articuloRepository.findAll();
    }
}

存储库:

package com.gestor.inventario;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ArticuloRepository extends JpaRepository<Articulo, Long>{

}

属性:

spring.datasource.url=jdbc:mysql://localhost:3306/dbinventory?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings = false
spring.jpa.properties.hibernate.format_sql = true

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 

pom:

<?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>com.gyance</groupId>
    <artifactId>gestorInventario</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>gestorInventario</name>
    <description>Módulo de gestión de inventarios</description>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency> 
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

数据库:

Database

【问题讨论】:

  • 确定:CREATE TABLE articulo(id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, codigo VARCHAR(20) NOT NULL, nombre VARCHAR(20) NOT NULL, 描述 VARCHAR(200) NOT NULL, cantidad INT NOT NULL );
  • 不,这只是我的复制粘贴中的错误,数据库就像图片中一样。我已经尝试更改所有变量名、表名等。 6 小时卡住了这个问题 x_X
  • @GustavoYance 你的主要方法在哪里?可以加入吗?
  • 它看起来正在启动,然后立即关闭。正如@YoshuaNahar 所说,我们需要您的main。很可能它没有正确注释(特别是,它可能与您的组件位于不同的包中)。

标签: java mysql spring spring-mvc spring-boot


【解决方案1】:

为了让你的项目正确运行,你需要有一些类似的东西:

@SpringBootApplication
public class App {

  public static void main(String[] args) {
    SpringApplication.run(App.class);
  }

}

@SpringBootApplication 包含自动为您启动 Tomcat@EnableAutoConfiguration。如果没有这一步,您的应用程序在您的void run(String... string) 方法退出后没有理由保持活动状态!

如果您的 App 类中没有 bean 配置,至少应该包含 @EnableAutoConfiguration 而不是 @SpringBootApplication

【讨论】:

    【解决方案2】:

    当您尝试运行引导程序时,编译器首先会使用 application.java 类运行程序,如果您没有首先包含该类,请检查您是否编写了 application.java 类。

    package package_name;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication//It's main spring annotations
    @RestController
    @EnableAutoConfiguration
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);//It should be include by default in every boot program
        }
    }
    

    【讨论】:

    • 1) @SpringBootApplication 已经包含 @EnableAutoConfiguration 2) @RestController 在 Spring 主类中绝对没用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 2019-05-29
    • 2016-03-14
    • 2016-03-03
    • 1970-01-01
    • 2021-02-22
    • 2016-03-21
    相关资源
    最近更新 更多