本文轉(zhuǎn)自公眾號(hào) 一枚趔趄的猿 作者:謝謝同學(xué)
個(gè)人博客:http://blog. 前言
最近工作比較忙,,事情也比較多,。加班回到家都十點(diǎn)多了,洗個(gè)澡就想睡覺了,。所以為了不斷更太多天,,偷懶寫個(gè)小技巧合集吧。之后有時(shí)間都會(huì)進(jìn)行文章更新的,。原創(chuàng)不易,,碼字不易,還希望大家多多支持!話不多說(shuō),,開始今天的技巧合集吧~
設(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)求,。 @CrossOrigin(origins = 'http://blog.', maxAge = 3600)
@RestController
public class demoController{
@GetMapper('/')
public String index(){
return 'hello,CORS';
}
}
1.配置全局 CORS 配置。官網(wǎng)也有給出實(shí)例,,具體如下: @Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping('/api/**').allowedOrigins('https://blog.');
}
};
}
}
獨(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 ,。 <packaging>war</packaging>
<!-- 排除內(nèi)置的tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>
<!-- 若直接有使用servlet對(duì)象時(shí)(這是廢話,,⊙﹏⊙‖∣),需要將servlet引入,本例是沒(méi)有的~ -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
1.改造下啟動(dòng)類,,使其繼承 SpringBootServletInitializer ,同時(shí)覆蓋 configure 方法,。 @SpringBootApplication
@Slf4j
public class ChapterApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(ChapterApplication.class, args);
// new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);
//之后這里設(shè)置業(yè)務(wù)邏輯 比如掛起一個(gè)線程 或者設(shè)置一個(gè)定時(shí)任務(wù)。保證不退出
//不然它就是一個(gè)啟動(dòng)類,,啟動(dòng)后就停止了,。
log.info('jar,chapter啟動(dòng)!');
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
log.info('外部tomcat,chapter啟動(dòng)!');
return application.sources(ChapterApplication.class);
}
}
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)方式: new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);
//之后這里設(shè)置業(yè)務(wù)邏輯 比如掛起一個(gè)線程 或者設(shè)置一個(gè)定時(shí)任務(wù),。保證不退出
//不然它就是一個(gè)啟動(dòng)類,啟動(dòng)后就停止了,。
或者修改配置文件的屬性: spring.main.web-environment=false
最后效果,,是不是沒(méi)有看見端口了:
啟動(dòng)完成前進(jìn)行業(yè)務(wù)邏輯利用 CommandLineRunner 或者 ApplicationRunner 可實(shí)現(xiàn)在 SpringApplication 的 run() 完成前執(zhí)行一些業(yè)務(wù)邏輯 0.修改啟動(dòng)類,實(shí)現(xiàn) CommandLineRunner 接口, ApplicationRunner 類似,,只是 run 的入?yún)⒉煌选?/p> @Override
public void run(String... args) throws Exception {
log.info('CommandLineRunner運(yùn)行');
}
1.運(yùn)行應(yīng)用,,注意查看控制臺(tái)輸出: 當(dāng)然,直接申明一個(gè) bean 也是可以的,。 @Configuration
@Slf4j
public class CommandLineRunnerConfig {
@Bean
public CommandLineRunner runner(){
return new CommandLineRunner() {
public void run(String... args){
log.info('CommandLineRunner運(yùn)行2');
}
};
}
}
若多個(gè)時(shí),,可設(shè)置 @Order 來(lái)確定執(zhí)行的順序。 動(dòng)態(tài)修改日志級(jí)別通過(guò) org.springframework.boot.logging.LoggingSystem 提供的api即可,。 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 即可 <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
題外話:這里的 <optional>true</optional> 是表示依賴不會(huì)傳遞,依賴了此項(xiàng)目的需要額外引入此包,,若需要使用的話,。
若不生效,可試著在打包工具 spring-boot-maven-plugin 下的 configuration 加入 <fork>true</fork> 看看,,具體配置項(xiàng)如下: <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</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 。 _ _ _ _ __ _
| | | | | | | |/ / | |
| |__ ___ | | | | ___ ___ | ' / ___ _ __ __ _ | |
| '_ \ / _ \ | | | | / _ \ / _ \ | < / _ \ | '_ \ / _` | | |
| | | | | __/ | | | | | (_) | _ | (_) | | . \ | (_) | | | | | | (_| | |_|
|_| |_| \___| |_| |_| \___/ ( ) \___/ |_|\_\ \___/ |_| |_| \__, | (_)
|/ __/ |
|___/
${AnsiColor.BRIGHT_RED}
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 ,、 png 、 jpg ,。使用也很簡(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ò)誤之處,還望提出,,謝謝,。
|