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的一些实践而已.由于涉 ...
随机推荐
- ROS + Caffe 机器人操作系统框架和深度学习框架笔记 (機器人控制與人工智能)
ROS + Caffe,这里以环境中物体识别为示例,机器人怎么知道环境里面有什么呢? [0.0567392 - n03376595 folding chair][0.0566773 - n040999 ...
- C#比较时分秒大小,终止分钟默认加十分钟,解决跨天、跨月、跨年的情况
private void cmbInHostimes_SelectedIndexChanged(object sender, EventArgs e) { DataRow[] dr; if (chkM ...
- 面试题46:求1+2+ …… +n
题目:求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 通常求1+2+…+n除了用公式n(n+1)/2之外,无外 ...
- 成功实施的APS项目故事分享---如何管理与激励APS项目团队
故事背景 A企业是易普优APS重要客户之一,是某行业的龙头企业:APS项目历时7个月顺利上线,十个月验收!通过易普优APS的顺利实施,建成了集团的精益计划管控运营平台,树立计划的权威与指挥棒作用,让物 ...
- java把html标签字符转换成普通字符(反转换成html标签)
package net.jasonjiang.web; import org.junit.Test; import org.springframework.web.util.HtmlUtils; /* ...
- Python 笔记(一)字典与json使用及注意点
个人笔记系列,随便参考 1.python 中字典与json的差别 字典的生成 >>> a = dict(one=1, two=2, three=3) >>> b = ...
- 【原创】MySQL CPU %sys高的案例分析(一)
[现象] 最近关注MySQL CPU告警的问题时,发现有一种场景,有一些服务器最近都较频繁的出现CPU告警,其中的现象是 SYS CPU占比较高. 下面的截图来源于“MySQL CPU报警”采集的文件 ...
- Music in Car CF 746F
题目:http://codeforces.com/problemset/problem/746/F 先感叹一下题目之长! 一些测试样例在后面给出. 题目大意: Sasha 去工作的路上喜欢听歌,途中经 ...
- poj1273(Edmonds-Karp)
这道题可以算是例题了. 求解最大流,采用EK算法,用广搜查找增广路径,找到后更新网络流矩阵,循环执行直至找不到增广路径为止.这里要小心的是重复边的情况. 程序也是参照了网上的模版来写的,有一些技巧.如 ...
- web客户端安全之跨站点请求伪造攻击
CSRF攻击,Cross-site request forgery,跨站点请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种 ...