Базовое развертывание
Создание исполняемого JAR
Откройте в Jmix Studio окно инструмента Gradle и дважды щелкните Tasks → build → bootJar.
В командной строке используйте следующую команду:
./gradlew bootJar
Имя исполняемого JAR будет состоять из имени и версии вашего проекта. Например, если в settings.gradle
указано следующее:
rootProject.name = 'myapp'
а в build.gradle
:
group = 'com.company'
version = '0.0.1-SNAPSHOT'
то именем JAR будет myapp-0.0.1-SNAPSHOT.jar
.
Исполняемый JAR-файл создается в папке /build/libs
. Его можно скопировать в любое место и запустить следующим образом:
java -jar myapp-0.0.1-SNAPSHOT.jar
Если вы хотите настроить процесс упаковки или создать развертываемый WAR-файл, обратитесь к документации Spring Boot.
Создание образа Docker
Откройте в Jmix Studio окно инструмента Gradle и дважды щелкните Tasks → build → bootBuildImage task.
В командной строке используйте следующую команду:
./gradlew bootBuildImage
По умолчанию созданный образ будет иметь имя вашего проекта и соответствующий версии проекта тег
Например, если в settings.gradle
указано следующее:
rootProject.name = 'myapp'
а в build.gradle
:
group = 'com.company'
version = '0.0.1-SNAPSHOT'
то созданным образом будет myapp:0.0.1-SNAPSHOT
.
Более подробная информация о создании образа и его настройке доступна в документации Spring Boot.
Развертывание WAR
Чтобы создать WAR-файл для развертывания на сервере приложения, выполните следующие действия:
-
Убедитесь, что ваш основной класс приложения расширяет
SpringBootServletInitializer
, например:@SpringBootApplication public class MyApplication extends SpringBootServletInitializer { // ... }
-
Добавьте плагин
war
в разделplugins
вашего файлаbuild.gradle
:plugins { // ... id 'war' }
-
Перезагрузите проект Gradle либо нажав кнопку Load Gradle Changes во всплывающем окне в правой части окна редактора, либо нажав Reload All Gradle Projects в окне инструмента Gradle.
-
Откройте окно инструмента Gradle и дважды щелкните Tasks → build → bootWar или используйте следующую команду:
./gradlew bootWar
WAR-файл будет создан в папке /build/libs
. Имя файла генерируется по описанному в предыдущем разделе принципу.
Приложения Jmix нельзя запустить на Tomcat 10, поскольку он не поддерживает Java EE 8 (пространство имен javax.* ) и требует Jakarta EE 9 (jakarta.* ), см. подробнее в документации Tomcat. Используйте последнюю версию Tomcat 9 для развертывания Jmix WAR.
|
Использование источника данных JNDI
При развертывании приложения в WAR вы можете использовать предоставляемый сервером приложений источник данных JNDI для выноса из приложения настроек подключения.
Ниже представлена настройка основного DataSource
приложения для сред разработки и производственных сред с помощью функции профилей Spring.
-
В основном классе приложения добавьте аннотацию
@Profile("!prod")
к методамdataSourceProperties
иdataSource
, чтобы удостовериться, что эти бины создаются только в среде разработки:@Profile("!prod") @Bean @Primary @ConfigurationProperties("main.datasource") DataSourceProperties dataSourceProperties() { return new DataSourceProperties(); } @Profile("!prod") @Bean @Primary @ConfigurationProperties("main.datasource.hikari") DataSource dataSource(DataSourceProperties dataSourceProperties) { return dataSourceProperties.initializeDataSourceBuilder().build(); }
-
Добавьте метод, создающий бин
DataSource
для производственной среды:@Profile("prod") @Bean(name = "dataSource") @Primary DataSource prodDataSource(ApplicationContext context) { JndiDataSourceLookup lookup = new JndiDataSourceLookup(); DataSource dataSource = lookup.getDataSource("java:comp/env/jdbc/demo"); (1) // to avoid org.springframework.jmx.export.UnableToRegisterMBeanException: for (MBeanExporter mbeanExporter : context.getBeansOfType(MBeanExporter.class).values()) { if (JmxUtils.isMBean(((Object) dataSource).getClass())) { mbeanExporter.addExcludedBean("dataSource"); } } return dataSource; }
1 JNDI-имя источника данных, предоставляемого сервером приложения. -
При запуске сервера приложений установите для активного профиля значение
prod
в свойстве приложенияspring.profiles.active
.
Ниже приведен пример конфигурации Tomcat 9 для развертывания приложения demo.war
.
-
Скопируйте
demo.war
в папкуtomcat/webapps
. -
Создайте файл
tomcat/bin/setenv.sh
со следующим содержимым:CATALINA_OPTS="-Dspring.profiles.active=prod"
-
Создайте файл
tomcat/conf/Catalina/localhost/demo.xml
, определяющий источник данных, и установите соответствующие параметры подключения к БД (имя XML-файла должно совпадать с именем WAR):<Context> <Resource type="javax.sql.DataSource" name="jdbc/demo" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost/demo" username="root" password="root" maxIdle="2" maxTotal="20" maxWaitMillis="5000" /> </Context>
Обратите внимание, что атрибут
name
элементаResource
определяет имя JNDI, используемое в методеJndiDataSourceLookup.getDataSource()
при создании бинаDataSource
. -
Скопируйте соответствующий файл JDBC-драйвера (например,
`postgresql-42.2.9.jar
) вtomcat/lib
.
При запуске Tomcat приложение будет использовать источник данных, определенный в файле tomcat/conf/Catalina/localhost/demo.xml
.