我目前正在使用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>
型
1条答案
按热度按时间x7yiwoj41#
也许我在监督一些事情,因为你的设置有点混乱,但在我看来,你正在运行两个MySQL容器:
但是您的Spring配置说要在端口3306上连接到docker_webstore_db_staging。
我还建议检查以下事项:
1.是否激活了正确的配置文件?这将打印在服务器启动时的ASCII艺术Sping Boot 启动屏幕附近
1.是否激活了自动ddl生成?否则,当然不会自动创建表