spring boot 不佔用端口方式啓動

隨着微服務架構的流行,想要啓動一個微服務架構項目就要開啓好多端口,有時候一臺機器上部署的項目多的時候,端口資源就比較緊張了,其實有的微服務組件僅僅只是提供RPC服務,可以不用佔用web啓動的端口,此時spring boot 不佔用web端口的方式就派上用場了,但是spring boot 1.x與spring boot 2.x的配置是有區別的,在使用時一定要注意一下自己所使用的版本

spirngboot 2.x之前(代碼方式實現):

1 @SpringBootApplication
2 public class Application {
3 
4 public static void main(String[] args) {
5      new SpringApplicationBuilder().sources(Application.class).web(false).run(args);
6   }
7 }

spinrboot 2.x之前(另外一種代碼實現方式)

1 @Configuration
2 @EnableAutoConfiguration
3 public class MyClass{
4     public static void main(String[] args) throws JAXBException {
5           SpringApplication app = new SpringApplication(MyClass.class);
6           app.setWebEnvironment(false);
7           ConfigurableApplicationContext ctx = app.run(args);
8      }
9 }

spinrboot 2.x之前(配置方式)

spring.main.web-environment=false

springboot 2.x之後(代碼方式)

1 @SpringBootApplication
2 public class MyApplication {
3 
4 public static void main(String[] args) {
5       new SpringApplicationBuilder(MyApplication.class)
6              .web(WebApplicationType.NONE) // .REACTIVE, .SERVLET
7              .run(args);
8        }
9 }

springboot 2.x之後(配置方式)

spring.main.web-application-type=none

  

不過這裏有個點需要注意,如果配置成不佔用端口的方式啓動,若main方法執行完後,沒其他的deamon線程在跑,應用就會自動關閉了,有些新同學最容易放這種錯誤,並且還不清楚錯誤在哪;

在使用阻塞線程時,這裏也有個坑,有人使用System.in.read();進行阻塞,這種寫法在window環境下是沒問題的,但是在linux下會出現不阻塞的情況,具體可參考這篇文章:https://blog.csdn.net/zistrong/article/details/84758138

推薦寫法:

/**
 * @Description: TODO
 * @Author Mr.huang
 * @Date 2019/10/28 0028
 * @Version V1.0
 **/
@SpringBootApplication
@EnableScheduling
public class GameDataServerApplication implements CommandLineRunner{
    private static final Logger logger = LoggerFactory.getLogger(GameDataServerApplication.class);
    public static void main(String[] args) {
       SpringApplication.run(GameDataServerApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
//這裏也可以添加一些業務處理方法,比如一些初始化參數等
while(true){ try { Thread.sleep(Long.MAX_VALUE); } catch (InterruptedException e) { logger.error("oi進程意外結束",e); } } } }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章