@RestController не работает со стартерами spring-data-jpa - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать простой проект Spring Boot, который использует jpa данных Spring для взаимодействия с БД.

Класс применения:

package org.railway.fms.documentmgmt;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EnableJpaRepositories(basePackages = {"org.railway.fms.documentmgmt.repository"})
@EntityScan(basePackages= {"org.railway.fms.documentmgmt.entities"})
public class FMSApplication {

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

}

Класс контроллера:

package org.railway.fms.documentmgmt;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class NatureOfDocumentRestService {

    @GetMapping("/document/nature")
    public String getNatureOfDocuments() {
        return "test";
    }
}

файл build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.4.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
    baseName = 'document-mgmt'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile ("org.springframework.boot:spring-boot-starter-web")
    implementation ("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation ("org.postgresql:postgresql")
    testCompile("junit:junit")
}

application.properties

# Database
spring.datasource.url=jdbc:postgresql://localhost:5444/db?currentSchema=fms
spring.datasource.username=username
spring.datasource.password=password

# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

spring.jpa.show-sql=true

Проблема, с которой я сталкиваюсь, заключается в том, что когда я не использую зависимость org.springframework.boot:spring-boot-starter-data-jpa в моем файле build.gradle, я могу успешно запустить свой контроллер из браузера.

Но когда я использую org.springframework.boot:spring-boot-starter-data-jpa, контроллер не загружается в весеннем контексте, и я не могу запустить контроллер из моего браузера.

Как использовать spring-data-jpa в моем проекте весенней загрузки, содержащем открытые веб-сервисы, помогите!

Примечание: в логах ошибок нет, приложение успешно запускается.

пиловочник:

2019-06-10 09:52:11.348  INFO 15540 --- [           main] o.r.fms.documentmgmt.FMSApplication      : Starting FMSApplication on abcd with PID 15540 (C:\Users\furquan.ahmed\Workspaces\fmsWorkspace\document-mgmt\bin\main started by furquan.ahmed in C:\Users\furquan.ahmed\Workspaces\fmsWorkspace\document-mgmt)
2019-06-10 09:52:11.354  INFO 15540 --- [           main] o.r.fms.documentmgmt.FMSApplication      : No active profile set, falling back to default profiles: default
2019-06-10 09:52:12.200  INFO 15540 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-06-10 09:52:12.228  INFO 15540 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 13ms. Found 0 repository interfaces.
2019-06-10 09:52:13.083  INFO 15540 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$5149c32d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-06-10 09:52:14.106  INFO 15540 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-06-10 09:52:14.161  INFO 15540 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-06-10 09:52:14.162  INFO 15540 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.17]
2019-06-10 09:52:14.402  INFO 15540 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-06-10 09:52:14.402  INFO 15540 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2968 ms
2019-06-10 09:52:14.714  INFO 15540 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-06-10 09:52:18.002  INFO 15540 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-06-10 09:52:18.099  INFO 15540 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2019-06-10 09:52:18.267  INFO 15540 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.9.Final}
2019-06-10 09:52:18.268  INFO 15540 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2019-06-10 09:52:18.494  INFO 15540 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-06-10 09:52:19.060  INFO 15540 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Как вы упомянули

Проблема, с которой я сталкиваюсь, заключается в том, что когда я не использую org.springframework.boot: зависимость spring-boot-starter-data-jpa в моем файле build.gradle, я могууспешно ударить мой контроллер из браузера.Но когда я использую org.springframework.boot: spring-boot-starter-data-jpa, контроллер не загружается в контексте Spring, и я не могу подключиться к контроллеру из моего браузера.

Я думаю, что когда вы добавляете org.springframework.boot:spring-boot-starter-data-jpa, вы можете забыть добавить конфигурацию db в application.properties Если я прав, добавьте нижеприведенные свойства в файл application.properties и замените значения на определенные вами db

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword

, если вы уже добавили эти свойства.Не могли бы вы предоставить журналы и трассировку стека, чтобы увидеть, какие ошибки вы получаете.

0 голосов
/ 08 июня 2019

Если нет прямой необходимости явно указывать basePackages для @EnableJpaRepositories и @EntityScan, я бы предложил, чтобы Spring обнаружил местоположения с помощью автоконфигурации, поскольку все ваши классы расположены в org.railway.fms.documentmgmt:

@SpringBootApplication
@EnableJpaRepositories
public class FMSApplication { ... }

В противном случае попробуйте добавить @ComponentScan, чтобы указать расположение компонентов Spring:

@SpringBootApplication
@EnableJpaRepositories(basePackages = "org.railway.fms.documentmgmt.repository")
@EntityScan(basePackages= "org.railway.fms.documentmgmt.entities")
@ComponentScan(basePackages= "org.railway.fms.documentmgmt")
public class FMSApplication { ... }

Более того, если вам нужно указать местоположение базового пакета, есть такжевозможность использовать basePackageClasses вместо basePackages, что является альтернативой безопасного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...