簡體   English   中英

Jhipster中的Liquibase遷移異常

[英]Liquibase migration exception in Jhipster

我有一個帶有兩個微服務和一個網關的JHipster項目。 兩者都是通過JHipster生成的。 我正在嘗試從Spring Cloud Stream with Kafka Streams的Projects Microservice中將對象發送到ChargeCodes微服務。 為此,我在ProjectResource.java文件中添加了Spring Cloud Stream代碼 根據我的要求,每當創建新項目對象時,Spring Cloud Stream都應將其發送給Kafka主題,第二個微服務中的Kafka使用者將使用它。 為簡單起見,我在同一項目中創建了生產者和消費者。 當我編譯微服務時,出現以下異常。

liquibase.exception.MigrationFailedException: Migration failed for change set config/liquibase/changelog/20180205173557_added_entity_Address.xml::20180205173557-1::jhipster:

我的帶有Spring Cloud Stream和Kafka的標准Spring Boot Rest API應用程序運行正常,沒有任何問題。 我不確定JHipster代碼有什么問題。 代碼上傳到github倉庫中

項目資源

package com.projects.web.rest;

import com.codahale.metrics.annotation.Timed;
import com.projects.domain.Project;
import com.projects.messaging.Greeting;
import com.projects.repository.ProjectRepository;
import com.projects.web.rest.errors.BadRequestAlertException;
import com.projects.web.rest.util.HeaderUtil;
import com.projects.web.rest.util.PaginationUtil;
import io.github.jhipster.web.util.ResponseUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.net.URI;
import java.net.URISyntaxException;

import java.util.List;
import java.util.Optional;

/**
 * REST controller for managing Project.
 */
@RestController
@RequestMapping("/api")
@EnableBinding(Source.class)
public class ProjectResource
{

    private final Logger log = LoggerFactory.getLogger(ProjectResource.class);

    private static final String ENTITY_NAME = "project";

    private final ProjectRepository projectRepository;

    @Autowired
    private Source source;


    public ProjectResource(ProjectRepository projectRepository)
    {
        this.projectRepository = projectRepository;
    }


    /**
     * POST /projects : Create a new project.
     *
     * @param project
     *            the project to create
     * @return the ResponseEntity with status 201 (Created) and with body the new
     *         project, or with status 400 (Bad Request) if the project has already
     *         an ID
     * @throws URISyntaxException
     *             if the Location URI syntax is incorrect
     */
    @PostMapping("/projects")
    @Timed
    public ResponseEntity<Project> createProject(@Valid @RequestBody Project project) throws URISyntaxException
    {
        log.debug("REST request to save Project : {}", project);
        if (project.getId() != null)
        {
            throw new BadRequestAlertException("A new project cannot already have an ID", ENTITY_NAME, "idexists");
        }
        Project result = projectRepository.save(project);
        source.output().send(MessageBuilder.withPayload(result).build());
        return ResponseEntity.created(new URI("/api/projects/" + result.getId()))
                .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())).body(result);
    }

    /**
     * PUT /projects : Updates an existing project.
     *
     * @param project
     *            the project to update
     * @return the ResponseEntity with status 200 (OK) and with body the updated
     *         project, or with status 400 (Bad Request) if the project is not
     *         valid, or with status 500 (Internal Server Error) if the project
     *         couldn't be updated
     * @throws URISyntaxException
     *             if the Location URI syntax is incorrect
     */
    @PutMapping("/projects")
    @Timed
    public ResponseEntity<Project> updateProject(@Valid @RequestBody Project project) throws URISyntaxException
    {
        log.debug("REST request to update Project : {}", project);
        if (project.getId() == null)
        {
            return createProject(project);
        }
        Project result = projectRepository.save(project);
        source.output().send(MessageBuilder.withPayload(result).build());
        return ResponseEntity.ok().headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, project.getId().toString()))
                .body(result);
    }

    /**
     * GET /projects : get all the projects.
     *
     * @param pageable
     *            the pagination information
     * @return the ResponseEntity with status 200 (OK) and the list of projects in
     *         body
     */
    @GetMapping("/projects")
    @Timed
    public ResponseEntity<List<Project>> getAllProjects(Pageable pageable)
    {
        log.debug("REST request to get a page of Projects");
        Page<Project> page = projectRepository.findAll(pageable);
        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/projects");
        return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
    }

    /**
     * GET /projects/:id : get the "id" project.
     *
     * @param id
     *            the id of the project to retrieve
     * @return the ResponseEntity with status 200 (OK) and with body the project, or
     *         with status 404 (Not Found)
     */
    @GetMapping("/projects/{id}")
    @Timed
    public ResponseEntity<Project> getProject(@PathVariable Long id)
    {
        log.debug("REST request to get Project : {}", id);
        Project project = projectRepository.findOne(id);
        return ResponseUtil.wrapOrNotFound(Optional.ofNullable(project));
    }

    /**
     * DELETE /projects/:id : delete the "id" project.
     *
     * @param id
     *            the id of the project to delete
     * @return the ResponseEntity with status 200 (OK)
     */
    @DeleteMapping("/projects/{id}")
    @Timed
    public ResponseEntity<Void> deleteProject(@PathVariable Long id)
    {
        log.debug("REST request to delete Project : {}", id);
        projectRepository.delete(id);
        return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build();
    }
}

例外:

projects-app_1       | 2018-02-06 18:56:24.704 ERROR 6 --- [           main] liquibase                                : classpath:config/liquibase/master.xml: config/liquibase/changelog/20180205173557_added_entity_Address.xml::20180205173557-1::jhipster: Change Set config/liquibase/changelog/20180205173557_added_entity_Address.xml::20180205173557-1::jhipster failed.  Error: Table 'address' already exists [Failed SQL: CREATE TABLE projects.address (id BIGINT AUTO_INCREMENT NOT NULL, street_name VARCHAR(255) NOT NULL, apartment_or_house_number VARCHAR(255) NULL, city VARCHAR(255) NOT NULL, zipcode BIGINT NOT NULL, state VARCHAR(255) NULL, country VARCHAR(255) NULL, CONSTRAINT PK_ADDRESS PRIMARY KEY (id))]
projects-app_1       | 2018-02-06 18:56:24.829  WARN 6 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [com/projects/config/DatabaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.MigrationFailedException: Migration failed for change set config/liquibase/changelog/20180205173557_added_entity_Address.xml::20180205173557-1::jhipster:
projects-app_1       |      Reason: liquibase.exception.DatabaseException: Table 'address' already exists [Failed SQL: CREATE TABLE projects.address (id BIGINT AUTO_INCREMENT NOT NULL, street_name VARCHAR(255) NOT NULL, apartment_or_house_number VARCHAR(255) NULL, city VARCHAR(255) NOT NULL, zipcode BIGINT NOT NULL, state VARCHAR(255) NULL, country VARCHAR(255) NULL, CONSTRAINT PK_ADDRESS PRIMARY KEY (id))]
projects-app_1       | 2018-02-06 18:56:25.380 ERROR 6 --- [           main] o.s.boot.SpringApplication               : Application startup failed
projects-app_1       | 
projects-app_1       | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [com/projects/config/DatabaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.MigrationFailedException: Migration failed for change set config/liquibase/changelog/20180205173557_added_entity_Address.xml::20180205173557-1::jhipster:
projects-app_1       |      Reason: liquibase.exception.DatabaseException: Table 'address' already exists [Failed SQL: CREATE TABLE projects.address (id BIGINT AUTO_INCREMENT NOT NULL, street_name VARCHAR(255) NOT NULL, apartment_or_house_number VARCHAR(255) NULL, city VARCHAR(255) NOT NULL, zipcode BIGINT NOT NULL, state VARCHAR(255) NULL, country VARCHAR(255) NULL, CONSTRAINT PK_ADDRESS PRIMARY KEY (id))]
projects-app_1       |  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
projects-app_1       |  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
projects-app_1       |  at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080)
projects-app_1       |  at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857)
projects-app_1       |  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
projects-app_1       |  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
projects-app_1       |  at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
projects-app_1       |  at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
projects-app_1       |  at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
projects-app_1       |  at com.projects.ProjectsApp.main(ProjectsApp.java:68)
projects-app_1       |  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
projects-app_1       |  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
projects-app_1       |  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
projects-app_1       |  at java.lang.reflect.Method.invoke(Method.java:498)
projects-app_1       |  at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
projects-app_1       |  at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
projects-app_1       |  at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
projects-app_1       |  at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:59)
projects-app_1       | Caused by: liquibase.exception.MigrationFailedException: Migration failed for change set config/liquibase/changelog/20180205173557_added_entity_Address.xml::20180205173557-1::jhipster:
projects-app_1       |      Reason: liquibase.exception.DatabaseException: Table 'address' already exists [Failed SQL: CREATE TABLE projects.address (id BIGINT AUTO_INCREMENT NOT NULL, street_name VARCHAR(255) NOT NULL, apartment_or_house_number VARCHAR(255) NULL, city VARCHAR(255) NOT NULL, zipcode BIGINT NOT NULL, state VARCHAR(255) NULL, country VARCHAR(255) NULL, CONSTRAINT PK_ADDRESS PRIMARY KEY (id))]
projects-app_1       |  at liquibase.changelog.ChangeSet.execute(ChangeSet.java:619)
projects-app_1       |  at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:51)
projects-app_1       |  at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:79)
projects-app_1       |  at liquibase.Liquibase.update(Liquibase.java:214)
projects-app_1       |  at liquibase.Liquibase.update(Liquibase.java:192)
projects-app_1       |  at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:431)
projects-app_1       |  at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:388)
projects-app_1       |  at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.initDb(AsyncSpringLiquibase.java:94)
projects-app_1       |  at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.afterPropertiesSet(AsyncSpringLiquibase.java:84)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
projects-app_1       |  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
projects-app_1       |  ... 24 common frames omitted
projects-app_1       | Caused by: liquibase.exception.DatabaseException: Table 'address' already exists [Failed SQL: CREATE TABLE projects.address (id BIGINT AUTO_INCREMENT NOT NULL, street_name VARCHAR(255) NOT NULL, apartment_or_house_number VARCHAR(255) NULL, city VARCHAR(255) NOT NULL, zipcode BIGINT NOT NULL, state VARCHAR(255) NULL, country VARCHAR(255) NULL, CONSTRAINT PK_ADDRESS PRIMARY KEY (id))]
projects-app_1       |  at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:309)
projects-app_1       |  at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)
projects-app_1       |  at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:113)
projects-app_1       |  at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1277)
projects-app_1       |  at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1259)
projects-app_1       |  at liquibase.changelog.ChangeSet.execute(ChangeSet.java:582)
projects-app_1       |  ... 34 common frames omitted
projects-app_1       | Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'address' already exists
projects-app_1       |  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
projects-app_1       |  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
projects-app_1       |  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
projects-app_1       |  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
projects-app_1       |  at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
projects-app_1       |  at com.mysql.jdbc.Util.getInstance(Util.java:408)
projects-app_1       |  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
projects-app_1       |  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
projects-app_1       |  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
projects-app_1       |  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
projects-app_1       |  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
projects-app_1       |  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2483)
projects-app_1       |  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2441)
projects-app_1       |  at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:845)
projects-app_1       |  at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)
projects-app_1       |  at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95)
projects-app_1       |  at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java)
projects-app_1       |  at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:307)
projects-app_1       |  ... 39 common frames omitted
projects-app_1       | 

乍看之下,似乎是由於某種原因導致DATABASECHANGELOG中的一個或多個行被刪除,因此,用於創建表projects.address的變更集的Liquibase再次被運行,但是該表已經存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM