SpringBoot 使用小技巧合集
原文:https://my.oschina.net/xiedeshou/blog/1926191
设置网站图标
原来我们在使用tomcat开发时,设置网站图片时,即icon图标时,一般都是直接替换root包下的favicon.ico替换成自己的,或者在网页的头部设置link的ref为icon然后设置其href值。而在SpringBoot中,替换图片也是很简单的,只需要将自定义图片放置在静态资源目录下即可,即默认有static、public、resources、/META-INF/resources或者自定义的静态目录下即可。
目录结构:


允许跨域访问
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
简单来说,跨域问题是可以通过nginx来解决的,或者通过jsonp(只支持get请求)来解决。而SpringBoot中也提供了配置方法。 0.利用@CrossOrigin注解,可放至在类上或者方法上。类上代表整个控制层所有的映射方法都支持跨域请求。
@CrossOrigin(origins = "http://blog.lqdev.cn", maxAge = 3600)
@RestController
public class demoController{
@GetMapper("/")
public String index(){
return "hello,CORS";
}
}
1.配置全局CORS配置。官网也有给出实例,具体如下:
@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**").allowedOrigins("https://blog.lqdev.cn");
}
};
}
}
独立Tomcat运行
讲解了这么久,一般上我们都是通过jar包的方式进行启动的应用的。所以部署在独立的
tomcat时,需要如何解决呢?其实也简单,只需要将项目打包方式修改为war包,然后修改下启动类配置即可。
0.修改pom打包方式为war,同时排除了内置的tomcat。
<packaging>war</packaging>
<!-- 排除内置的tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>
<!-- 若直接有使用servlet对象时(这是废话,⊙﹏⊙‖∣),需要将servlet引入,本例是没有的~ -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
1.改造下启动类,使其继承SpringBootServletInitializer,同时覆盖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);
//之后这里设置业务逻辑 比如挂起一个线程 或者设置一个定时任务。保证不退出
//不然它就是一个启动类,启动后就停止了。
log.info("jar,chapter启动!");
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
log.info("外部tomcat,chapter启动!");
return application.sources(ChapterApplication.class);
}
}
2.maven打包成war(mvn clean install),然后放入tomcat中,启动运行即可。

其实这样设置的话,在开发时直接运行启动类也还是可以直接运行的,方便.

启动不设置端口
对一些定时任务服务项目,其本身只是提供一个定时调度功能,不需要其他服务调用,只是去调度其他服务。像这样的服务,正常也就不需要设置端口了。这时候SpringBoot也是支持的。只需要改下启动方式:
new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);
//之后这里设置业务逻辑 比如挂起一个线程 或者设置一个定时任务。保证不退出
//不然它就是一个启动类,启动后就停止了。
或者修改配置文件的属性:
spring.main.web-environment=false
最后效果,是不是没有看见端口了:

启动完成前进行业务逻辑
利用CommandLineRunner或者ApplicationRunner可实现在SpringApplication的run()完成前执行一些业务逻辑
0.修改启动类,实现CommandLineRunner接口,ApplicationRunner类似,只是run的入参不同而已。
@Override
public void run(String... args) throws Exception {
log.info("CommandLineRunner运行");
}
1.运行应用,注意查看控制台输出:

当然,直接申明一个bean也是可以的。
@Configuration
@Slf4j
public class CommandLineRunnerConfig {
@Bean
public CommandLineRunner runner(){
return new CommandLineRunner() {
public void run(String... args){
log.info("CommandLineRunner运行2");
}
};
}
}
若多个时,可设置@Order来确定执行的顺序。
动态修改日志级别
通过org.springframework.boot.logging.LoggingSystem提供的api即可。
loggingSystem.setLogLevel(null, LogLevel.DEBUG);
如,默认时是info模式,未修改时,debug模式是不会输出的。

动态设置后

热部署
前面讲了这么多章节,因为功能都很单一,所以一般上都是直接重启服务来进行更新操作。但当服务功能一多,启动速度缓慢时,还是配置个热部署比较方便。在SpringBoot中,只需要加入一个spring-boot-devtools即可
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
题外话:这里的<optional>true</optional>是表示依赖不会传递,依赖了此项目的需要额外引入此包,若需要使用的话。
若不生效,可试着在打包工具spring-boot-maven-plugin下的configuration加入<fork>true</fork>看看,具体配置项如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
自定义启动Banner
看烦了自带的Banner,动手修改一个属于自己的Banner,提现逼格的时候到了~哈哈,以下是官网给的配置指南:

文字形式
其实,替换很简单,只需要在classpath路径下创建一个banner.txt即可。具体的一些变量官网也有给出,具体如下:

现在我们就定制一个自己的Banner。
_ _ _ _ __ _
| | | | | | | |/ / | |
| |__ ___ | | | | ___ ___ | ' / ___ _ __ __ _ | |
| '_ \ / _ \ | | | | / _ \ / _ \ | < / _ \ | '_ \ / _` | | |
| | | | | __/ | | | | | (_) | _ | (_) | | . \ | (_) | | | | | | (_| | |_|
|_| |_| \___| |_| |_| \___/ ( ) \___/ |_|\_\ \___/ |_| |_| \__, | (_)
|/ __/ |
|___/
${AnsiColor.BRIGHT_RED}
Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}

题外话:手输字符画是不太现实的,大家可通过一些网站进行快速生成。可自行搜索下,网上一搜一大把。
图片形式
若觉得使用文字不够酷炫,当然也可以将图片设置为启动的banner。目前支持的图片格式有gif、png、jpg。使用也很简单,只需要命名为banner即可。
如将头像放入目录中,最后的效果如下:

当然,若图片是有色彩的,也是可以的,对于太复杂的图片显示效果就不佳了,如下。
原图:

banner效果图:

是不是很酷炫~
相关资料
SpringBoot 使用小技巧合集的更多相关文章
- IntelliJ IDEA必装插件以及SpringBoot使用小技巧合集
IntelliJ IDEA必装插件 有不知道怎么安装的吗?File-->settings打开设置面板,找到plugins,输入想要安装的插件回车即可 1.背景图片 目前,IDEA支持设置背景图片 ...
- SpringBoot | 番外:使用小技巧合集
前言 最近工作比较忙,事情也比较多.加班回到家都十点多了,洗个澡就想睡觉了.所以为了不断更太多天,偷懒写个小技巧合集吧.之后有时间都会进行文章更新的.原创不易,码字不易,还希望大家多多支持!话不多说, ...
- Android Studio 小技巧合集
本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本文将这62 ...
- Qt开发经验小技巧合集
一.开发经验总结 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它, ...
- 62个Android Studio小技巧合集
1书签(Bookmarks) 描述:这是一个很有用的功能,让你可以在某处做个标记(书签),方便后面再跳转到此处. 调用:Menu → Navigate → Bookmarks 快捷键: 添加/移除书签 ...
- npm小工具、技巧合集:让你的npm“健步如飞”
1.解决安装速度慢问题-nrm 解决痛点 由于npm的包仓库是在国外,npm包安装速度较慢,部分包甚至无法安装. 对比cnpm的优势 1.cnpm增加了大脑的记忆和思维负担,常常需要考虑使用npm还是 ...
- javascript技巧合集
转http://www.blogjava.net/zhaochengming/archive/2010/04/09/317837.html http://www.cnblogs.com/fxgachi ...
- Android系统级技巧合集
Android系统级技巧合集(随时更新) #转载请注明来源# 1.高通骁龙系列查看CPU体质等级 CPU体质,即为CPU在工作频率下的电压.同一批次的CPU体质各有不同,体质越高,代表该颗CPU可在更 ...
- vue 实践技巧合集
前言 本文纯属个人平时实践过程中的一些经验总结,算是一点点小技巧吧,不是多么高明的技术,如果对你有帮助,那么不胜荣幸. 本文不涉及罕见API使用方法等,大部分内容都是基于对vue的一些实践而已.由于涉 ...
随机推荐
- C++之可调用对象
C++中的可调用对象分为以下几种: 函数 函数指针 lambda表达式 bind创建的对象 重载了函数调用运算符(即“()”)的类 函数.函数指针不再介绍.lambda表达式与bind创建的类参考—— ...
- Java输出文件到本地(输出流)
package cn.buaa; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; im ...
- 20165203&20165206结对创意感想
一.结对学习过程 我和我的搭档性格志趣相投,而且各有所长,我们两个均属于一丝不苟的人,做一件事就要把它做好.因此,我们学习理念相同,志趣相投,这可能会占很大的优势.首先,我们会利用一周的前几天看课本, ...
- 2016-2017-2 20155309南皓芯《java程序设计》第七周学习总结
教材学习内容总结 Lambda 一种匿名方法 表达式构成 括号以及括号里用逗号分隔的参数列表 仅有一个参数的可以省略括号 ->符号 花括号以及花括号里的语句 仅有一条语句时可以省略花括号,并且这 ...
- 关于文件格式Fuzzing测试与漏洞挖掘的学习
最近对于文件的漏洞挖掘比较感兴趣,所以在找资料来看.顺带记录笔记,把这些笔记贴在博客中分享一下.最近打算把精力放在mp3格式的漏洞发掘上,一来这是常见的文件格式格式也比较清晰.二来这也是学长推荐的入手 ...
- WebAssembly 介绍
http://blog.csdn.net/zhangzq86/article/details/61195685 WebAssembly 的出现是不是意味着 Javascript 要完? https:/ ...
- ASP.NET:MVC中文件上传与地址变化处理
目录 文件的上传和路径处理必须解决下面列出的实际问题: 1.重复文件处理 2.单独文件上传 3.编辑器中文件上传 4.处理文章中的图片路径 5.处理上传地址的变化 一.上传文件和重复文件处理 文件处理 ...
- CROC 2016 - Elimination Round (Rated Unofficial Edition) F - Cowslip Collections 数论 + 容斥
F - Cowslip Collections http://codeforces.com/blog/entry/43868 这个题解讲的很好... #include<bits/stdc++.h ...
- Mysql自增语句
一.创建查询 二.将 alter table `表名` change id id int not null auto_increment UNIQUE;复制进去(以id为例) 三.运行ok 注意:手动 ...
- MSTP多生成树的配置
STP的不足 STP协议虽然能够解决环路问题,但是由于网络拓扑收敛较慢,影响了用户通信质量 而且如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断 RSTP对STP的改 ...