【发布时间】:2019-10-01 09:00:46
【问题描述】:
我正在尝试使用 MongoDB 和 Spring boot 创建 docker-compose.yml。
问题是我不想将任何数据库连接硬编码到 Spring 的 application.properties 中。
从this article我看到你可以用预定义的主机名启动一个mongodb容器。 据我了解,compose yml 文件中定义的所有服务都在同一个网络中,但它们具有不同的 ip,对吗? 所以主要问题是如何在 docker-compose.yml 中定义 mongodb 主机名,并将该名称用于 spring boot application.properties 文件中。
我会尽力提供尽可能多的信息,但如果有不清楚的地方请告诉我。
以下是有关 Spring Boot 应用程序的一些信息。
我在 spring 项目中使用的依赖项是:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
该应用程序具有扩展 MongoRepository 的接口:
import org.springframework.data.mongodb.repository.MongoRepository;
public interface ServiceLoggerRepository extends MongoRepository<ExampleEntity, String> {
}
它使用@Document 注释实体
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "example")
public class ExampleEntity {
@Id
private String _id;
private String name;
}
数据库连接定义在application.properties文件中:
#here is the problem - this the vm ip
spring.data.mongodb.uri=mongodb://192.168.0.51
spring.data.mongodb.database=mongo-test
有关 Spring Boot 的 Dockerfile 的信息:
FROM openjdk:8-jre
COPY ./mongo-test.jar ./usr/mongo-test.jar
EXPOSE 8080
RUN sh -c 'touch /usr/mongo-test.jar'
ENTRYPOINT ["java","-jar","/usr/mongo-test.jar"]
关于 docker-compose 的信息: 它有 2 个服务 - MongoDB 和 Spring Boot 应用程序。
version: "3"
services:
mongodb:
restart: always
image: mongo
container_name: "mongodb-test"
ports:
- 27017:27017
command: --smallfiles
mongo-logger:
restart: always
build: ./mongo-test
container_name: "mongo-test"
ports:
- 8080:8080
depends_on:
- mongodb
links:
- mongodb
当容器被创建并运行时,它就可以工作了。但问题是我不知道在哪里以及如何定义 spring.data.mongodb.uri 以使用像 spring.data.mongodb.uri=mongodb://mongo-hostname 这样的静态对象。
是否有可能,是否有任何解决方案或良好做法可以做到这一点?
【问题讨论】:
-
检查this
标签: java mongodb spring-boot docker docker-compose