Введение
Для здоровой разработки лучшей практикой является однородная настройка различных окружений, и лучший способ сделать это, если не использовать Docker.
Здесь ниже я объясню, как настроить среду для разработки с использованием Spring Boot и базы данных Mongo, однако вы можете без проблем использовать и другую базу данных.
Нам нужно сделать три основные вещи, чтобы иметь возможность разрабатывать с помощью Docker, шаги следующие:
- Создать проект, используя стандартные средства для этого.
- Настроить pom.xml для упаковки .jar файлов.
- Создать файлы Docker (Dockerfile и docker-compose.yml).
- Настройте отладчик в IDE, здесь мы будем использовать Intellij.
Создание проекта
При создании проекта Spring Boot с помощью веб-сайта мы настроим его, как показано ниже:
При необходимости вы можете изменить некоторые конфигурации, важны только следующие:
- Проект: Maven
- Язык: Java
- Упаковка: Jar
Убедитесь, что в вашем pom.xml указан путь к основному классу и установлена опция repackages, это будет необходимо для генерации .jar файла.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<configuration>
<mainClass>com.trantorinc.spring-boot-local-dev-docker.Application</mainClass>
</configuration>
</execution>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Настройка окружения
Для настройки среды разработки нам понадобятся два типа файлов docker: Dockerfile и docker-compose.yml:
Dockerfile
FROM maven:3.8.4-jdk-11
ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
ENV JAVA_DEBUG true
Выше вы можете видеть, что мы используем официальный образ Maven и имеем две переменные, которые необходимы для настройки отладчика, что в основном делает, это выставляет опции отладки java в порт 5005.
docker-compose
- Spring Boot
version: '3.8'
services:
my-app:
container_name: my-spring-boot-app
build:
context: .
dockerfile: Dockerfile
command: java -jar target/myapplicationname-0.0.1-SNAPSHOT.jar
ports:
- 8080:8080
- 5005:5005
volumes:
- .:/usr/src/mymaven:rw
working_dir: /usr/src/mymaven
Что делается выше? Сначала мы собираем образ docker, а затем выполняем команду для выполнения сгенерированного .jar. Также необходимо пробросить два порта, порт 8080 для доступа к Restful API localhost, а порт 5005 — для доступа к опции отладки. Кроме того, мы настраиваем том и работаем напрямую для приема изменений из нашего локального проекта.
- Mongo
mongodb:
image: mongo
container_name: mongodb
ports:
- 27017:27017
volumes:
- /data
environment:
- MONGO_INITDB_ROOT_USERNAME=rootuser
- MONGO_INITDB_ROOT_PASSWORD=rootpass
- MONGO_INITDB_DATABASE=mydatabasename
volumes:
data: { }
networks:
default:
name: mongodb_network
Выше мы просто создали службу для запуска образа mongo и настроили параметры базы данных. После этого мы создаем сеть для соединения двух созданных контейнеров.
При необходимости мы также можем создать службу для mongo express:
mongo-express:
image: mongo-express:0.54
container_name: mongo-express
restart: always
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=rootuser
- ME_CONFIG_MONGODB_ADMINPASSWORD=rootpass
- ME_CONFIG_MONGODB_SERVER=mongodb
После завершения этой части нам понадобится еще одна конфигурация, в src/main/resources открываем файл application.properties и вставляем следующую информацию:
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=rootuser
spring.data.mongodb.password=rootpass
spring.data.mongodb.database=mydatabasename
spring.data.mongodb.port=27017
spring.data.mongodb.host=mongodb
spring.data.mongodb.auto-index-creation=true
В случае необходимости инициализации значений вы можете выполнить команды в mongo при запуске среды. Для этого нужно сделать несколько настроек.
- Добавьте следующую строку в тома сервиса mongodb:
- Внутри файла .js должно быть что-то вроде этого:
db = new Mongo().getDB('mydatabase');
db.createCollection('users');
db.users.insertMany([
{
username: 'user01',
password: '123456',
email: 'user01@email.com'
},
{
username: 'user02',
password: '654321',
email: 'user02@email.com' },
{
username: 'user03',
password: '456456',
email: 'user03@email.com'
}
]);
Настройка отладки
Теперь, чтобы подключить его к вашей IDE и иметь возможность отладки настройте его, здесь мы будем использовать Intellij. Итак, что вам нужно сделать, это создать один Remote JVM Debug.
- Нажмите на Edit Configuration:
- Create a Remote JVM Debug и настройте ниже:
Execution
- Выполните следующую команду для запуска среды
docker-compose up -d
- Нажмите кнопку отладки символа:
Заключение
После долгого дня настройки, я подумал, что руководство будет полезно для сообщества, потому что я столкнулся с несколькими проблемами, пытаясь настроить его, пока не пришел к этому решению. На любые вопросы я с удовольствием постараюсь ответить.
Доступ к файлам здесь!
Наслаждайтесь!