SpringBoot 学习笔记5
SpringBoot实践
整合SpringMVC
修改端口
查看SpringBoot的全局属性可知,端口通过以下方式配置:创建 SpringBoot 默认配置文件 —— application.yaml
复制server: port: 80
也可以使用 application.properties
默认配置文件来配置端口:
复制# 映射端口 server.port=80
重启服务后测试:

修改映射路径
修改配置文件:application.yaml
复制server: port: 80 servlet: path: "*.abc"
修改映射路径以后,获取映射路径的方法,也要修改为对应的映射,如:
复制@GetMapping(value = "hello.abc") @ResponseBody public String hello() { return "Hello, SpringBoot!"; }
重启服务后测试:

修改日记级别
修改配置文件:application.yaml
复制server: port: 80 servlet: path: "*.abc" logging: level: pers.stringbug: debug org.springframework: debug
重启服务后测试:控制台这个时候输出的日记信息就会很详细

访问静态资源
现在,我们的项目是一个jar工程,那么就没有webapp,我们的静态资源该放哪里呢?
有一个叫做 ResourceProperties
的类,里面就定义了静态资源的默认查找路径:
默认的静态资源路径为:
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public
只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。
我们习惯会把静态资源放在classpath:/static/
目录下。我们创建目录,并且添加一些静态资源:

在 static 中放如下动态图片:

重启项目后测试:

添加拦截器
如果我们想要保持 SpringBoot 的一些默认 MVC 特征,同时又想自定义一些 MVC 配置(包括:拦截器、格式化器、 视图控制器、消息转换器 等等)。这个时候,我们可以通过编写一个类,让这个类实现
WebMvcConfigurer
接口,并且添加@Configuration
注解,来实现自定义部分SpringMvc配置(不要添加@EnableWebMvc
注解。)。如果你想要自定义
HandlerMapping
、HandlerAdapter
、ExceptionResolver
等组件,你可以创建一个WebMvcRegistrationsAdapter
实例来提供以上组件。如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加
@Configuration
注解和@EnableWebMvc
注解
注意:如果想要保留SpringBoot提供的一切特征,那么就不要添加@EnableWebMvc
注解。
定义一个拦截器:
复制public class MyInterceptor implements HandlerInterceptor { private Logger logger = LoggerFactory.getLogger(MyInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { logger.debug("preHandle method is now running!"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { logger.debug("postHandle method is now running!"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { logger.debug("afterCompletion method is now running!"); } }
定义配置类,注册拦截器:
复制@Configuration public class MvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 添加一个拦截器,该拦截器拦截一切路径 registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**"); } }
applacation.yaml 配置如下:
复制server: port: 80 servlet: path: / logging: level: pers.stringbug: debug org.springframework: debug
重启项目后测试:

此外拦截器还可以这样写:
复制public class MyInterceptor implements HandlerInterceptor { private Logger logger = LoggerFactory.getLogger(MyInterceptor.class); } // 改成 @Slf4j public class MyInterceptor implements HandlerInterceptor { }
@Slf4j
可以帮我们为这个类创建 Logger 对象。
整合jdbc和事务
spring中的jdbc连接和事务是配置中的重要一环,在SpringBoot中该如何处理呢?
答案是不需要处理,我们只要找到SpringBoot提供的启动器即可:
复制<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
当然,不要忘了数据库驱动,SpringBoot并不知道我们用的什么数据库,这里我们选择MySQL:
复制<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
其中,需要在 application.yaml
中添加如下配置:
复制spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/Test username: root password: 123456
至于事务,SpringBoot中通过注解来控制。就是我们熟知的@Transactional
复制@Service public class UserService { @Autowired private UserMapper userMapper; public User queryById(Long id){ return this.userMapper.selectByPrimaryKey(id); } @Transactional public void deleteById(Long id){ this.userMapper.deleteByPrimaryKey(id); } }
整合连接池
其实,在刚才引入jdbc启动器的时候,SpringBoot已经自动帮我们引入了一个连接池:

HikariCP应该是目前速度最快的连接池了,我们看看它与c3p0的对比:

使用 HikariCP,只需要指定连接池参数即可:application.yaml
复制spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/Test username: root password: 123456 hikari: idle-timeout: 60000 maximum-pool-size: 30 minimum-idle: 10
application.properties
文件中可以这样配置:
复制spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.hikari.idle-timeout=60000 spring.datasource.hikari.maximum-pool-size=30 spring.datasource.hikari.minimum-idle=10
当然,如果你更喜欢Druid连接池,也可以使用Druid官方提供的启动器:
复制<!-- Druid连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.6</version> </dependency>
而连接信息的配置与上面是类似的,只不过在连接池特有属性上,方式略有不同:
复制spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/Test username: root password: 123456 druid: initial-size: 1 min-idle: 1 max-active: 20 test-on-borrow: true stat-view-servlet.allow: true
application.properties
文件中可以这样配置:
复制#初始化连接数 spring.datasource.druid.initial-size=1 #最小空闲连接 spring.datasource.druid.min-idle=1 #最大活动连接 spring.datasource.druid.max-active=20 #获取连接时测试是否可用 spring.datasource.druid.test-on-borrow=true #监控页面启动 spring.datasource.druid.stat-view-servlet.allow=true
整合mybatis
mybatis
SpringBoot官方并没有提供Mybatis的启动器,不过Mybatis官网自己实现了:
复制<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>
配置,基本没有需要配置的:application.yaml
复制mybatis: configuration: map-underscore-to-camel-case: true mapper-locations: mappers/*.xml type-aliases-package: pers.stringbug.pojo
application.properties
文件中可以这样配置:
复制mybatis.configuration.map-underscore-to-camel-case=true # mybatis 别名扫描 mybatis.type-aliases-package=com.heima.pojo # mapper.xml文件位置,如果没有映射文件,请注释掉 mybatis.mapper-locations=classpath:mappers/*.xml
需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加@Mapper
注解,才能被识别。
复制@Mapper public interface UserMapper { }
通用mapper
通用Mapper
的作者也为自己的插件编写了启动器,我们直接引入即可:
复制<!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency>
注意:一但引入通用 Mapper 的启动器,会覆盖 Mybatis 官方启动器的功能。因此,需要移除对官方 Mybatis 启动器的依赖。
不需要做任何配置就可以使用了。如果还有其他需要,可以查看官网:https://github.com/abel533/Mapper/wiki
复制@Mapper public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{ }
另外,还需要在启动类上的 @MapperScan 注解修改为 通用Mapper
中自带的:
复制import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication @MapperScan("pers.stringbug.mapper") public class BootDemoApplication { public static void main(String[] args) { SpringApplication.run(BootDemoApplication.class, args); } }
启动测试
将controller进行简单改造:
复制@RestController public class HelloController { @Autowired private UserService userService; @GetMapping("/hello") public User hello() { User user = this.userService.queryById(8L); return user; } }
我们启动项目,查看:

参考文献
- 黑马 Java
本文来自博客园,作者:LeeHua,转载请注明原文链接:https://www.cnblogs.com/liyihua/p/14482520.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)