MySQL Dockerized数据库显示为空-无法访问数据

ryhaxcpt  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(84)

我目前正在使用Gradle与MySQL数据库进行Sping Boot Web API项目,我的后端应用程序和数据库都是Dockerized的。在开发我的应用程序时,我遵循了我的大学提供的示例。该示例使用名为DatabaseDataInitializer的类在应用程序本身中对数据库进行了重新配置。该类为TodoRepository中的TodoEntity填充初始虚拟数据。

@Component
@AllArgsConstructor
public class DatabaseDataInitializer {

private TodoRepository todoRepository;

@EventListener(ApplicationReadyEvent.class)
public void populateDatabaseInitialDummyData() {
    if (todoRepository.count() == 0) {
        todoRepository.save(TodoEntity.builder().title("Plan vacations").done(false).build());
        todoRepository.save(TodoEntity.builder().title("Clean kitchen").done(false).build());
        todoRepository.save(TodoEntity.builder().title("Study React").done(false).build());
        todoRepository.save(TodoEntity.builder().title("Shopping 
        groceries").done(false).build());
    }
}

字符串
然而,在我的实现中,我遇到了一个问题,即使我做了同样的步骤,我的MySQL Dockerized数据库似乎是空的。我的后端应用程序和MySQL数据库都是Dockerized的,当试图访问特定的端点时,例如,/products,我的Docker后端容器中的日志指示错误,指出表'products'不存在:

Caused by: java.sql.SQLSyntaxErrorException: Table 'webstore.users' doesn't exist


值得注意的是,自从我最近开始使用Docker以来,我没有Docker Compose File,因为我不确定它能做什么,这可能是问题所在。
下面是我的Dockerfile:

FROM gradle:7.5.0-jdk17
WORKDIR /opt/app
COPY ./build/libs/WebShop-1.0-SNAPSHOT.jar ./

ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar WebShop-1.0-SNAPSHOT.jar"]


以下是我的application-staging.properties文件:

spring.datasource.url=jdbc:mysql://docker_webstore_db_staging:3306/webstore
spring.datasource.username=root
spring.datasource.password=my-secret-pw-staging


以下是我用来设置容器的命令:

docker run --name docker_webstore_db_dev -e MYSQL_DATABASE=webstore -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql
docker network create docker_webstore_network_staging
docker run --net docker_webstore_network_staging --name docker_webstore_db_staging -e MYSQL_DATABASE=webstore -e MYSQL_ROOT_PASSWORD=password -p 3390:3306 -d mysql
./gradlew clean assemble
docker build -t webstore-backend .
docker run -d -p 8090:8080 --net=docker_webstore_network_staging --env spring_profiles_active=staging --name=webstore-backend-staging webstore-backend
docker logs <container id>

x7yiwoj4

x7yiwoj41#

也许我在监督一些事情,因为你的设置有点混乱,但在我看来,你正在运行两个MySQL容器:

  • docker_webstore_db_dev在你的机器的端口3306上,
  • docker_webstore_db_staging在你机器的端口3390上。

但是您的Spring配置说要在端口3306上连接到docker_webstore_db_staging。
我还建议检查以下事项:
1.是否激活了正确的配置文件?这将打印在服务器启动时的ASCII艺术Sping Boot 启动屏幕附近
1.是否激活了自动ddl生成?否则,当然不会自动创建表

相关问题