8 运维
约 2287 字大约 8 分钟
2025-06-22
对SpringBoot项目打包(执行Maven构建指令package)
mvn package
运行项目 (执行启动指令)
java -jar 包名.jar
jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果打包时不使用springboot插件获得的包是不能直接运行的, 使用springboot打包插件打包里面的文件包括依赖的包,spring启动所需的东西以及指明启动类. 而不使用打包插件打包出来的不包含这些东西因此无法直接运行
临时属性
java -jar springboot.jar --server.port=80
对于properites中的属性都可以在执行运行命令时进行更改的 携带多个属性启动SpringBoot,属性间使用空格分隔
指定配置文件
配置文件名都是property命名的,也可以使用自己命名的文件做配置文件,前提是文件类型能够被识别
--spring.config.name=config.yml
如果不再同一目录下需要使用location
--spring.confih.location=classpath:/config.yml
如果有多个相同属性的命令行参数配置,后面的配置覆盖前面的
多环境
在一个文件中配置多个环境
#应用环境
spring:
profiles:
active:pro
#设置环境
---
#生产环境
spring:
profiles:pro
server:
port:80
---
#开发环境
spring:
profiles: dev
server:
port:81
---
#测试环境
spring:
profiles: test
server:
port:82
不同的环境使用---隔开,使用spring.profiles
给环境命名,spring.profiles.active:
设置使用的环境
最上面没有---的区域为公共区域,在公共区域写的配置所有环境都会加载
如果要指定默认的环境还可以直接在环境中指定
---
#设置环境
#生产环境
spring:
profiles: pro
server:
port:80
---
#开发环境
spring:
profiles:dev
server:
port:81
---
#测试环境
spring:
config:
activate:
on-profile:test
server:
port:82
在多个独立的文件配置多个环境
也可以将多个环境配置文件分开,但要放在同一目录下,在主配置文件中指明默认配置文件
spring:
profiles:
active:dev
server:
port: 8080
server:
port: 8081
引入其他的配置文件
可以使用include属性引入其他的配置文件,其他的配置文件名称必须是以application-开头 如application-devMVC,引入时可直接写为devMVC
spring:
profiles:
active: dev
include: devMVC,devDB
分组管理
spring:
profiles:
active:dev
group:
"dev":devDB,devMVC
"pro":proDB,proMVC
分组后active表示的就是生效的组了
读取maven环境
在maven中也可以配置多环境
<!--设置多环境-->
<profiles>
<profile>
<!--环境id-->
<id>env_dev</id>
<properties>
<!--设置默认的环境-->
<profile.active>dev</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>env_pro</id>
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
</profiles>
在spring 的配置文件中就可以使用@@符取默认环境了
spring:
profiles:
active:@.profile.active.@
group:
"dev":devDB,devMVC
"pro":devDB,proMVC
[!warning] Title 基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效
日志
日志有六个级别,后果从下到上依次是:
- trace : 堆栈信息,由于级别太低一般不使用
- debug : 给程序员看的
- info : 信息
- warn : 警告
- error : 错误
- fatal : 灾难,这种情况描述的是类似于系统崩溃的情况,但系统崩溃了日志也不太可能运行所以这个信息在Slf4j中并不提供而是和error合并了
控制台默认情况下只显示info及以上的信息,如果要显示其他级别的日志可以在配置文件中更改
debug: true
这是配置全局路径都显示debug级别的信息
可以只显示当前项目根路径下显示debug信息
logging:
level:
root: debug
单独给一个包设置级别
也可以单独设置某个包的日志级别
logging:
level:
root: debug
com.itheima.controller: debug
分组设置级别
也可以分组设置级别
logging:
#设置分组
group:
ebank:com.itheima.controller,com.itheima.service,com.itheima.dao
iservice: com.alibaba
level:
root:info
#设置某个包的日志级别
com.itheima.controller:debug
#设置分组,对某个组设置日志级别
ebank:warn
日志格式输出规则

- PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
- 所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
设置日志输出格式
logging:
pattern:
console:"%d-%m%n"
- %d : 日期
- %m : 消息
- %n : 换行
- %t : pid 在百分号之间加上clr表示开启颜色(前提是控制台支持颜色)
示例 : 拥有springboot同款日志
logging:
pattern:
console: "%d %clr(%5p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
日志文件配置
logging:
file:
name: server.log
logback:
rollingpolicy:
max-file-size: 3KB
file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
热部署
通过spring的依赖插件实现热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
它会检测代码更改的地方如果有更改就自动重启tomcat实现热部署 热部署需要先运行编译命令
- 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
- 重载(ReLoad):jar包,加载位置base类加载器 运行包含重启和重载,热部署只包含重启
热部署的配置范围
默认不触发重启的目录列表:
- /META-INF/maven
- /META-INF/resources
- /resources
- /static
- /public
- /templates
配置热部署排除的文件夹
devtools:
restart:
exclude:static/**,public/**,config/application.yml
关闭热部署
devtools:
restart:
enabled: false
@ConfigurationProperties
宽松绑定 对于使用这个注解的类,类成员支持多种驼峰命名法的绑定方式
- ipAddress
- ipaddress
- IpAddress
- ip_address
- ip-address 但绑定前缀必须是全小写或烤肉串模式
- ipadress
- ip-address
@ConfigurationProperties(prefix="datasource")//必须是全小写或烤肉串模式
public class Config{
String ipaddress;
String userName;
String user-name;
//类名可以是常用的驼峰命名法模式
}
@Value注解不支持宽松绑定
测试
在测试环境中临时添加一个配置
@SpringBootTest(properties={"test.prop=testValue1"})
如果在配置中有相同键的配置那么临时添加的配置会覆盖原配置中的值
使用args属性临时添加环境参数,环境参数优先级大雨临时配置
@SpringBootTest(properties={"test.prop=testValue1"},args={"--test.prop=testValue2"})
在测试环境中添加一个bean对象
使用Import注解
@SpringBootTest
@Import({MsgConfig.class})
public class ConfigurationTest{
@Autowired
private String msg;
@Test
void testconfiguration(){}
}
由于测试包在运行时是模拟了 一个spring的运行环境,所以使用Import注解也是可以在测试类中添加一个bean对象的
环境模拟测试
从一个web环境上模拟一个随机端口
@SpringBootTest(webEnvironment=SprinotTest.WebEnvironment.RANDOM_PORT)
虚拟调用
如果在测试类中要测试web请求可以使用虚拟调用 需要在在测试类上方写上@AutoConfigureMockMvc注解 接着使用自动注入或者直接使用形参获取MockMvc对象后就可以在测试类中进行虚拟请求调用了
@AutoConfigureMockMvc
public class WebTest{
@Test
void testWeb(@Autowired MockMvc mvc)throwsException{
//http://localhost:8080/books
//创建虚拟请求,当前访问/books
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get(urlTemplate:"/books");
//执行对应的请求
mvc.perform(builder);
}
}
虚拟请求状态匹配
查看返回的状态码是否与预期相符 andExpect可以判断两个结果是否匹配,如不匹配就报错,相比于断言它能提供更详细的信息
public void testSataus(@Autowired MockMvc mvc)throws Exception{
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
ResultActions action = mvc.perform(builder);
//匹配执行状态(是否预期值)
//定义执行状态匹配器
StatusResultMatchers status =MockMvcResultMatchers.status();
//定义预期执行状态
ResultMatcher ok = status.isok();
//使用本次真实执行结果与预期结果进行比对
action.andExpect(ok);
}
虚拟请求体匹配
判断请求体中有没有预期的内容
ContentResultMatchers content =MockMvcResultMatchers.content();
//定义预期执行结果
RsultMatcher result = content().string("springboot");
1/使用本次真实执行结果与预期结果进行比对
action.andExpect(result);
json的结果
不同的类型只需要将类型名的函数改变即可
RsultMatcher result = content().json("{\"id\":1,\"name\":\"springboot\"}");
要判断哪个属性只需要根据请求获取该属性所在的区域再进行判断即可,如type在请求头中因此需要获取请求头的对象
数据库事务
在测试类中测试数据库的话会存入数据,可以将事务开启并关闭提交,这样数据就不会被保存到数据库中了
在测试类上加上@Transactional注解,就不会提交数据了 springboot检测到这个注解在测试类才会不提交只对测试类有效
也可以再加上@Rollback直接将参数设置为bool值控制是否提交
随机数据
可以在配置中生成随机数据用于测试
testcase:
book:
id:$${random.int}
name:${random.value}
uuid:${random.uuid}
publishTime:${random.long}
贡献者
版权所有
版权归属:PinkDopeyBug