springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式
有時(shí)候在單機(jī)部署,或者項(xiàng)目沒有在IDea 開發(fā)工具中運(yùn)行(idea可以自動(dòng)打開tomcat項(xiàng)目),需要項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目,配置方法很簡(jiǎn)單。
一、具體步驟
所用到的代碼只有下邊這幾句,即cmd調(diào)用一個(gè)瀏覽器去打開頁面,我是調(diào)用的google的瀏覽器程序,打開的項(xiàng)目。
?String cmd = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe http://localhost:8080";
? ? ? ? ? ? Runtime run = Runtime.getRuntime();
? ? ? ? ? ? try{
? ? ? ? ? ? ? ? run.exec(cmd);
? ? ? ? ? ? ? ? logger.debug("啟動(dòng)瀏覽器打開項(xiàng)目成功");
? ? ? ? ? ? }catch (Exception e){
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? logger.error(e.getMessage());
? ? ? ? ? ? }二、寫在哪里
有人說加一個(gè)過濾器,我不太明白,其實(shí),我們只需要項(xiàng)目啟動(dòng)后,自動(dòng)打開瀏覽器并訪問項(xiàng)目,自始至終也就一次,如果用了過濾器,如何做到只有一次?
所以我覺得應(yīng)該是加一個(gè)類,那種類只能是項(xiàng)目啟動(dòng)后,執(zhí)行一下打開瀏覽器的即可。
對(duì)于springboot 項(xiàng)目的啟動(dòng)項(xiàng),眾所周知,如下:
@SpringBootApplication
public class SpringbootQqAction {
? ? public static void main(String[] args){
? ? ? ? SpringApplication.run(SpringbootQqAction.class,args);
? ? ? ? //可不可以加在這里?
? ? }
}如上面,可以把啟動(dòng)瀏覽器的執(zhí)行步驟放到上邊嗎?經(jīng)過我測(cè)試是可以的 。
因?yàn)镾pringApplication.run 這個(gè)方法是同步阻塞 的,只有它走完,后邊的才能繼續(xù)進(jìn)行,不會(huì)出現(xiàn)項(xiàng)目還沒啟動(dòng)后就去打開瀏覽器訪問項(xiàng)目的問題。
三、我的實(shí)現(xiàn)
我并沒有像上邊說的那樣,直接放到了啟動(dòng)項(xiàng)那里,我覺得太不靈活,我想搞成一個(gè)開關(guān),可以讓這些東西在打完包以后,仍然可以配置。
我們都知道spring 項(xiàng)目啟動(dòng)時(shí),可以有很多方法,讓它執(zhí)行下一下東西,比如ServletContainerInitializer 、還有,我經(jīng)常使用的一個(gè),監(jiān)聽容器生命周期的ServletContextListener ,這里我用的是另一個(gè),即CommandLineRunner ,該接口是springboot 自己,在項(xiàng)目啟動(dòng)后會(huì)自動(dòng)掃描CommandLineRunner 實(shí)現(xiàn)類中的run 方法,并執(zhí)行。
1、創(chuàng)建MyCommandRunner
該類放置的位置,比springboot 啟動(dòng)類低一級(jí)即可,一般我都會(huì)創(chuàng)建一個(gè)config 文件夾,然后把它們放到一起。
比如如下:
src ————main ----java --------springboot.oa ---------------------config ---------------------------MyCommandRunner.java ---------------------SpringbootQqAction.java
具體的MyCommandRunner 類的內(nèi)容如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.awt.*;
import java.net.URI;
/**
?* Created by lsf on 2018/6/5.
?*/
@Component
public class MyCommandRunner implements CommandLineRunner {
? ? private static Logger logger = LoggerFactory.getLogger(MyCommandRunner.class);
? ? @Value("${spring.web.loginurl}")
? ? private String loginUrl;
? ? @Value("${spring.web.googleexcute}")
? ? private String googleExcutePath;
? ? @Value("${spring.auto.openurl}")
? ? private boolean isOpen;
? ? @Override
? ? public void run(String... args) throws Exception {
? ? ? ? if(isOpen){
? ? ? ? ? ? String cmd = googleExcutePath +" "+ loginUrl;
? ? ? ? ? ? Runtime run = Runtime.getRuntime();
? ? ? ? ? ? try{
? ? ? ? ? ? ? ? run.exec(cmd);
? ? ? ? ? ? ? ? logger.debug("啟動(dòng)瀏覽器打開項(xiàng)目成功");
? ? ? ? ? ? }catch (Exception e){
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? logger.error(e.getMessage());
? ? ? ? ? ? }
? ? ? ? }
? ? }
}2、配置參數(shù)
以上有三個(gè)變量loginUrl、googleExcutePath、isOpen,這三個(gè)變量對(duì)應(yīng)的@Value 值,是配置到了springboot 的配置文件application.properties 中,如下:
#是否打開,想打開下邊就寫true spring.auto.openurl=false spring.web.loginurl=http://localhost:8180 spring.web.googleexcute=C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe
注意訪問的項(xiàng)目路徑必須是以http:// 開頭,如果你寫成了localhost:8080 訪問不會(huì)成功的。
3、為什么這么做
如上這么做的優(yōu)點(diǎn)是,我可以隨時(shí)可以開關(guān)項(xiàng)目啟動(dòng)后是否打開瀏覽器訪問項(xiàng)目,而且可以隨時(shí)配置訪問路徑及默認(rèn)瀏覽器。
最重要的是在項(xiàng)目部署的時(shí)候,一般我們都是jar或者war ,如果將這些東西寫到了class 里,那不能直接改,寫到xml 或者application.properties文件是可以隨時(shí)修改的。
本方法支持springboot 以jar 、war 運(yùn)行,都可以。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
完美解決Eclipse導(dǎo)入的項(xiàng)目上有個(gè)紅叉,但不影響項(xiàng)目運(yùn)行的問題
這篇文章主要介紹了完美解決Eclipse導(dǎo)入的項(xiàng)目上有個(gè)紅叉,但不影響項(xiàng)目運(yùn)行的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
java求100以內(nèi)的素?cái)?shù)示例分享
素?cái)?shù)是指因數(shù)只有1和本身的數(shù)字,這篇文章主要介紹了java求100以內(nèi)的素?cái)?shù)示例,需要的朋友可以參考下2014-03-03
SpringBoot解析JSON數(shù)據(jù)的三種方案
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,本文給大家介紹了SpringBoot解析JSON數(shù)據(jù)的三種方案,需要的朋友可以參考下2024-03-03
Spring?Boot實(shí)現(xiàn)熱部署的五種方式
這篇文章主要介紹了Spring?Boot?五種熱部署方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
Java中鎖的實(shí)現(xiàn)和內(nèi)存語義淺析
這篇文章主要給大家介紹了關(guān)于Java中鎖的實(shí)現(xiàn)和內(nèi)存語義的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解
這篇文章主要介紹了Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
Maven如何解決添加依賴之后沒有加載jar包報(bào)錯(cuò)問題
這篇文章主要介紹了Maven如何解決添加依賴之后沒有加載jar包報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

