Базовое развертывание
Убедитесь что файл
Он требуется для продакшн-сборки. |
Создание исполняемого JAR
Откройте терминал в корневом каталоге проекта и выполните следующую команду:
./gradlew -Pvaadin.productionMode=true 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
Откройте терминал в корневом каталоге проекта и выполните следующую команду:
./gradlew -Pvaadin.productionMode=true bootBuildImage
По умолчанию созданный образ будет иметь имя вашего проекта и соответствующий версии проекта тег
Например, если в settings.gradle
указано следующее:
rootProject.name = 'myapp'
а в build.gradle
:
group = 'com.company'
version = '0.0.1-SNAPSHOT'
то созданным образом будет myapp:0.0.1-SNAPSHOT
.
Если вы используете дополнение Grid Export Actions для экспорта в Excel, вам может понадобиться добавить следующую конфигурацию в build.gradle
, чтобы образ содержал все необходимые шрифты:
tasks.named("bootBuildImage") {
builder = "paketobuildpacks/builder-jammy-full"
}
Более подробная информация о создании образа и его настройке доступна в документации Spring Boot.
Развертывание WAR
Чтобы создать WAR-файл для развертывания на сервере приложения, выполните следующие действия:
-
Убедитесь, что ваш основной класс приложения расширяет
SpringBootServletInitializer
, например:@SpringBootApplication public class MyApplication extends SpringBootServletInitializer implements AppShellConfigurator { // ... }
-
Добавьте плагин
war
в разделplugins
вашего файлаbuild.gradle
:plugins { // ... id 'war' }
-
Откройте терминал в корневом каталоге проекта и выполните следующую команду:
./gradlew -Pvaadin.productionMode=true bootWar
WAR-файл будет создан в папке /build/libs
. Имя файла генерируется по описанному в предыдущем разделе принципу.
Для запуска приложений Jmix необходим как минимум Tomcat 10, так как начиная с Jmix 2.0 требуется поддержка Jakarta EE 9 (пространство имен jakarta.* ). Подробности см. в документации Tomcat.
|
Использование источника данных 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 для развертывания приложения 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
.