简体   繁体   English

Spring Jpa 存储库查找所有返回空列表

[英]Spring Jpa repository find all returns empty list

I have connected spring boot to an MySQL database running on a VPS.我已将 spring 引导连接到在 VPS 上运行的 MySQL 数据库。 I've mapped the entity class, repository, service and controller.我已经映射了实体 class、存储库、服务和 controller。 But when calling the get method for "findAll" I get an empty list in postman.但是当调用“findAll”的get方法时,我在postman中得到一个空列表。 When I query the table in MySQL workbench I do get data, so its not empty.当我在 MySQL 工作台中查询表时,我确实得到了数据,所以它不是空的。

Did I miss something?我错过了什么?

My entity class:我的实体 class:

@Entity
public class Requests {

    @Id
    @Column
    private Long id;

    @Column
    private Long url_id;

    @Column
    private Date timestamp;

    @Column
    private String method;

    @Column
    private String document;

    @Column
    private String mime_type;

    @Column
    private char is_html;

    @Column
    private int status_code;

    @Column
    private String reason;

    @Column
    private String cookies;

    @Column
    private String request;

    @Column
    private String response;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getUrl_id() {
        return url_id;
    }

    public void setUrl_id(Long url_id) {
        this.url_id = url_id;
    }

    public Date getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getDocument() {
        return document;
    }

    public void setDocument(String document) {
        this.document = document;
    }

    public String getMime_type() {
        return mime_type;
    }

    public void setMime_type(String mime_type) {
        this.mime_type = mime_type;
    }

    public char getIs_html() {
        return is_html;
    }

    public void setIs_html(char is_html) {
        this.is_html = is_html;
    }

    public int getStatus_code() {
        return status_code;
    }

    public void setStatus_code(int status_code) {
        this.status_code = status_code;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public String getCookies() {
        return cookies;
    }

    public void setCookies(String cookies) {
        this.cookies = cookies;
    }

    public String getRequest() {
        return request;
    }

    public void setRequest(String request) {
        this.request = request;
    }

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
    }
}

My reposiroty:我的存储库:

public interface RequestsRepository extends JpaRepository<Requests, Long> {
}

My service:我的服务:

@Service
public class RequestsService {

    private final RequestsRepository requestsRepository;


    public RequestsService(RequestsRepository requestsRepository) {
        this.requestsRepository = requestsRepository;
    }

    public List<RequestsDTO> findAll() {
        return requestsRepository.findAll()
                .stream()
                .map(requests -> mapToDTO(requests, new RequestsDTO()))
                .collect(Collectors.toList());
    }



    private RequestsDTO mapToDTO(final Requests requests, final RequestsDTO requestsDTO) {
        requestsDTO.setId(requests.getId());
        requestsDTO.setUrl_id(requests.getUrl_id());
        requestsDTO.setTimestamp(requests.getTimestamp());
        requestsDTO.setMethod(requests.getMethod());
        requestsDTO.setDocument(requests.getDocument());
        requestsDTO.setMime_type(requests.getMime_type());
        requestsDTO.setIs_html(requests.getIs_html());
        requestsDTO.setStatus_code(requests.getStatus_code());
        requestsDTO.setReason(requests.getReason());
        requestsDTO.setCookies(requests.getCookies());
        requestsDTO.setRequest(requests.getRequest());
        requestsDTO.setResponse(requests.getResponse());
        return requestsDTO;
    }

    private Requests mapToEntity(final RequestsDTO requestsDTO, final Requests requests) {
        requests.setId(requestsDTO.getId());
        requests.setUrl_id(requestsDTO.getUrl_id());
        requests.setTimestamp(requestsDTO.getTimestamp());
        requests.setMethod(requestsDTO.getMethod());
        requests.setDocument(requestsDTO.getDocument());
        requests.setMime_type(requestsDTO.getMime_type());
        requests.setIs_html(requestsDTO.getIs_html());
        requests.setStatus_code(requestsDTO.getStatus_code());
        requests.setReason(requestsDTO.getReason());
        requests.setCookies(requestsDTO.getCookies());
        requests.setRequest(requestsDTO.getRequest());
        requests.setResponse(requestsDTO.getResponse());
        return requests;
    }
}

And my controller:还有我的 controller:

@RestController
@RequestMapping(value = "/api/crawler", produces = MediaType.APPLICATION_JSON_VALUE)
public class RequestsController {

    private final RequestsService requestsService;


    public RequestsController(RequestsService requestsService) {
        this.requestsService = requestsService;
    }

    @GetMapping
    public ResponseEntity<List<RequestsDTO>> getAllRequests() {return ResponseEntity.ok(requestsService.findAll()); }
}

EDIT编辑

My crawler domain config我的爬虫域配置

/**
 * Data source for the MySQL crawler database
 */
@Configuration
@EntityScan(basePackages = "cs.crawler.server.projectcs.domain.crawlerdb")
@EnableJpaRepositories(basePackages = "cs.crawler.server.projectcs.repos.crawlerdb")
@EnableTransactionManagement
public class CrawlerDomainConfig {

    @Bean
    @ConfigurationProperties("spring.datasource.crawler")
    public DataSourceProperties crawlerDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.crawler.configuration")
    public HikariDataSource secondDataSource(DataSourceProperties secondDataSourceProperties) {
        return secondDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

}

My config YAML:我的配置 YAML:

spring:
  datasource:
    users:
      url: ${JDBC_DATABASE_URL:jdbc:h2:mem:projectcs}
      username: ${JDBC_DATABASE_USERNAME:sa}
      password: ${JDBC_DATABASE_PASSWORD:}
    crawler:
      url: ${JDBC_DATABASE_URL:jdbc:mysql://VPSIPHERE:3306/darcweb?createDatabaseIfNotExist=false}
      username: ${JDBC_DATABASE_USERNAME:root}
      password: ${JDBC_DATABASE_PASSWORD:mypassword}
  dbcp2:
    max-wait-millis: 30000
    validation-query: "SELECT 1"
    validation-query-timeout: 30
  jpa:
    hibernate:
      ddl-auto: update
    open-in-view: false
    properties:
      hibernate:
        jdbc:
          lob:
            non_contextual_creation: true
        id:
          new_generator_mappings: true
springdoc:
  pathsToMatch: /api/**

You have 2 datasoruce dependencies (mysql and h2).您有 2 个数据源依赖项(mysql 和 h2)。 You need to specify which datasource for spring to use - it picks h2 by default which is the reason you don't find anything.您需要为 spring 指定要使用的数据源 - 它默认选择 h2 ,这就是您找不到任何东西的原因。

Add following lines to your application.properties file to specify the database:将以下行添加到 application.properties 文件以指定数据库:

spring.datasource.url=jdbc:mysql://localhost:3306/DATABASE_NAME
spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD

To use h2 for tests for example you can overwrite application.properties for h2 under your test folder in resources例如,要使用 h2 进行测试,您可以覆盖资源中 test 文件夹下 h2 的 application.properties

In case you want to use both databases simultaneously in your application you would need to define both and set them in runtime into your enviroment like shown here:如果您想在应用程序中同时使用这两个数据库,您需要同时定义这两个数据库并在运行时将它们设置到您的环境中,如下所示:

https://www.baeldung.com/spring-data-jpa-multiple-databases https://www.baeldung.com/spring-data-jpa-multiple-databases

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM