久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SpringBoot:使用小技巧合集

 xkl135 2018-08-23

本文轉(zhuǎn)自公眾號(hào) 一枚趔趄的猿  作者:謝謝同學(xué)

個(gè)人博客:http://blog.

前言

最近工作比較忙,,事情也比較多,。加班回到家都十點(diǎn)多了,洗個(gè)澡就想睡覺了,。所以為了不斷更太多天,,偷懶寫個(gè)小技巧合集吧。之后有時(shí)間都會(huì)進(jìn)行文章更新的,。原創(chuàng)不易,,碼字不易,還希望大家多多支持!話不多說(shuō),,開始今天的技巧合集吧~

  • 設(shè)置網(wǎng)站圖標(biāo)

  • 允許跨域訪問(wèn)

  • 獨(dú)立Tomcat運(yùn)行

  • 啟動(dòng)不設(shè)置端口

  • 啟動(dòng)完成前進(jìn)行業(yè)務(wù)邏輯

  • 動(dòng)態(tài)修改日志級(jí)別

  • 熱部署

  • 自定義啟動(dòng)Banner

    • 文字形式

    • 圖片形式

  • 相關(guān)資料

  • 總結(jié)

  • 一點(diǎn)吐槽

  • 最后

  • 老生常談

設(shè)置網(wǎng)站圖標(biāo)

原來(lái)我們?cè)谑褂?tomcat開發(fā)時(shí),,設(shè)置網(wǎng)站圖片時(shí),即icon圖標(biāo)時(shí),,一般都是直接替換 root包下的 favicon.ico替換成自己的,,或者在網(wǎng)頁(yè)的頭部設(shè)置 link的ref為 icon然后設(shè)置其 href值。而在 SpringBoot中,,替換圖片也是很簡(jiǎn)單的,,只需要將自定義圖片放置在 靜態(tài)資源目錄下即可,即默認(rèn)有 static,、 public,、 resources/META-INF/resources或者自定義的靜態(tài)目錄下即可,。

目錄結(jié)構(gòu):

允許跨域訪問(wèn)

CORS是一個(gè)W3C標(biāo)準(zhǔn),,全稱是'跨域資源共享'(Cross-origin resource sharing)。它允許瀏覽器向跨源(協(xié)議 域名 端口)服務(wù)器,,發(fā)出XMLHttpRequest請(qǐng)求,,從而克服了AJAX只能同源使用的限制。

簡(jiǎn)單來(lái)說(shuō),,跨域問(wèn)題是可以通過(guò) nginx來(lái)解決的,,或者通過(guò) jsonp(只支持get請(qǐng)求)來(lái)解決,。而 SpringBoot中也提供了配置方法,。 0.利用 @CrossOrigin注解,可放至在類上或者方法上,。類上代表整個(gè)控制層所有的映射方法都支持跨域請(qǐng)求,。

  1. @CrossOrigin(origins = 'http://blog.', maxAge = 3600)

  2. @RestController

  3. public class demoController{

  4.   @GetMapper('/')

  5.   public String index(){

  6.      return 'hello,CORS';

  7.   }

  8. }

1.配置全局 CORS配置。官網(wǎng)也有給出實(shí)例,,具體如下:

  1. @Configuration

  2. public class MyConfiguration {

  3.    @Bean

  4.    public WebMvcConfigurer corsConfigurer() {

  5.        return new WebMvcConfigurerAdapter() {

  6.            @Override

  7.            public void addCorsMappings(CorsRegistry registry) {            

  8.                     registry.addMapping('/api/**').allowedOrigins('https://blog.');

  9.            }

  10.        };

  11.    }

  12. }

獨(dú)立Tomcat運(yùn)行

講解了這么久,,一般上我們都是通過(guò)jar包的方式進(jìn)行啟動(dòng)的應(yīng)用的。所以部署在獨(dú)立的 tomcat時(shí),,需要如何解決呢,?其實(shí)也簡(jiǎn)單,只需要將項(xiàng)目打包方式修改為 war包,,然后修改下啟動(dòng)類配置即可,。

0.修改pom打包方式為 war,同時(shí)排除了內(nèi)置的 tomcat,。

  1. <packaging>war</packaging>

  2. <!-- 排除內(nèi)置的tomcat -->

  3.        <dependency>

  4.            <groupId>org.springframework.boot</groupId>

  5.            <artifactId>spring-boot-starter-tomcat</artifactId>

  6.            <scope>compile</scope>

  7.        </dependency>

  8. <!-- 若直接有使用servlet對(duì)象時(shí)(這是廢話,,⊙﹏⊙‖∣),需要將servlet引入,本例是沒(méi)有的~ -->

  9.       <dependency>

  10.          <groupId>javax.servlet</groupId>

  11.          <artifactId>javax.servlet-api</artifactId>

  12.          <scope>provided</scope>

  13.       </dependency>

1.改造下啟動(dòng)類,,使其繼承 SpringBootServletInitializer,同時(shí)覆蓋 configure方法,。

  1. @SpringBootApplication

  2. @Slf4j

  3. public class ChapterApplication extends SpringBootServletInitializer{

  4.    public static void main(String[] args) {

  5.        SpringApplication.run(ChapterApplication.class, args);

  6.    //    new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);

  7.    //之后這里設(shè)置業(yè)務(wù)邏輯 比如掛起一個(gè)線程 或者設(shè)置一個(gè)定時(shí)任務(wù)。保證不退出

  8.        //不然它就是一個(gè)啟動(dòng)類,,啟動(dòng)后就停止了,。

  9.        log.info('jar,chapter啟動(dòng)!');

  10.    }

  11.    @Override

  12.    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

  13.        log.info('外部tomcat,chapter啟動(dòng)!');

  14.        return application.sources(ChapterApplication.class);

  15.    }

  16. }

2.maven打包成war( mvn clean install),然后放入tomcat中,啟動(dòng)運(yùn)行即可,。

其實(shí)這樣設(shè)置的話,,在開發(fā)時(shí)直接運(yùn)行啟動(dòng)類也還是可以直接運(yùn)行的,方便.

啟動(dòng)不設(shè)置端口

對(duì)一些定時(shí)任務(wù)服務(wù)項(xiàng)目,,其本身只是提供一個(gè)定時(shí)調(diào)度功能,,不需要其他服務(wù)調(diào)用,只是去調(diào)度其他服務(wù),。像這樣的服務(wù),,正常也就不需要設(shè)置端口了。這時(shí)候 SpringBoot也是支持的,。只需要改下啟動(dòng)方式:

  1. new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);

  2. //之后這里設(shè)置業(yè)務(wù)邏輯 比如掛起一個(gè)線程 或者設(shè)置一個(gè)定時(shí)任務(wù),。保證不退出

  3. //不然它就是一個(gè)啟動(dòng)類,啟動(dòng)后就停止了,。

或者修改配置文件的屬性:

  1. spring.main.web-environment=false

最后效果,,是不是沒(méi)有看見端口了:

啟動(dòng)完成前進(jìn)行業(yè)務(wù)邏輯

利用 CommandLineRunner或者 ApplicationRunner可實(shí)現(xiàn)在 SpringApplicationrun()完成前執(zhí)行一些業(yè)務(wù)邏輯

0.修改啟動(dòng)類,實(shí)現(xiàn) CommandLineRunner接口, ApplicationRunner類似,,只是 run的入?yún)⒉煌选?/p>

  1. @Override

  2.    public void run(String... args) throws Exception {

  3.        log.info('CommandLineRunner運(yùn)行');

  4.    }

1.運(yùn)行應(yīng)用,,注意查看控制臺(tái)輸出:

當(dāng)然,直接申明一個(gè) bean也是可以的,。

  1. @Configuration

  2. @Slf4j

  3. public class CommandLineRunnerConfig {

  4.    @Bean  

  5.    public CommandLineRunner runner(){  

  6.      return new CommandLineRunner() {  

  7.        public void run(String... args){  

  8.            log.info('CommandLineRunner運(yùn)行2');

  9.        }  

  10.      };  

  11.    }  

  12. }

若多個(gè)時(shí),,可設(shè)置 @Order來(lái)確定執(zhí)行的順序。

動(dòng)態(tài)修改日志級(jí)別

通過(guò) org.springframework.boot.logging.LoggingSystem提供的api即可,。

  1. loggingSystem.setLogLevel(null, LogLevel.DEBUG);

如,,默認(rèn)時(shí)是 info模式,未修改時(shí),, debug模式是不會(huì)輸出的,。

動(dòng)態(tài)設(shè)置后

熱部署

前面講了這么多章節(jié),因?yàn)楣δ芏己軉我?,所以一般上都是直接重啟服?wù)來(lái)進(jìn)行更新操作,。但當(dāng)服務(wù)功能一多,啟動(dòng)速度緩慢時(shí),,還是配置個(gè)熱部署比較方便,。在 SpringBoot中,,只需要加入一個(gè) spring-boot-devtools即可

  1. <dependencies>

  2.    <dependency>

  3.        <groupId>org.springframework.boot</groupId>

  4.        <artifactId>spring-boot-devtools</artifactId>

  5.        <optional>true</optional>

  6.    </dependency>

  7. </dependencies>

題外話:這里的 <optional>true</optional>是表示依賴不會(huì)傳遞,依賴了此項(xiàng)目的需要額外引入此包,,若需要使用的話,。


若不生效,可試著在打包工具 spring-boot-maven-plugin下的 configuration加入 <fork>true</fork>看看,,具體配置項(xiàng)如下:

  1.            <plugin>

  2.                <groupId>org.springframework.boot</groupId>

  3.                <artifactId>spring-boot-maven-plugin</artifactId>

  4.                <configuration>

  5.                  <fork>true</fork>

  6.                </configuration>

  7.            </plugin>


自定義啟動(dòng)Banner

看煩了自帶的 Banner,,動(dòng)手修改一個(gè)屬于自己的 Banner,提現(xiàn)逼格的時(shí)候到了~哈哈,,以下是官網(wǎng)給的配置指南:

文字形式

其實(shí),,替換很簡(jiǎn)單,只需要在 classpath路徑下創(chuàng)建一個(gè) banner.txt即可,。具體的一些變量官網(wǎng)也有給出,,具體如下:

現(xiàn)在我們就定制一個(gè)自己的 Banner

  1.  _              _   _                       _  __                          _

  2. | |            | | | |                     | |/ /                         | |

  3. | |__     ___  | | | |   ___         ___   | ' /    ___    _ __     __ _  | |

  4. | '_ \   / _ \ | | | |  / _ \       / _ \  |  <    / _ \  | '_ \   / _` | | |

  5. | | | | |  __/ | | | | | (_) |  _  | (_) | | . \  | (_) | | | | | | (_| | |_|

  6. |_| |_|  \___| |_| |_|  \___/  ( )  \___/  |_|\_\  \___/  |_| |_|  \__, | (_)

  7.                                |/                                   __/ |    

  8.                                                                    |___/    

  9. ${AnsiColor.BRIGHT_RED}

  10. Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}      

題外話:手輸字符畫是不太現(xiàn)實(shí)的,,大家可通過(guò)一些網(wǎng)站進(jìn)行快速生成,。可自行搜索下,,網(wǎng)上一搜一大把,。

圖片形式

若覺得使用文字不夠酷炫,當(dāng)然也可以將圖片設(shè)置為啟動(dòng)的 banner,。目前支持的圖片格式有 gif,、 pngjpg,。使用也很簡(jiǎn)單,,只需要命名為 banner即可。

如將頭像放入目錄中,,最后的效果如下:

當(dāng)然,,若圖片是有色彩的,,也是可以的,,對(duì)于太復(fù)雜的圖片顯示效果就不佳了,如下,。

原圖:

banner效果圖:

是不是很酷炫~

相關(guān)資料

1,、https://docs./spring-boot/docs/1.5.15.RELEASE/reference/htmlsingle

總結(jié)

本章節(jié)主要是簡(jiǎn)單的介紹了一些 SpringBoot的一些小技巧,一般上也就一句話或者一個(gè)注釋,、一句配置就解決問(wèn)題的,。寫這篇文章時(shí),又去翻了翻官網(wǎng)的指南,,很不錯(cuò),,每次都去看都有新發(fā)現(xiàn)。以上有部分就是看了寫下的。確實(shí),,在看官網(wǎng)時(shí),,一般上是需要了解哪些知識(shí)點(diǎn),就搜索直奔主題了,,還沒(méi)有哪次是從頭看的,。有時(shí)間還是耐心的看一看,就是全是英文看的有點(diǎn)頭疼,,好在代碼是看的懂的,,⊙﹏⊙‖∣

一點(diǎn)吐槽

原本是想偷懶,發(fā)一點(diǎn)時(shí)間完成的,。最后本著有圖有真相且負(fù)責(zé)的原則,,為了截圖展現(xiàn)效果,實(shí)際操作了一遍,,發(fā)現(xiàn)時(shí)間沒(méi)有和寫一篇正文來(lái)的少,,好尷尬。,。既然說(shuō)了,,就簡(jiǎn)單說(shuō)下,接下來(lái)的章節(jié)會(huì)涉及的知識(shí)點(diǎn)吧,。接下來(lái)還是 web開發(fā)相關(guān),會(huì)介紹下 websocket相關(guān)知識(shí)點(diǎn),,這部分本人也不是很熟悉,估計(jì)寫的也是簡(jiǎn)單入門的,,也希望會(huì)來(lái)個(gè)聊天室的實(shí)踐,,加深下影響。說(shuō)了 webSocket,,那就不能把 Servlet3.0提供的 異步請(qǐng)求機(jī)制遺漏了,,會(huì)介紹下原生的方式及 Spring提供的方式實(shí)現(xiàn),對(duì)一些異常處理,,比如超時(shí)等設(shè)置也會(huì)進(jìn)行說(shuō)明下,,既然都說(shuō)的 異步請(qǐng)求了,順道也就講下 異步調(diào)用的相關(guān)知識(shí)點(diǎn)吧,。至于 Docker系列,,鑒于本人也是初學(xué)者,寫起來(lái)還是比較慢的,,有時(shí)間就更吧~

最后

目前互聯(lián)網(wǎng)上很多大佬都有 SpringBoot系列教程,,如有雷同,請(qǐng)多多包涵了,。本文是作者在電腦前一字一句敲的,,每一步都是實(shí)踐的,。若文中有所錯(cuò)誤之處,還望提出,,謝謝,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多