我正在尝试使用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
之类的静态内容。
有可能这样做吗?有没有解决方法或好的做法?
答案 0 :(得分:3)
要访问mongodb,您需要使用docker-compose.yml
中定义的mongodb服务名称。
您可以使用以下环境变量在应用程序属性中进行设置:
//aplication.properties
...
spring.data.mongodb.uri=${MONGODB_URI}
和
//docker-compose.yml
version: "3"
services:
mongodb:
image: mongo
container_name: "mongodb-test"
ports:
- 27017:27017
mongo-logger:
build: ./mongo-test
container_name: "mongo-test"
ports:
- 8080:8080
environment:
- MONGODB_URI=mongodb://mongodb
depends_on:
- mongodb