Как разделить репозиторий и классы обслуживания между двумя проектами - PullRequest
0 голосов
/ 15 мая 2018

Я работаю над двумя проектами, одним веб-приложением (Spring MVC) и одним автономным приложением службы бэкэнда (Spring boot), которые тесно взаимодействуют друг с другом.Я использую hibernate для обоих, и они оба закодированы с помощью IDE Netbeans.

Моя «проблема» заключается в том, что я получаю дубликат кода в обоих проектах, в основном на уровнях Repository и Service.Мои сущности, очевидно, также дублируются, поскольку оба проекта используют одну и ту же базу данных.

Есть ли способ создать некую библиотеку классов (возможно, третий проект?) И поместить в нее весь общий код?Если это действительно возможно, как вы можете изменить каждый проект, чтобы они все еще имели доступ к этому коду, как если бы он был их частью?Я собирался разместить там все свои репозитории, сервисы и объекты, чтобы избежать дублирования кода и значительно снизить риск ошибки.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Отделите эти Repository и Service классы от подмодуля.

Структура выглядит так:

-- your app
  -- api    (dependent on `common` module)
  -- webapp (dependent on `common` module)
  -- common

Тогда проблема заключается в инициализации bean-компонентов внутри общего модуля. AFAIK, у вас есть два варианта:

  1. В классе @Configuration модуля api или webapp добавьте базовые пакеты модуля common в пакеты сканирования компонентов
  2. В папке ресурсов api или webapp добавьте фабрику конфигурации Spring /src/main/resources/META-INF/spring.factories org.springframework.boot.autoconfigure.EnableAutoConfiguration = your.path.AutoConfiguration

    Определение службы / хранилища @Bean внутри AutoConfiguration класс

0 голосов
/ 15 мая 2018

Я предполагаю, что в этом ответе ваши проекты связаны друг с другом

Вы можете установить несколько properties в одном Spring проекте, где хранятся параметры подключения к базе данных и т. Д.с помощью нескольких файлов свойств.
Например:

application-web.properties

application-backend.properties

Вы можете использовать их в своем проекте, активировавнеобходимый файл свойств для приложения.В этих случаях имена профилей будут web и backend.

При использовании maven я использую следующую командную строку:

mvn spring-boot:run -Drun.profiles=<<profile>>

Теперь вернемся к вашему Java-коду.Если есть классы, которые использует только одно из ваших приложений, вы можете указать это в «профиле».Пример:

@Controller

@Profile({ "web" })
public class WebEndpoint {
}

Таким образом, вы можете сделать общий код доступным для обоих приложений, не дублируя большую часть кода.

...