Запуск из командной строки с server
и client
профилей
использовать ту же банку и ту же точку входа с 2-х различных профилей, вы должны просто предоставить профиль Spring во время выполнения, чтобы иметь четкое применение - $ {профиль } .properties загружается (и, возможно, запускается условная конфигурация Java).
Определение 2 пружинных профилей (client
и server
):
- Каждый из них будет иметь свои собственные
application-${profile}.properties
- свойства клиента отключит веб-контейнера
Есть один SpringBootApp и точка входа:
@SpringBootApplication
public class SpringBootApp {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(SpringBootApp.class)
.run(args);
}
}
Сделайте этот класс своим основным классом.
SRC/основные/ресурсы/application-server.properties:
spring.application.name=server
server.port=8080
SRC/главная/ресурсы/приложение-клиент.свойства:
spring.application.name=client
spring.main.web-environment=false
Запуск обоих профилей из командной строки:
$ java -jar -Dspring.profiles.active=server YourApp.jar
$ java -jar -Dspring.profiles.active=client YourApp.jar
Вы можете иметь @Configuration
классы срабатывающие условно на основе активного профиля тоже:
@Configuration
@Profile("client")
public class ClientConfig {
//...
}
Запуск от IDE с server
и client
профилей
Пусковые:
@SpringBootApplication
public class SpringBootApp {
}
public class LauncherServer {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(SpringBootApp.class)
.profiles("server")
.run(args);
}
}
public class ClientLauncher {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(SpringBootApp.class)
.profiles("client")
.web(false)
.run(args);
}
}
Вы можете указать дополнительные классы конфигурации (специфичные для клиента или сервера):
new SpringApplicationBuilder()
.sources(SpringBootApp.class, ClientSpecificConfiguration.class)
.profiles("client")
.web(false)
.run(args);
SRC/основной/ресурсы/application-server.properties:
spring.application.name=server
server.port=8080
SRC/основные/ресурсы/application-client.properties:
spring.application.name=client
#server.port= in my example, the client is not a webapp
Обратите внимание, вы также можете иметь 2 SpringBootApp (ClientSpringBootApp
, ServerSpringBootApp
), каждый со своим собственный основной, это аналогичная настройка , которая позволяет вам настроить разные AutoConfiguration
или ComponentScan
:
@SpringBootApplication
@ComponentScan("...")
public class ServerSpringBootApp {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(ServerSpringBootApp.class)
.profiles("server")
.run(args);
}
}
//Example of a difference between client and server
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@ComponentScan("...")
public class ClientSpringBootApp {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(ClientSpringBootApp.class)
.profiles("client")
.web(false)
.run(args);
}
}
Было бы лучше запустить это в Spring Cloud и позволить ему управлять горизонтальным масштабированием для вас. https://spring.io/guides/gs/spring-cloud-and-lattice/ – duffymo
Другие облака, такие как aws (beanstalk), также могут управлять горизонтальным масштабированием. – amitection
Несомненно. Я хочу сказать, что вы должны позволить им это сделать; не пытайтесь справиться с этим сами. Будьте ленивы - используйте то, что доступно. – duffymo