Приложение Springboot, развернутое в CloudFoundry - операция Get и Post при сбое БД - PullRequest
0 голосов
/ 10 июля 2019

Я создаю пример Spring-приложения, которое предоставит REST API для получения и публикации данных в таблицу в базе данных. Сборка основных вещей. Я использую PostgreSQL для источника данных в Cloud Foundry. GET API, который возвращает строку, работает нормально. API, который выполняет POST, возвращает 404 Not Found. API, который возвращает записи в таблице, выдает исключение.

Тип отчета об исключении

Message Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DatabaseException

Описание:

Сервер обнаружил непредвиденное состояние, которое не позволило ему выполнить запрос.

Исключение

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: syntax error at or near "GROUP"


++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    @Configuration
    @EnableJpaRepositories(basePackageClasses = 
    CustomerFeedbackRepository.class)
    @Profile("cloud")
    public class CloudDatabaseConfig extends AbstractCloudConfig {    
    @Bean
    public DataSource dataSource() {

    List<String> dataSourceNames =                 
    Arrays.asList("BasicDbcpPooledDataSourceCreator","TomcatJdbcPooledDataSourceCreator","HikariCpPooledDataSourceCreator","TomcatDbcpPooledDataSourceCreator");
        DataSourceConfig dbConfig = new DataSourceConfig(dataSourceNames);
        return connectionFactory().dataSource(dbConfig);
    }


    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
        return EntityManagerFactoryProvider.get(dataSource, CustomerFeedback.class.getPackage().getName());
    }


    @Bean(name = "transactionManager")
    public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }



}




       @PostMapping("/capturecf")
        @RequestMapping(value ="CustomerFeedback", method = RequestMethod.POST)
        public CustomerFeedback addFeedback(@RequestBody CustomerFeedback custfeedback)
        {
            return customerfeedbackrepo.save(custfeedback);
        }

        @PostMapping("/captureua")
        @RequestMapping(value = "UsageActivity", method = RequestMethod.POST)
        public UsageActivity addUsageTracking(@Valid @RequestBody UsageActivity usageActivity)
        {
             return usageactivityrepository.save(usageActivity);
        }


        @GetMapping("/usageactivity")
        public List<UsageActivity> getAllNotes() {
            return usageactivityrepository.findAll();`enter code here`
        }


         <dependencies>
            <!-- APIs for servlets and injection -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
                <version>1</version>
            </dependency>

            <!-- Spring Framework and Spring WebMVC -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <!-- Logging library -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <dependency>
                <groupId>com.sap.hcp.cf.logging</groupId>
                <artifactId>cf-java-logging-support-logback</artifactId>
                <version>${sap.logging.version}</version>
            </dependency>
            <dependency>
                <groupId>com.sap.hcp.cf.logging</groupId>
                <artifactId>cf-java-logging-support-servlet</artifactId>
                <version>${sap.logging.version}</version>
            </dependency>


            <!-- JSON conversion -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.1</version>
            </dependency>

            <!-- Actuator for adding management endpoints -->
            <dependency>
                <groupId> org.springframework.boot</groupId>
                <artifactId>spring-boot-actuator</artifactId>
                <version>1.2.5.RELEASE</version>
            </dependency>

            <!-- Bean validation (@NotNull etc.) -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.2.1.Final</version>
            </dependency>
            <!-- MethodValidationPostProcessor relies on Expression Language -->
            <dependency>
                <groupId>javax.el</groupId>
                <artifactId>javax.el-api</artifactId>
                <version>3.0.1-b04</version>
            </dependency>

            <!-- Spring Cloud Connector -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-spring-service-connector</artifactId>
                <version>1.2.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-cloudfoundry-connector</artifactId>
                <version>1.2.1.RELEASE</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
                <version>1.9.2.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <!-- We need spring-core 4.2 or later, but spring-data includes 4.1.9 -->
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- EclipseLink as JPA implementation -->
            <dependency>
                <groupId>org.eclipse.persistence</groupId>
                <artifactId>org.eclipse.persistence.jpa</artifactId>
                <version>2.6.2</version>
            </dependency>

            <!-- PostgreSQL database implementations -->
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>9.4-1206-jdbc41</version>
                <scope>runtime</scope>
            </dependency>
            <!-- connection pooling -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>2.1.1</version>
                <scope>runtime</scope>
            </dependency>

            <!-- Testing -->
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-library</artifactId>
                <version>1.3</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>1.10.19</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- Use MockMvcResultMatchers.jsonPath to assert the JSON body -->
            <dependency>
                <groupId>com.jayway.jsonpath</groupId>
                <artifactId>json-path</artifactId>
                <version>2.2.0</version>
                <scope>test</scope>
            </dependency>
            <!-- H2 (in-memory) database implementation -->
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>1.4.184</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <finalName>customerconnect</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <!-- Provides the application at http://localhost:8080/ using an embedded 
                        Tomcat server with a pre-configured environment referencing the SAP proxy -->
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <port>${maven.tomcat.port}</port>
                        <path>/</path>
                        <systemProperties>
                            <http.proxyHost>${http.proxyHost}</http.proxyHost>
                            <http.proxyPort>${http.proxyPort}</http.proxyPort>
                        </systemProperties>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>findbugs-maven-plugin</artifactId>
                    <version>3.0.2</version>
                    <executions>
                        <execution>
                            <phase>verify</phase>
                            <goals>
                                <goal>findbugs</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>3.5</version>
                    <executions>
                        <execution>
                            <phase>verify</phase>
                            <goals>
                                <goal>pmd</goal>
                                <goal>cpd</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.18.1</version>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.7.5.201505241946</version>
                    <executions>
                        <execution>
                            <id>default-prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>default-report</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>default-check</id>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <configuration>
                                <rules>
                                </rules>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <reporting>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jxr-plugin</artifactId>
                    <version>2.5</version>
                </plugin>
            </plugins>
        </reporting>
    </project>

package com.sap.customerconnect.ads.repositories;

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

import com.sap.customerconnect.ads.models.UsageActivity;
import com.sap.customerconnect.ads.models.UsageActivityPK;

@Component
@Repository
public interface UsageActivityRepository extends JpaRepository<UsageActivity, UsageActivityPK> {



}


package com.sap.customerconnect.ads.repositories;

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

import com.sap.customerconnect.ads.models.CustomerFeedback;
import com.sap.customerconnect.ads.models.CustomerFeedbackPK;


@Component
@Repository
public interface CustomerFeedbackRepository extends JpaRepository<CustomerFeedback, CustomerFeedbackPK>{
}


package com.sap.customerconnect.ads.models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;

@IdClass(UsageActivityPK.class)
@Entity
@Table(name = "UsageActivity")
public class UsageActivity {

    @Id
    @Column(name = "PRODUCT_ID")
    private String ProductId;

    @Id
    @Column(name = "CUSTOMER_ID")
    private String CustomerId;

    @Id
    @Column(name = "SCREEN_ID")
    private String ScreenId;

    @Column(name = "GROUP")
    private String Group;

    @Column(name = "ACTION")
    private String Action;

    @Column(name = "DESCRIPTION")
    private String Description;

    @Column(name = "COUNT")
    private Integer Count;

    public UsageActivity() {
    }

    public String getProductId() {
        return ProductId;
    }

    public void setProductId(String productId) {
        ProductId = productId;
    }

    public String getCustomerId() {
        return CustomerId;
    }

    public void setCustomerId(String customerId) {
        CustomerId = customerId;
    }

    public String getScreenId() {
        return ScreenId;
    }

    public void setScreenId(String screenId) {
        ScreenId = screenId;
    }

    public String getGroup() {
        return Group;
    }

    public void setGroup(String group) {
        Group = group;
    }

    public String getAction() {
        return Action;
    }

    public void setAction(String action) {
        Action = action;
    }

    public String getDescription() {
        return Description;
    }

    public void setDescription(String description) {
        Description = description;
    }

    public Integer getCount() {
        return Count;
    }

    public void setCount(Integer count) {
        Count = count;
    }

    public UsageActivity(String productId, String customerId, String screenId, String group, String action,
            String description, Integer count) {
        super();
        ProductId = productId;
        CustomerId = customerId;
        ScreenId = screenId;
        Group = group;
        Action = action;
        Description = description;
        Count = count;
    }

}

package com.sap.customerconnect.ads.models;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Embeddable;

@Embeddable
public class UsageActivityPK implements Serializable{
private static final long serialVersionUID = 1L;

    @Column(name = "PRODUCT_ID")
    private String ProductId;

    @Column(name = "CUSTOMER_ID")
    private String CustomerId;


    @Column(name = "SCREEN_ID")
    private String ScreenId;
    }

Операции POST и GET в хранилище не работают.

...