SpringBoot实战

(一) 基础配置

1、配置数据库连接池

① 添加依赖:MySQL驱动

<dependency>
	<groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

② 自动配置方式

四要素在 application.properties 中填写

spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///rbac?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=admin

默认连接池:Hikari,修改成 Druid

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.21</version>
</dependency>

2、集成MyBatis

① 添加依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>

② 配置Mapper对象

扫描 Mapper 接口只要在配置类(启动类)上贴个注解  @MapperScan  并指定扫描的包路径即可;

@SpringBootApplication
@MapperScan("cn.qyw.mapper")
public class SsmApplication {
  public static void main(String[] args) {
    SpringApplication.run(SsmApplication.class, args);
  }
}

③ 配置属性

在 application.properties 配置以前在 XML 配置了的那些 MyBatis 的属性,属性前缀 mybatis。

# 配置别名
mybatis.type-aliases-package=cn.wolfcode.domain
# 打印 SQL 日志
logging.level.cn.wolfcode.mapper=trace

3、事务管理

① 配置依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

② XML方式(了解)

采取配置类和 XML 混用的策略,在配置类上使用 @ImportResource("classpath:spring-tx.xml")。

③ 注解方式

直接在业务层实现类上或者其方法上直接贴 @Transactional 注解即可。Spring Boot 自动配置中提供了 TransactionAutoConfiguration 事务注解自动配置类,引入了事务的依赖后,可直接使用 @Transactional 注解。

④ 配置代理实现

Spring Boot 默认优先选择 CGLIB 代理,如果需要改为优先使用 JDK 代理,需要做以下配置:

spring.aop.proxy-target-class=false

⑤ 测试验证

在测试类上添加方法,打印业务对象看下其真实类型。

@Test
public void testSave() {
    System.out.println(departmentService.getClass());
}

4、集成Web

① 添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

② 修改端口

在application.properties中配置

server.port=80

③ 静态资源处理*

static:存放静态资源 ,相当于webapp的根目录,【css、js...】

templates:存放模板文件

默认情况下,SpringBoot会从 classpath 下的 /static,/public,/resource,/META-INF/resource下加载静态资源;

可以在 application.properties 中配置 spring.resources.staticLocations 属性来修改静态资源加载地址。

spring.resources.static-locations=静态资源加载地址

因为应用是打成 jar 包,所以之前的 src/main/webapp 就作废了,如果有文件上传,那么就的必 须去配置图片所在的路径

# 告诉 Spring Boot 什么访问的路径是找静态资源
spring.mvc.static-path-pattern=/static/**

④ 前端控制器映射路径配置

在 Spring Boot 自动配置中,WebMvcAutoConfiguration 自动配置类导入了DispatcherServletAutoConfiguration 配置对象,会自动创建 DispatcherServlet 前端控制器,默认的映射路径是 /,Spring Boot 多数用于前后端分离和微服务开发,默认支持 RESTFul 风格,所以一般都是使用默认的即可,不做改动。

# Thymelea 模板配置  默认不配置
spring.mvc.pathmatch.use-registered-suffix-pattern=true

5、集成 Thymeleaf

① 添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

② 相关配置

# Thymelea 模板配置
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
# 热部署文件,页面不产生缓存,及时更新
spring.thymeleaf.cache=false

③ 修改模板文件

使用Thymeleaf 的语法替换之前 JSP 中的 EL 表达式和 JSTL;

(二) 优化配置

6、统一异常处理

(1) 框架自带

我们需要在resources/static 或 template 文件下创建一个error的文件夹的文件夹 ,放入自己准备好的错误页面;

Spring Boot 默认情况下,会把所有错误都交给 BasicErrorController 类完成处理,错误的视图导向到 classpath:/static/error/ 和 classpath:/templates/error/ 路径上,HTTP 状态码就是默认视图的名称。如: 出现 404 错误 -> classpath:/static/error/404.html 出现 5xx 错误 -> classpath:/static/error/5xx.html

(2) 控制器增强

除了404,还有5XX,用框架的无法个性化的处理,我们可以定义一个控制器增强器,专门用于统一异常处理,针对5xx类错误,做到针对错误异常进行差异化处理; ​ 在 web/advice中创建一个增强类处理异常;

@ControllerAdvice
public class ExceptionControllerAdvice {
    // 处理服务器异常的方法(类似处理方法,String ModelView 自定义类型)
    @ExceptionHandler(RuntimeException.class) // 表示什么异常交给下面这个方法处理
    // HandlerMethod Spring MVC 对处理方法封装的类,访问哪个处理方法处理异常,handlerMethod 就是谁
    public String handException(RuntimeException e, Model model, HandlerMethod handlerMethod) {
        e.printStackTrace(); // 在控制台打印错误信息
        System.out.println("handlerMethod = " + handlerMethod);
        model.addAttribute("msg",e.getMessage());
        return "404"; // 指定错误页面视图名称
    }

    @ExceptionHandler(ArithmeticException.class) // 表示什么异常交给下面这个方法处理
    @ResponseBody
    public JsonResult handleException01(ArithmeticException e){
        JsonResult jsonResult = new JsonResult(); // 错误信息以 JSON 格式返回
        jsonResult.setSuccess(false);
        jsonResult.setMsg(e.getMessage());
        return jsonResult;
    }
}

7、添加拦截器 *

① 编写拦截器

让 Spring 管理拦截器 bean 对象,在拦截器类上贴  @Component 注解,一般放在 web/interceptor文件内;可重写三个方法:

preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器; 返回值:true表示继续流程(如调用下一个拦截器或处理器); false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我 们需要通过response来产生响应;

postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过 modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView 也可能为null。

afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录 结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中finally, 但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。

@Component
public class HelloInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("留个脚印");
        return true;
    }

② 配置定义拦截器

定义一个配置类,实现 WebMvcConfigurer 接口,在 addInterceptors 方法注册拦截器。

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Autowired
    private HelloInterceptor helloInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        		// 注册登录拦截器
        registry.addInterceptor(helloInterceptor)
            	// 对哪些资源起过滤作用
                .addPathPatterns("/**")
          		// 对哪些资源起排除作用
                .excludePathPatterns("/static/**");
    }
}

8、系统日志

日志数据不仅可以在控制台显示,还可以存入文件、数据库中,为了方便在日后维护中找到问题; ​ 日志级别由低到高 trace < debug < info < warn < error 。如果设置的级别为 info,则 debug 以及 trace 级别的都无法显示;

(1) 输出日志方式

① Logger对象

@Service
public class EmployeeServiceImpl implements EmployeeService {
    
    @Autowired
    private EmployeeMapper employeeMapper;
    private static final Logger logger = 
        LoggerFactory.getLogger(EmployeeServiceImpl.class); // 用的少
    
    @Override
    @Transactional
    public void delete(Long id) {
        logger.trace("id = " + id);
        // 输出日志中有变量可以使用 {} 作为占位符
		log.info("删除id为{}的数据", id);
        employeeMapper.deleteByPrimaryKey(id);
    }

② 注解

@Slf4j      log

@Slf4j
@Service
public class DepartmentServiceImpl implements DepartmentService {
    
    @Override
    public PageResult<Department> data(QueryObject qo) {
        log.trace("当前对象:{} {}", qo.getPageSize(), qo.getCurrentPage());
        log.debug("当前对象:{} {}", qo.getPageSize(), qo.getCurrentPage());
        log.info("当前对象:{} {}", qo.getPageSize(), qo.getCurrentPage());
    }

(2) 修改级别

默认是info级别,若要修改日志级别,最快速的方式是在 application.properties 配置,配置如下

# 把日志级别修改为 debug,不过我们一般不会更改,除非要调试找 bug,不然控制台显示的内容太多也容易乱
logging.level.root=debug

(3) 修改格式

Logback 配置文件的使用 ​ Logback 框架默认会自动加载 classpath:logback.xml,作为框架的配置文件,在 Spring Boot 中使用时,还会额外的支持自动加载classpath:logback-spring.xml,在 Spring Boot 中推荐使用 logback-spring.xml,功能更强大些。需要时百度即可;

9、其他功能

(1) 修改 banner

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

# 关闭banner
spring.main.banner-mode=off

(2) 热部署插件

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

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

Spring Boot 重启是 reload 重启,通过监控 classpath 的变化,如果 classpath 中的文件发生变化,即 触发重启。Spring Boot 通过两个 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

(3) 切换运行环境

在实际开发中,一个系统是有多套运行环境的,如开发时有开发的环境,测试时有测试的环境,不同的

环境中,系统的参数设置是不同的,如:连接开发数据和测试数据库的 URL 绝对是不同的,那么怎么 快速的切换系统运行的环境呢?我们需要为不同的环境创建不同的配置文件,如下:

# application-dev.properties
server.port=8081
# application-test.properties
server.port=8082
# 在 application.properties 中指定需要使用的环境即可
spring.profiles.active=dev

 

SpringBoot实战(第4版)清晰文字版,第 1 章 入门 ................................................ 1 1.1 Spring 风云再起 ........................................ 1 1.1.1 重新认识 Spring ............................ 2 1.1.2 Spring Boot 精要 ........................... 3 1.1.3 Spring Boot 不是什么 ................... 6 1.2 Spring Boot 入门 ....................................... 6 1.2.1 安装 Spring Boot CLI .................... 7 1.2.2 使用 Spring Initializr 初始化 Spring Boot 项目 .......................... 10 1.3 小结 ......................................................... 18 第 2 章 开发第一个应用程序 .................... 19 2.1 运用 Spring Boot ..................................... 19 2.1.1 查看初始化的 Spring Boot 新项目 .......................................... 21 2.1.2 Spring Boot 项目构建过程 解析 .............................................. 24 2.2 使用起步依赖 .......................................... 27 2.2.1 指定基于功能的依赖 ................... 28 2.2.2 覆盖起步依赖引入的传递依赖 .... 29 2.3 使用自动配置 .......................................... 30 2.3.1 专注于应用程序功能 ................... 31 2.3.2 运行应用程序 .............................. 36 2.3.3 刚刚发生了什么 ........................... 38 2.4 小结 ......................................................... 41 第 3 章 自定义配置 .................................... 42 3.1 覆盖 Spring Boot 自动配置 ..................... 42 3.1.1 保护应用程序 .............................. 43 3.1.2 创建自定义的安全配置 ............... 44 3.1.3 掀开自动配置的神秘面纱 ........... 48 3.2 通过属性文件外置配置 ........................... 49 3.2.1 自动配置微调 .............................. 50 3.2.2 应用程序 Bean 的配置外置 ......... 55 3.2.3 使用 Profile 进行配置 .................. 59 3.3 定制应用程序错误页面 ........................... 62 3.4 小结 ......................................................... 64 第 4 章 测试 ............................................... 66 4.1 集成测试自动配置 .................................. 66 4.2 测试 Web 应用程序 ................................. 68 4.2.1 模拟 Spring MVC ........................ 69 4.2.2 测试 Web 安全 ............................. 72 4.3 测试运行中的应用程序 ........................... 74 4.3.1 用随机端口启动服务器 ............... 75 4.3.2 使用 Selenium 测试 HTML 页面 ............................................. 76 4.4 小结 ......................................................... 78 第 5 章 Groovy 与 Spring Boot CLI ......... 80 5.1 开发 Spring Boot CLI 应用程序 .............. 80 5.1.1 设置 CLI 项目 .............................. 81 5.1.2 通过 Groovy 消除代码噪声 ......... 81 5.1.3 发生了什么 .................................. 85 5.2 获取依赖 .................................................. 86 5.2.1 覆盖默认依赖版本 ....................... 87 5.2.2 添加依赖仓库 .............................. 88 5.3 用 CLI 运行测试 ...................................... 89 5.4 创建可部署的产物 .................................. 91 5.5 小结 ......................................................... 91 第 6 章 在 Spring Boot 中使用 Grails ...... 93 6.1 使用 GORM 进行数据持久化 ................. 93 2 目 录 6.2 使用 Groovy Server Pages 定义视图 ....... 98 6.3 结合 Spring Boot 与 Grails 3 ................. 100 6.3.1 创建新的 Grails 项目 ................. 100 6.3.2 定义领域模型 ............................ 103 6.3.3 开发 Grails 控制器 ..................... 104 6.3.4 创建视图 .................................... 105 6.4 小结 ....................................................... 107 第 7 章 深入 Actuator .............................. 108 7.1 揭秘 Actuator 的端点 ............................ 108 7.1.1 查看配置明细 ............................ 109 7.1.2 运行时度量 ................................ 115 7.1.3 关闭应用程序 ............................ 121 7.1.4 获取应用信息 ............................ 121 7.2 连接 Actuator 的远程 shell .................... 122 7.2.1 查看 autoconfig 报告 ........... 123 7.2.2 列出应用程序的 Bean ............... 124 7.2.3 查看应用程序的度量信息 ......... 124 7.2.4 调用 Actuator 端点 .................... 125 7.3 通过 JMX 监控应用程序 ....................... 126 7.4 定制 Actuator......................................... 128 7.4.1 修改端点 ID ............................... 128 7.4.2 启用和禁用端点 ........................ 129 7.4.3 添加自定义度量信息 ................. 129 7.4.4 创建自定义跟踪仓库 ................. 132 7.4.5 插入自定义健康指示器 ............. 134 7.5 保护 Actuator 端点 ................................ 136 7.6 小结 ....................................................... 138 第 8 章 部署 Spring Boot 应用程序 ........ 139 8.1 衡量多种部署方式 ................................ 139 8.2 部署到应用服务器 ................................ 140 8.2.1 构建 WAR 文件 ......................... 141 8.2.2 创建生产 Profile ........................ 142 8.2.3 开启数据库迁移 ........................ 145 8.3 推上云端 ............................................... 150 8.3.1 部署到 Cloud Foundry ............... 150 8.3.2 部署到 Heroku ........................... 153 8.4 小结 ....................................................... 155 附录 A Spring Boot 开发者工具.............. 157 附录 B Spring Boot 起步依赖 ................. 163 附录 C 配置属性 ...................................... 169 附录 D Spring Boot 依赖 ......................... 202
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值