Как развернуть мультимодульный весенне-загрузочный проект Maven в основном Cloud Foundry? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть проект весенней загрузки модуля multi maven.Допустим, есть два модуля в родительском 'service' и 'config'.Сервис зависит от конфига.Модуль config содержит классы для кода конфигурации БД (cassandra db).Я добавил модуль конфигурации в качестве зависимости в pom моего служебного модуля.Приложение Sprinngboot прекрасно работает на локальном компьютере.Родительский пом имеет упаковку как пом.подмодули т.е.Сервис и конфиг имеют упаковку в виде баночки.Мне не нужно создавать войну, так как веб-приложение не требуется.это просто остальные микросервисы.Чтобы упаковать проект, я выполнил 'mvn package' на уровне root pom.Созданы банки для отдельных модулей.Сервисный модуль - это тот, где определен основной метод.Я создал файл манифеста на уровне сервисного модуля и развернул банку сервисного модуля в облаке.Приложение отлично работает на облаке.Я полагаю, что jar служебного модуля неявно содержит необходимые зависимости от модуля конфигурации, так как я уже определил config как зависимость в pom служебного модуля.

Далее, если я хочу внести некоторые изменения только в модуль конфигурации, будет ли онТребуется создать банку обслуживания и развернуть ее в облаке, даже если нет изменений в обслуживании?Или есть ли способ развернуть jar модуля config только в облаке?если да, как бы я связал свой сервисный модуль с этим в облаке, чтобы он продолжал функционировать, как раньше?

Каков рекомендуемый способ облачного развертывания проекта multimaven?

Редактировать:1 Чтобы сделать вопрос более ясным и точным, я ищу стандартный способ развертывания в облаке.Я описываю шаги, как я делаю развертывание в настоящее время, и со ссылкой на то, что я должен улучшить в текущих шагах.У меня 3 файла pom.xml.1 родитель и 2 ребенка.Кроме того, модуль конфигурации определяется как зависимость в служебном модуле pom.xml

. Для развертывания ниже приведены шаги, которые я предпринимаю -

  1. Переход к пути родительского pom и запуск пакета 'mvn package'.создает соответствующие jar в дочерних модулях (1 jar в сервисе и 1 jar в конфиге)
  2. создает файл manisfest.yml в сервисном модуле и указывает путь к jar сервиса вместе с другой необходимой конфигурацией в файле манифеста.
  3. Вход в облачный литейный цех, переход по пути к служебному модулю, где присутствует файл манифеста .yml, и выполнение «cf push». Он развертывает и запускает мое приложение в облаке.Все хорошо!

Далее, допустим, я внес изменения в код класса модуля конфигурации.Как я могу просто развернуть jar модуля config в облаке?Будет ли мое приложение работать до сих пор?

Ранее я развернул только jar сервисного модуля, а не jar конфиг-модуля.Приложение работает нормально.Но в будущем, если я внесу изменения только в модуль конфигурации и не коснусь служебного модуля, мне все равно нужно будет создать jar службы, как я делал изначально, или есть способ, которым я просто заново создаю jar для модуля конфигурации, который был изменен иразвернуть только это.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Далее, допустим, я внес изменения в код класса модуля конфигурации.Как я могу просто развернуть jar модуля config в облаке?Будет ли мое приложение работать?

Частичное развертывание в Cloud Foundry невозможно.Под этим я подразумеваю, что вы не можете взять один JAR-файл из своего приложения и вставить его в существующий пакет кода приложения.Вам нужно делать cf push каждый раз, когда вы меняете код, независимо от того, насколько малы изменения.

Когда вы запускаете cf push, вы отправляете «полный» пакет кода приложения в Cloud Foundry длязапустить.Если вы измените какую-либо часть этого полного комплекта, вам нужно снова cf push.Это может показаться неэффективным, но cf push умный и пропускает файлы, которые уже находятся на сервере, поэтому вы заметите, что последующие нажатия будут меньше и быстрее.

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

Короче говоря ...

  1. Перестройте модуль, который изменился.
  2. Перестройте JAR / WAR, который вы отправляете в Cloud Foundry.
  3. Push to Cloud Foundry

Ваши изменения будут развернуты.

0 голосов
/ 21 ноября 2018

Вам нужен родительский проект, чтобы объединить все это:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
    </parent>

    <groupId>com.greg</groupId>
    <artifactId>boot-multi-module-example</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>service</module>
        <module>config</module>
    </modules>

</project>

Вам нужен проект конфигурации как дочерний элемент родителя, что-то вроде:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>boot-multi-module-example</artifactId>
        <groupId>com.greg</groupId>
        <version>1.0</version>
    </parent>

    <artifactId>config</artifactId>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

И, наконец,загрузочное приложение, которое вы развернете, с зависимостью от службы конфигурации выше:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.greg</groupId>
        <artifactId>boot-multi-module-example</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>service</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- tag::actuator[] -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.greg</groupId>
            <artifactId>service</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!-- end::actuator[] -->
        <!-- tag::tests[] -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- end::tests[] -->
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
...