Entity не видят базу данных. org.postgresql.util.PSQLException: Ошибка при попытке подсоединения
Делал REST приложение с использованием postgresql, docker'a и spring boot'a. Все работало отлично до тех пор, пока я не подключил докер и докер compose. Сама программа через докер работает: я отправляю get реквест на сервер и сервер отвечает из базы данных, которая находится в контейнере, но тесты не работают и так же мне подчеркивает все @Column, якобы база данных не подключена и ее нужно подключить, а при попытке запуска теста пишет "org.postgresql.util.PSQLException: Ошибка при попытке подсоединения". Базу данных конкретно в самой ide я не подключал(я имею ввиду плашку с боку, где написано Database), так как когда я работал с mongodb я ее там не подключал, когда работал с контейнером и все было нормально, никаких assign data source не выскакивало, а так же из-за того, что при попытке подключения выдает это:
controller
@RestController
@RequestMapping("api/schedule/")
public class ScheduleController {
private final ScheduleServiceImpl scheduleServiceImpl;
@Autowired
public ScheduleController(ScheduleServiceImpl scheduleServiceImpl){
this.scheduleServiceImpl = scheduleServiceImpl;
}
@GetMapping("{studentId}")
public String getSchedule(@PathVariable long studentId){
return scheduleServiceImpl.findScheduleByStudentId(studentId);
}
}
group entity
@Entity
@Table(name = "groups")
@Getter
@NoArgsConstructor
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int groupId;
@Column(name = "number_of_group")
private String numberOfGroup;
@ManyToMany(
fetch = FetchType.EAGER,
cascade = CascadeType.ALL
)
@JoinTable(
name = "groups_timetable",
joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "timetable_id")
)
private List<Timetable> timetable;
public Group(String numberOfGroup, List<Timetable> timetable){
this.numberOfGroup = numberOfGroup;
this.timetable = timetable;
}
}
student entity
@Entity
@Table(name = "student")
@Getter
@NoArgsConstructor
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long studentId;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToOne(
fetch = FetchType.EAGER,
cascade = CascadeType.ALL
)
@JoinTable(
name = "students_group",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "group_id")
)
private Group group;
public Student(String firstName, String lastName, Group group){
this.firstName = firstName;
this.lastName = lastName;
this.group = group;
}
}
timetable entity
@Entity
@Table(name = "timetable")
@Getter
@NoArgsConstructor
public class Timetable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long timetableId;
private String schedule;
@Column(name = "week_day")
private int weekDay;
@ManyToMany(mappedBy = "timetable")
private List<Group> group;
public Timetable(String schedule, Integer weekDay){
this.schedule = schedule;
this.weekDay = weekDay;
}
}
properties
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=postgres
spring.datasource.password=admin
spring.datasource.url=jdbc:postgresql://psql:5432/university_schedule
server.port=3033
dockerfile
FROM openjdk:16
ENV PORT 3033
EXPOSE $PORT
ARG DIR=build/libs/*.jar
COPY $DIR schedule.jar
ENTRYPOINT java -jar schedule.jar
docker compose
version: '3'
volumes:
schedule-volume:
services:
psql:
container_name: postgres-container
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=admin
- POSTGRES_DB=university_schedule
ports:
- 5432:5432
volumes:
- schedule-volume:/data/db
uni:
container_name: schedule-container
image: schedule
ports:
- 3033:3033
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://psql:5432/university_schedule
links:
- postgresql
depends_on:
- postgresql
Ответы (1 шт):
вы пытаетесь подключиться к бд по хосту "psql", который резолвится только внутри сети докер. Попробуйте "localhost" вместо "psql" на первом скрине (при условии что докер поднят локально).
Если докер не на локалке - попробуйте подключиться по ip машины (прошу заметить, он может измениться в будущем).
Получить ip машины:
linux
ip -a
win
ipconfig
ссылка на описание network для docker-compose https://docs.docker.com/compose/networking/
