Spring boot Spring data jpa — приложение для сохранения данных на удаленном сервере MariadbJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring boot Spring data jpa — приложение для сохранения данных на удаленном сервере Mariadb

Сообщение Anonymous »

Я пытаюсь запустить загрузочное приложение Spring с целью сохранения и получения данных с удаленного сервера Mariadb, но не могу найти причину сбоя. Поскольку это своего рода учебный/тестовый проект, перед настоящим я сначала попробовал использовать базу данных localhost H2, и все работало. Следующая попытка была с этим удаленным Mariadb, работающим на Raspberry Pi 3B, и приложение находится на компьютере с Windows в той же локальной сети. Используя Postman (также пробовал с веб-браузером), после попытки GET или POST на http://localhost:8080/home/owner я получил следующая ошибка/след:

Код: Выделить всё

"timestamp": "2024-11-12T20:48:29.086+00:00",
"status": 404,
"error": "Not Found",
"trace": "org.springframework.web.servlet.resource.NoResourceFoundException: No static resource home/owner.\r\n\tat org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n\tat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n\tat java.base/java.lang.Thread.run(Thread.java:842)\r\n",
"message": "No static resource home/owner.",
"path": "/home/owner"
Странно то, что в журнале IntelliJ IDEA ничего нет, как будто запрос до него вообще не доходит. Для меня это выглядит так, будто RestController не работает/что-то не так с сопоставлением/или какая-то проблема между службами (с использованием Postman и IntelliJ), но тот же код с той лишь разницей, что я использовал локальный H2, был работает как положено. Поэтому я решил проверить, что происходит на стороне MariaDB, и systemctl status mariadb.service вернул "Прерванное соединение xx с базой данных: 'xyz' пользователь: 'remote_admin' хост: '10.10.10.101 ' (Получена ошибка чтения пакетов связи)"
Здесь я должен сказать, что я создал БД, пользователя, предоставил разрешения и подготовил сервер для подключения, установка bind-address = 0.0.0.0 в /etc/mysql/mariadb.conf.d/50-server.cnf, чтобы иметь возможность доступа к нему с удаленного компьютера, а также установка max_allowed_packet = 256M в /etc/mysql/conf.d/mysqldump.cnf согласно совету из другой подобной проблемы. Я не уверен, откуда взялся ответ, опубликованный несколькими строками выше: от RestController или от удаленного сервера БД через контроллер. Ниже приведен исходный код Entity, RestController, POM.xml и application.properties.
Entity:

Код: Выделить всё

import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "owner")
public class Owner {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "personal_id")
private Integer id;
private String name;
private String surname;
private String email;
@OneToOne
@JoinColumn(name = "car")
@JsonBackReference
private Car car;

public Owner(Integer id, String name, String surname, String email) {
this.id = id;
this.name = name;
this.surname = surname;
this.email = email;
}

@Override
public String toString() {
return this.name
+ " "
+ this.surname;
}
}
RestController:

Код: Выделить всё

package controller;

import Service.OwnerService;
import dto.OwnerDto;
import dto.OwnerResponseDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/home")
public class OwnerController {

private OwnerService ownerService;

@Autowired
public OwnerController(OwnerService ownerService) {
this.ownerService = ownerService;
}

@GetMapping("/owner")
public ResponseEntity getAllOwners() {
return new ResponseEntity(ownerService.getAllOwners(), HttpStatus.OK);
}

@GetMapping("/owner/{id}")
public ResponseEntity getOwnerById(@PathVariable int id) {
OwnerResponseDto requestedOwner = ownerService.getOwnerById(id);
if (requestedOwner == null) {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
return new ResponseEntity(requestedOwner, HttpStatus.FOUND);
}

@PostMapping("/owner")
public ResponseEntity addOwner(@RequestBody OwnerDto dto) {
OwnerResponseDto addedOwner = ownerService.addOwner(dto);
if (addedOwner == null) {
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity(addedOwner, HttpStatus.CREATED);
}

@PutMapping("/owner/{id}")
public ResponseEntity updateOwner(@RequestBody OwnerDto dto, @PathVariable int id) {
OwnerResponseDto updatedOwner = ownerService.updateOwner(dto, id);
if (updatedOwner == null) {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
return new ResponseEntity(updatedOwner, HttpStatus.OK);
}

@DeleteMapping("/owner/{id}")
public void deleteOwner(int id) {
ownerService.deleteOwner(id);
}
}
pom.xml

Код: Выделить всё


4.0.0

org.springframework.boot
spring-boot-starter-parent
3.3.5
  

org.training
demo
0.0.1-SNAPSHOT
car-park
Demo project for Spring Boot














17



org.springframework.boot
spring-boot-starter-data-jpa


org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-devtools
runtime
true


org.mariadb.jdbc
mariadb-java-client
runtime


org.projectlombok
lombok
true


org.springframework.boot
spring-boot-starter-test
test






org.springframework.boot
spring-boot-maven-plugin



org.projectlombok
lombok








application.properties:

Код: Выделить всё

spring.application.name=car-park

spring.datasource.url=jdbc:mariadb://10.10.10.102:3306/springboot
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.username=remote_admin
spring.datasource.password=user1admin1

spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl.auto=create
spring.jpa.properties.hibernate.dialect.MariaDB103Dialect
Очень спасибо тем, кто потратил время на чтение этого длинного поста. Каждый совет высоко ценится. Приношу извинения, если это недостаточно ясно и кратко, но это мой максимум после долгого утомительного дня бесполезного чтения и устранения неполадок.

Подробнее здесь: https://stackoverflow.com/questions/791 ... adb-server
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»