springBoot从零开始(第一章)

springBoot从零开始(第一章)

1.了解SpringBoot

1.1.什么是SpringBoot

SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品,SpringBoot用一些固定的方式来构建生产级别的spring应用。Spring Boot 推崇约定大于配置的方式以便于你能够尽可能快速的启动并运行程序。其实人们把Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。

1.2.SpringBoot的特点

Spring Boot 主要目标是:

  • 为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验 ,springboot是一种快速使用spring框架的简便的方式
  • 开箱即用(启动器starter-其实就是SpringBoot提供的一个jar包),但通过自己设置参数(.properties),即可快速摆脱这种方式。
  • 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等
  • 绝对没有代码生成,也无需 XML 配置。

更多细节,大家可以到官网查看。

2.搭建SpringBoot项目

2.1.创建工程

1)创建新工程,选择spring方式:
在这里插入图片描述

2)编写项目信息
在这里插入图片描述

3)勾选所需依赖
在这里插入图片描述

4)填写项目路径:
在这里插入图片描述

由于多次出现模板下载失败,所以我决定不用模板创建项目:
在这里插入图片描述

2.1.1.添加父工程坐标

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>

2.1.2.添加web启动器

为了让SpringBoot帮我们完成各种自动配置,我们必须引入SpringBoot提供的自动配置依赖,我们称为启动器。因为我们是web项目,这里我们引入web启动器:

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

2.1.3.定义启动类

在这里插入图片描述

启动类的意义:

我们发现特别的地方有两个:

  • 注解:@SpringBootApplication
  • run方法:SpringApplication.run()

我们分别来研究这两个部分。

@SpringBootApplication
在这里插入图片描述

这里重点的注解有3个:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

@SpringBootConfiguration用来声明当前类是SpringBoot应用的配置类

@EnableAutoConfiguration用来开启自动装配(通过run()方法创建META-INF/spring.factories文件下的工厂实例)
在这里插入图片描述

SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效

@ComponentScan用来扫描该类所在包及其子包。

2.1.4.SpringBoot的配置文件

springBoot的配置文件可以使用application.properties类型,还可以使用后缀名为:.yml或者.yaml的类型,也就是:application.yml或者application.yaml,其加载优先级为properties > yml > yaml

下面编写一个配置文件,并通过配置类去获取配置属性

1)编写配置文件(注意配置类中属性和层级之间都有空格),分别定义对象,数组,集合类型

user:
  name: 马可可
  age: 26
  mate:job: java工程师
  users:
    - 王五
    - 刘老根
    - 小白菜
  userList[0]:
    name: 张三
    age: 20
    mate:job: 无业
  userList[1]:
    name: 李四
    age: 21
    mate:job: 无业

2)编写User类(省略)

3)编写配置类

@Configuration//声明这是一个配置类
public class UserConfig {

    @Bean
    @ConfigurationProperties(prefix = "user")//引入配置文件
    public User user(){
        User user = new User();
        return user;
    }
}

4)编写controller类

@RestController
public class UserController {

    @Autowired
    private User user;

    @GetMapping("/user")
    public User user(){
        return user;
    }

}

5)启动启动类并访问localhost:8080/user
在这里插入图片描述

3.springBoot实践

3.1.日志控制

3.1.1.导入lombok依赖(需先安装lombok插件)
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
3.1.2.配置yml文件

指定日志输出级别:(可以指定到包)

logging:
  level:
    com.makeke: debug
3.1.3.controller层

在这里插入图片描述

3.2.端口配置(默认8080)

# 映射端口
server:
  port: 8090

3.3.访问静态资源

springBoot默认的静态资源路径为:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public

创建目录,并且添加一些静态资源:
在这里插入图片描述

访问静态资源:
在这里插入图片描述

3.4配置拦截器

在SpringBoot官方文档中有这么一段说明:

翻译:

如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer,并且添加@Configuration注解,但是千万不要@EnableWebMvc注解。如果你想要自定义HandlerMappingHandlerAdapterExceptionResolver等组件,你可以创建一个WebMvcRegistrationsAdapter实例 来提供以上组件。

如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@Configuration注解和@EnableWebMvc注解

总结:通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMvc配置。

首先定义一个拦截器:

@Slf4j
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("拦截前...");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.debug("拦截中...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.debug("拦截后...");
    }
}

定义配置类,注册拦截器:

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/hello").excludePathPatterns("/user");
    }
}

再次运行启动类:

结果:
在这里插入图片描述

3.5.持久层框架

springBoot可以通过整合JDBC或者整合mybatis实现数据库交互,只需要引入相应启动器即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
<!--mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.1</version>
</dependency>

但是通用mapper和mybatis-plus这两个持久层框架使用起来更方便(对mybatis做了进一步封装)

3.5.1.通用mapper

1)引入通用mapper启动器:

<!-- 通用mapper -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

2)启动器上加上@mapperScan包扫描注解

@SpringBootApplication
@MapperScan("com.makeke.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

3)编写controller层和service层

    @GetMapping("/user/{id}")
    public User selectById(@PathVariable("id") String id){
        return service.selectById(id);
    }
@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserMapper mapper;

    @Override
    public User selectById(String id) {

        return mapper.selectByPrimaryKey(id);
    }
}

4)mapper接口继承Mapper

public interface UserMapper extends Mapper<User> {
}

5)实体类:

@Data
@Table(name = "user")
public class User {

    @Id
    @KeySql(useGeneratedKeys = true)//开启自增主键回显功能
    private String id;
    private String name;
    private String age;
    private String mate;
    private String job;
    private List<User> userList;
    private String[] users;
}

6)配置数据库连接参数

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/makeke?characterEncoding=utf-8
    username: root
    password: root

7)测试
在这里插入图片描述

3.5.2. MyBatis-plus

myBatis-plus使用步骤类似通用mapper,导入启动器mybatis-plus-boot-starter,继承BaseMapper,DTO类上注解稍有不同@TableName@TableId,@TableField

3.6springBoot整合rabbitMQ

3.6.1安装rabbitMQ(windos环境)
  1. RabbitMQ基于Erlang语言开发,所以先安装Erlang环境(自行下载)

2)官网下载rabbitMQ

3)进入sbin文件夹下输入命令启动MQ

rabbitmqctl start_app

在这里插入图片描述

4)开启web控制台的访问

rabbitmq-plugins enable rabbitmq_management

5)使用以下命令查看能使用的用户名和密码

rabbitmqctl list_users

6)访问http://127.0.0.1:15672/

在这里插入图片描述

7)新建用户

在这里插入图片描述

8)创建Virtual Hosts并且分配权限

在这里插入图片描述

在这里插入图片描述

3.6.2.创建发送方项目 rabbitMq-producer

1)添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        
    </dependencies>

2)配置文件

spring:
  rabbitmq:
    host: 127.0.0.1
    username: makeke
    password: Make8178248.
    virtual-host: /makeke

3)创建引导类

3.6.3创建消费方项目 rabbitMq-consumer

1)添加依赖(同发送方)

2)配置文件(同发送方)

3)编写监听消费类

@Component
public class CustomerListener {

    @RabbitListener(bindings =@QueueBinding(
            value = @Queue("springBoot-queue"),
            exchange = @Exchange(name = "test.exchange",type = ExchangeTypes.TOPIC),
            key = "#.#"
    ))
    public void handle(String msg){
        System.out.println(msg);
    }
}

4)junit测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProducerTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void send(){
        rabbitTemplate.convertAndSend("test.exchange","a.b","MQ测试消息");
    }
}

ringBoot-queue"),
exchange = @Exchange(name = “test.exchange”,type = ExchangeTypes.TOPIC),
key = “#.#”
))
public void handle(String msg){
System.out.println(msg);
}
}


4)junit测试

```java
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProducerTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void send(){
        rabbitTemplate.convertAndSend("test.exchange","a.b","MQ测试消息");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大王叫我来打死程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值