[英]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.