从入门到再入门-SpringBoot03-其他相关

87 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路 SpringBoot项目快速搭建 注意:学习阶段禁止使用

SpringBoot建议使用官方提供的工具来快速构建项目,网站:start.spring.io/ ,IDEA自带该功能,但需要联网使用, 也可以使用 start.springboot.io/

注意:官方提供的构建工具默认只能选择固定的版本,有些版本之间的差异非常大,所以如果需要选择某个版本可以自行在pom.xml文件中修改版本

image.png

image.png

image.png

springBoot标准项目结构

image.png resources:资源文件,存放静态文件,模板文件,配置文件

static:存放静态文件

templates:存放模板文件

application.properties:springboot配置文件

springboot项目打包部署

springboot默认将项目打包成jar,然后独立运行

1:加载maven插件

<!-- pom.xml中添加插件 -->
<build>
    <plugins>
        <!-- SpringBoot打包插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2:maven命令打包

image.png

打包成功之后,在项目的target包可以找到独立运行的jar

image.png

3:进入target源目录,运行jar

image.png

打开cmd命令框, 运行: java -jar xxx.jar

一个注意点:如果想修改项目端口, 可以: java -jar xxx.jar --server.post=8888

SpringBoot优缺点

优点:

创建独立运行的Spring应用程序

嵌入的Tomcat,无需部署war文件

简化Maven配置

自动配置Spring

提供生产就绪型功能,如:日志,健康检查和外部配置等

不要求配置 XML

非常容易和第三方框架集成起来

缺点:

版本更新较快,可能出现较大变化

因为约定大于配置,所以经常会出现一些很难解决的问题

修改banner

SpringBoot提供了一些扩展点,比如修改banner: 在resources根目录中存入banner.txt文件,替换默认的banner

 
 
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                  //
#application.properties
spring.main.banner-mode=off #关闭banner

热部署插件

除了使用JRebel来实现热部署,还可以使用Springboot提供的spring-boot-devtools包来完成Springboot应用热部署

<!-- SpringBoot热部署插件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

SpringBoot重启是reload重启,通过监控classpath的变化,如果classpath中的文件发生变化,即触发重启.springboot通过两个classpath来完成reload,一个basic classloader中加载不变的类(jar包中的类),一个restart classloader中加载classpath中的类(自己写的类),重启的时候,restart classloader中的类丢弃并重新加载

#默认排除的资源
spring.devtools.restart.exclude=static/**,templates/**,public/**       
#增加额外的排除资源
spring.devtools.restart.additional-exclude=public/** #处理默认配置排除之外的
spring.devtools.restart.enabled=false #禁用自动重启

切换运行环境

在实际开发中,一个系统是有多套运行环境的,如开发时有开发的环境,测试时有测试的环境,不同的环境中,系统的参数设置是不同的,如:连接开发数据和测试数据库的URL绝对是不同的,那么怎么快速的切换系统运行的环境

我们需要为不同的环境创建不同的配置文件,

application-dev.properties

server.port=8081

application-test.properties

server.port=8082

在application.properties中指定需要使用的环境即可

#指定使用的环境是dev
spring.profiles.active=dev

SpringBoot参数配置

参数来源

主要流程摘要: 1,命令行参数; 如: java -jar xxx.jar --server.port=80 2,ServletConfig和ServletContext; 3,操作系统环境变量; 4,application-{profile}.properties或者YAML文件; 5,application.properties或者YAML文件;

一般用的比较多的就是直接在application.properties或者YAML配置 , 其次是命令行启动方式

application.properties语法

server.port=80  
server.session-timeout=30  
server.tomcat.uri-encoding=UTF-8  
  
spring.datasource.url = jdbc:mysql://localhost:3306/crm
spring.datasource.username = root  
spring.datasource.password = mymysql  
spring.datasource.driverClassName = com.mysql.jdbc.Driver  

vs

application.yml语法

server:  
  port: 80
  session-timeout: 30  
  tomcat.uri-encoding: UTF-8  
  
spring:  
  datasource:  
    url : jdbc:mysql://localhost:3306/crm  
    username : root  
    password : mymysql  
    driverClassName : com.mysql.jdbc.Driver

application.properties优先级

一个项目中可以有多个application.properties文件存放在不同目录中,此时他们会遵循固定的优先级来处理有冲突的属性配置, 优先级由高到底,高优先级的配置会覆盖低优先级的配置

项目/config/application.properties

项目/application.properties

classpath:config/application.properties1

classpath:application.properties2

一般都在classpath:application.properties做配置,其他方式不使用

参数属性绑定

准备工作

#application.properties
jdbc.username=root
jdbc.password=admin

@Value绑定单个属性

@Controller
public class HelloController {
    @Value("${jdbc.username}")
    private String username;
 
    @RequestMapping("/hello")
    @ResponseBody
    public Object hello(){
        return "hello, springboot~" + username;
    }
}

直接访问/hello观察username值

也可以在自定义的类上绑定, 注意前提是这个类必须交给spring容器管理

@Component
@ToString
@Setter
@Getter
public class MyData {
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    
}

注入MyDataSource 测试value是否能取值

@Autowired
private MyData myData;
 
@RequestMapping("/value")
@ResponseBody
public Object value(){
    return myData;
}

@ConfigurationProperties批量绑定属性

若觉得上面的方式比较笨重, 可以把前缀抽取到@ConfigurationProperties中, 并且设置类属性与需要绑定的参数名相同, 可实现自动绑定 ,

自定义类

@Component
@ToString
@Setter
@Getter
@ConfigurationProperties("jdbc")  //相当于 @ConfigurationProperties(prefix="jdbc") 
public class MyData {
    private String username;
    private String password;
}

或者

@Bean
@ConfigurationProperties("jdbc")
public MyData myData() {
    return new MyData();
}