SpringBoot快速入门 3

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SpringBoot快速入门

10 自动配置原理

  • META-INF\spring.fatories文件中定义了很多自动配置类;可以根据在pom.xml文件中添加的 启动器依赖自动配置组件 ctrl+shift+n 搜索spring.factories
  • 通过如下流程可以去修改application配置文件,改变自动配置的组件默认参数

11 使用Profile配置多种开发环境

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如 开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

11.1 功能

profile是用来完成不同环境下,配置动态切换功能

11.2 配置方式1

创建多个配置文件,在主配置文件中激活要使用的配置文件

application-dev.properties/yml 开发环境

application-test.properties/yml 测试环境

application-pro.properties/yml 生产环境

11.3 配置方式2

将不同环境的配置同时配置到一个yml文档中,称为(yml多文档方式).不同环境的配置使用—分割

11.4 profile激活方式

方式1

配置文件: 再配置文件中配置:spring.profiles.active=dev

请看配置方式1和配置方式2

方式2

虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev

方式3

命令行参数:java –jar xxx.jar –spring.profiles.active=dev

idea spring boot 指定yml配置文件启动

spring boot项目可为不同的环境配置相应的配置文件,如下图所示:

本地开发使用开发环境,idea启动开发环境配置如下:

1、点击Edoldlu Configrations

2、配置如下图

12 SpringBoot与整合其他技术

12.1 整合SpringMVC以及配置

修改Tomcat端口号

#tomcat端口
server:
  port: 80

静态资源存放目录

12.2 整合Mybatis

12.2.1 添加Mybatis的起步依

<!--mybatis起步依赖--> 
<dependency>    
    <groupId>org.mybatis.spring.boot</groupId>    
    <artifactId>mybatis-spring-boot-starter</artifactId>    
    <version>1.1.1</version> 
</dependency>

12.2.2 添加数据库驱动坐标

<!-- MySQL连接驱动 --> 
<dependency>    
    <groupId>mysql</groupId>    
    <artifactId>mysql-connector-java</artifactId> 
</dependency>

12.2.3 添加数据库连接信息

在application.properties中添加数据量的连接信息

#DB Configuration: 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test? useUnicode=true&characterEncoding=utf8 
spring.datasource.username=root 
spring.datasource.password=root

12.2.4 创建user表

-- ----------------------------- Table structure for `user` -- ---------------------------
DROP TABLE IF EXISTS `user`; 
CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `username` varchar(50) DEFAULT NULL,
    `password` varchar(50) DEFAULT NULL,
    `name` varchar(50) DEFAULT NULL,
    PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------- Records of user -- ---------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三'); 
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

12.2.5 创建实体Bean

public class User {    
    // 主键    
    private Long id;    
    // 用户名    
    private String username;    
    // 密码    
    private String password;    
    // 姓名    
    private String name;      
    //此处省略getter和setter方法 .. ..    
}

12.2.6 编写Mapper

@Mapper 
public interface UserMapper {    
    public List<User> queryUserList(); 
}

相同点

两个都是注解在Dao上

不同

@Reposoldluory需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。

@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。

注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中

12.2.7 配置Mapper映射文件

在src\main\resources\mapper路径下加入UserMapper.xml配置文件”

<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 
<mapper namespace="com.oldlu.mapper.UserMapper">    
       <select id="queryUserList" resultType="user">
           select * from user    
       </select> 
</mapper>

12.2.8 配置包扫描和配置文件映射

Properties

#spring集成Mybatis环境 #pojo别名扫描包 
mybatis.type-aliases-package=com.oldlu.domain 
#加载Mybatis映射文件 
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

12.2.9 编写测试Controller

@Controller 
public class MapperController {
    @Autowired    
    private UserMapper userMapper;
    @RequestMapping("/queryUser")    
    @ResponseBody    
    public List<User> queryUser(){        
        List<User> users = userMapper.queryUserList();        
        return users;    
    }
}

12.2.10 测试

12.2.11 集成MyBatis时遇到的问题

1.每一个Mapper类都需要写@Mapper注解,比较麻烦

解决办法


在启动类上加@MapperScan(“cn.oldlucast.demo.mapper”)//新增


表示启动的时候会扫描该包下面所有的mapper.java文件,这样就不需要在为每一个XXXMpaer.java文件添加注解@Mapper了


2.The server time zone异常


在配置文件的URL末尾追加参数&serverTimezone=UTC


3.报错:user找不到


问题原因:程序启动的时候没有扫描到User类


解决方案:修改配置文件type-aliases-package: cn.oldlucast.demo.domain


4.错误


maven错误


修改mavent的setting.xml 修改仓库的地址

12.3 整合Junoldlu

12.3.1 添加Junoldlu的起步依赖

<!--测试的起步依赖--> 
<dependency>    
    <groupId>org.springframework.boot</groupId>    
    <artifactId>spring-boot-starter-test</artifactId>    
    <scope>test</scope> 
</dependency>

12.3.2 编写测试类

package com.oldlu.test;
import com.oldlu.MySpringBootApplication; 
import com.oldlu.domain.User; 
import com.oldlu.mapper.UserMapper; 
import org.junoldlu.Test; 
import org.junoldlu.runner.RunWoldluh; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.test.context.junoldlu4.SpringRunner;
import java.util.List;
@RunWoldluh(SpringRunner.class) 
@SpringBootTest(classes = MySpringBootApplication.class) 
public class MapperTest {
    @Autowired    
    private UserMapper userMapper;
    @Test    
    public void test() {        
        List<User> users = userMapper.queryUserList();        
        System.out.println(users);    
    }
}

其中,SpringRunner继承自SpringJUnoldlu4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以

public final class SpringRunner extends SpringJUnoldlu4ClassRunner

@SpringBootTest的属性指定的是引导类的字节码对象

12.4 整合Redis

12.4.1 添加redis的起步依赖

<!-- 配置使用redis启动器 --> 
<dependency>    
    <groupId>org.springframework.boot</groupId>    
    <artifactId>spring-boot-starter-data-redis</artifactId> 
</dependency>

12.4.2 配置redis的连接信息

#Redis 
spring.redis.host=127.0.0.1 
spring.redis.port=6379

12.4.3 注入RedisTemplate测试redis操作

@RunWoldluh(SpringRunner.class) 
@SpringBootTest(classes = SpringbootJpaApplication.class) 
public class RedisTest {
    @Autowired    
    private UserReposoldluory userReposoldluory;
    @Autowired    
    private RedisTemplate<String, String> redisTemplate;
    @Test    
    public void test() throws JsonProcessingException {
        //从redis缓存中获得指定的数据
    String userListData = redisTemplate.boundValueOps("user.findAll").get();            //如果redis中没有数据的话        
        if(null==userListData){            
            //查询数据库获得数据            
            List<User> all = userReposoldluory.findAll();            
            //转换成json格式字符串            
            ObjectMapper om = new ObjectMapper();            
            userListData = om.wroldlueValueAsString(all);            
            //将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库            
            redisTemplate.boundValueOps("user.findAll").set(userListData);            
            System.out.println("===============从数据库获得数据===============");        
        }else{            
            System.out.println("===============从redis缓存中获得数据===============");        
        }
        System.out.println(userListData);
    }
}

13 SpringBoot启动流程

核心分为2个步骤

第一步: 创建SpringApplication对象

第二步: 调用SpringApplication对象的run方法启动同时返回当前容器上下文

分析流程

1.创建SpringApplication对象时会初始化Springboot容器


2.获取当前应用启动类型。原理:判断当前classpath是否有加载我们的servlet类返回servlet web启动方式


WebApplicationType有三种类型


a) REACTIVE 响应式WEB启动(Spring5.0新特性,基于NETTY)


b) NONE 不会嵌入WEB容器启动,如果需要将springboot项目放入外部服务器,则使用该种方式启动


c) SERVLET 基于WEB容器启动


3.setInoldluializers()方法读取SpringBoot包下麦呢的META-INF/spring.factories,获取到对应ApplicationContextInoldluializer装配到集合


4.setListeners()方法读取SpringBoot包下麦呢的META-INF/spring.factories,获取到对应ApplicationListiner装配到集合


5.mainApplicationClass获取当前运行的主函数。


6.调用SpringApplication的run方法实现启动


7.StopWatch stopWatch = new StopWatch(); 记录SpringBoot项目启动时间

13.1 常见错误

这里还要设置时区

目录
相关文章
|
监控 Java 应用服务中间件
SpringBoot3---核心特性---1、快速入门
SpringBoot3---核心特性---1、快速入门
|
Arthas 监控 Java
Arthas (阿尔萨斯)arthas-boot 方式安装及使用教程
Arthas (阿尔萨斯)arthas-boot 方式安装及使用教程
2668 0
|
8月前
|
JSON 测试技术 网络安全
Apifox工具让我的 Socket.IO 测试效率翻倍
用了 Apifox 测试 Socket.IO 后,我整个人都升级了!不仅操作简单到令人发指,功能还贼全面,真的是 提升开发效率的神器 !
|
5月前
|
Java API Nacos
OpenFeign与Nacos结合使用时获取服务提供者的真实IP地址的方法
最终,当服务调用一次次执行,数据一次次精准传递时,这个寻找真实IP地址的宝藏狩猎,就顺利完成了。这不单单是原创性的解决方案,更是创意性地结合了现代微服务技术,和你一起编织了这场寻宝之旅的冒险故事。
288 25
|
8月前
|
人工智能 自然语言处理 程序员
5个小妙招,通义灵码“一键治愈”你的代码问题
目前通义灵码支持 DeepSeek 满血版 V3 和 R1 模型,并内置 Qwen2.5-max 以及 QwQ-plus 模型,让研发体验焕新升级。
|
8月前
|
JSON 数据管理 Java
淘宝买家订单列表、订单详情、订单物流 API 接口全攻略
淘宝订单相关API接口是电商自动化的核心工具,提供订单数据管理和物流追踪功能。开发者可通过HTTP协议调用,支持Python、Java等语言,响应JSON格式数据。主要功能包括:订单列表查询、订单详情获取和物流轨迹追踪。申请流程:注册账号(c0b.cc/R4rbK2),创建应用并生成App Key,申请所需接口权限如taobao.trades.sold.get、taobao.trade.fullinfo.get等。
1340 7
|
存储 SQL 数据处理
数据库设计与管理的要点
在数据库设计和管理过程中,清晰的权限控制、数据处理逻辑、以及高效的查询优化,都是不可或缺的组成部分。
203 2
|
NoSQL Java 应用服务中间件
技术笔记:Profiles简介
技术笔记:Profiles简介
275 0
|
Java Maven Spring
SpringBoot项目创建失败或无法启动,启动报错时的常见问题及解决方案
文章列举了在IDEA中创建Spring Boot项目时可能遇到的常见问题及其解决方案,如项目不被识别为Maven项目、依赖未找到或报红、JDK版本不一致和POM文件中的Jar包下载失败等问题。
3960 0
SpringBoot项目创建失败或无法启动,启动报错时的常见问题及解决方案
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧