EliseeAlex.me

Шаг 3

Создание проекта, настройка логирования и подключение зависимостей

Подключим зависимости и проверим, что всё работает

В конце прошлого шага я показал модель системной архитектуры, которую мне предстоит реализовать. В ней есть две внешние зависимости, это Rest Api, доступный пользователю и подключение к базе данных InfluxDb. Для реализации Rest Api мне понадобится веб-сервер, а для InfluxDb — библиотека интеграции. В них мне предстоит разобраться, сегодня я расскажу об этом.

Я буду объяснять в медленном темпе, по шагам. Буду переходить от эксперементов к архитектуре постепенно. И в этой статье расскажу только про создание, подключени зависимостей и конфигурацию логирования.

Создание проекта

Я использую IntelliJ Idea, обычно последней версии EAP. Поэтому создание проекта буду рассказывать на её примере. IDE просто автоматизирует, создание файлов и папок, так что конечный результат не будет отличаться от сделанного, например, в виме.

Конфигурация sbt

Я создал в идее новый sbt-проект, дождался, пока всё проинициализируется. Sbt — это аналог мавена для Scala, он загружает зависимости и собирает проект. У Sbt есть два типа конфигурации: sbt-файлы и scala-файлы, модульный проект можно создать только с помощью вторых. Но сейчас, не буду усложнять, потому что по дефолту создаётся sbt-конфигурация. Я добавил зависимости в этот файл build.sbt:

name := "dynamica"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies ++= {
  val akkaV       = "2.4.6"
  val scalaTestV  = "2.2.5"
  Seq(
    "com.typesafe.akka"           %% "akka-actor"                           % akkaV,
    "com.typesafe.akka"           %% "akka-http-experimental"               % akkaV,
    "com.paulgoldbaum"            %% "scala-influxdb-client"                % "0.4.5",
    "ch.qos.logback"              % "logback-classic"                       % "1.1.3",
    "com.typesafe.scala-logging"  %% "scala-logging"                        % "3.1.0"
  )
}

Я добавил зависимость от akka для создания акторов. Добавил зависимость от akka-http-experimental для создания веб-сервера. В акка есть стабильная версия akka-http-core, но в ней отсутствует Routing DSL, по крайней мере на момент последней доступной версии. Добавил зависимость от scala-influxdb-client для того, чтобы иметь интеграцию с InfluxDb. Добавил зависимости logback-classic и scala-logging для того, чтобы иметь возможность логировать запросы.

Конфигурация логирования через logback

Кроме этого, я в папке src/main/resources добавил настройки для логирования в файл logback.xml:

<configuration scan="true" scanPeriod="10 seconds">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{HH:mm:ss.SSS} %-5level [%thread] %logger{128} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

С конфигурацией пока закончили. В этот момент, в проекте не должно быть ошибок и sbt должен был скачать все зависимости.

Проверка работоспособности

Проверим, что всё работает правильно, для этого создадим в пакете my.dynamica файл Main со следующим содержанием:

package my.dynamica

import com.typesafe.scalalogging.StrictLogging

object Main extends App with StrictLogging {
  logger.info("I'm ready. World, hold on!")
}

В результате должно появиться сообщение в логах, если всё правильно. Если сообщение появилось — зависимости подтянулись, использовали логер из подключеных пакетов.

Дальнейшая работа над проектом

Я буду публиковать дальнейшие шаги работы над проектом в описании к комитам на гитхабе. В блоге буду публиковать только важные моменты архитектурные моменты или наблюдения.

Эта статья будет дополнена.