SpringBoot基础知识和项目搭建

SpringBoot概述
背景
  • Springboot使用的是(约定大于配置)(项目中存在大量的配置,此外还内置一些习惯性配置,大大减少我们的工作量。使用springboot可以很容易创建一个独立运行(运行jar,内嵌servlet容器)、准生产级的基于spring框架的项目,使用springboot我们可以不用甚至只需要很少的spring配置

  • 特点

    • 创建独立的Spring应用程序
    • 嵌入的Tomcat,无需部署WAR文件
    • 简化Maven配置
    • 自动配置Spring
    • 提供生产就绪型功能,如指标,健康检查和外部配置
    • 绝对没有代码生成并且对XML也没有配置要求
    • 配置理念:零配置文件,基于注解和JavaConfig暴露bean
  • 优点

    • 快速构建项目
    • 对主流框架无缝集成
    • 项目可以独立运行,无需依赖外部servlet容器
    • 提供运行时的应用监控
    • 极大提高了开发,部署效率
    • 与Docker容器等集成方便
环境搭建
  • 自动搭建
    • 利用https://start.spring.io/ 可以直接生成demo代码
    • 利用idea中自带的工具进行项目构建
手动搭建
  • 建议标准maven项目,添加springboot父依赖
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.21.RELEASE</version>
        <relativePath/>
    </parent>
  • 根据要构建的项目,添加模块依赖
         <!--
            Web模块 springboot中会将所有的相关依赖一起添加
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--
            热部署插件  自动刷新用
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
  • 建立项目启动类(用于启动整体的springboot项目)
  • @SpringBootApplication除了有基础的注释,还包含了3个额外的注释
    • SpringBootConfiguration:继承了@Configuration,相当于Spring配置中的beans节点
    • EnableAutoConfiguration:允许Spring容器根据声明的bean进行依赖注入
    • ComponentScan:相当于原来配置文件中指定的要扫描的包的路径
@SpringBootApplication(scanBasePackages = "com.ck")
public class Starter {

    public static void main (String[] args){

        SpringApplication.run(Starter.class,args);

    }
}
  • 项目中所有的配置信息都配置在唯一的配置文件中application.properties或者application.yaml
  • 具体配置参考配置项大全
集成JSP
  • 添加依赖
    <dependency>
      		<groupId>org.apache.tomcat.embed</groupId>
      		<artifactId>tomcat-embed-jasper</artifactId>
      	</dependency>
      	<dependency>
      		<groupId>javax.servlet</groupId>
      		<artifactId>javax.servlet-api</artifactId>
      	</dependency>
      	<dependency>
      		<groupId>javax.servlet</groupId>
      		<artifactId>jstl</artifactId>
      	</dependency>
    
    
    • 创建webapp目录(也可以一起创建WEB-INF目录)
    • 编写jsp页面
      • 如果要以逻辑视图名返回来作为转发操作,则需要配置视图解析器
#视图解析器
#前缀
spring.mvc.view.prefix=/WEB-INF/jsp/
#后缀
spring.mvc.view.suffix=.jsp

集成DRUID数据源
  • 对于SpringBoot中提供的xxx-starter依赖,对于依赖中的某些JavaBean对象,SpringB oot会根据导入依赖,对这些所需要的对象进行自动创建
  • 但是如果对于某些Bean对象,SpringBoot没有提供其对应的starter依赖,则这些Bean对象需要手动进行创建(可以通过JavaConfig创建,也可以定义XML,通过注解引入)
  • DRUID我们就使用JavaConfig来配置
  • 添加依赖
<!--
    DRUID
 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.8</version>
</dependency>
<!--
    MySQL驱动
-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

  • 配置连接池参数
  • 添加一个DRUID配置类
    • 通过JavaConfig的方式来配置Druid数据源
    • @Configuration 相当于在beans节点中添加了bean的定义
    • @Bean 法的返回结果就相当于一bean对象
    • @ConfigurationProperties 找到所有匹配的前缀后面的配置项的名字
/**
 * 通过JavaConfig的方式来配置Druid数据源
 */
//相当于在beans节点中添加了bean的定义
@Configuration
public class DruidConfig {
    //相当于bean节点,一般将其写在方法上
    //方法执行完毕以后,方法的返回结果就相当于一bean对象
    //注册到了Spring容器中
    @Bean
    //方法执行完毕以后会得到一个DruidDataSource对象
    //但是对象中的属性尚未赋值
    //通过@ConfigurationProperties注解,找到所有匹配的前缀后面的配置项的名字
    //到bean对象中寻找 set+配置项 的set方法,将属性值通过set注入注入到实例中
    //此时就完成了数据源对象的初始化操作
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource initDataSource() {
        //通过Java代码创建数据源对象
        DruidDataSource ds = new DruidDataSource();
        return ds;
    }
}

集成MyBatis
  • 添加依赖
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

  • 指定映射文件所在的路径
    • mybatis.mapper-locations=classpath:mapper/*.xml
  • 需要指定mapper接口所在的路径
    • 此处需要将注解加载starter中 @MapperScan(“com.sy.mapper”)
  • 配置一些MyBatis的框架参数:别名、缓存、下划线和驼峰之间的映射
    • mybatis.type-aliases-package=com.sy.entity
集成Redis
  • 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
    <version>1.4.3.RELEASE</version>
</dependency>

  • 添加redis的配置信息
#redis的相关配置
#主机
spring.redis.host=192.168.174.101
#端口
spring.redis.port=6379
#默认数据库
spring.redis.database=0
#密码
#spring.redis.password=
#连接池参数
spring.redis.pool.max-idle=20
spring.redis.pool.min-idle=1
spring.redis.pool.max-active=20
spring.redis.pool.max-wait=60000

  • 配置RedisTemplate
    • RedisConnectionFactory对象在引入依赖的时候已经自动创建了
    • 此处相当于从容器中自动将其注入到方法参数中
@Configuration
public class RedisConfig {

    /**
     * RedisConnectionFactory对象在引入依赖的时候已经自动创建了
     * 所以此处相当于从容器中自动将其注入到方法参数中
     */
    @Bean
    public RedisTemplate getRedisTempalte(RedisConnectionFactory connectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}


  • 在Spring中要使用RedisTemplate来操作Redis
@RequestMapping(value = "redis", method = RequestMethod.GET)
public String redis() {
    Boolean result = (Boolean) redisTemplate.execute(new RedisCallback<Boolean>() {
        @Override
        public Boolean doInRedis(RedisConnection con) throws DataAccessException {
            con.set("name".getBytes(), "Tom".getBytes());
            return true;
        }
    });
    System.out.println(result);
    return "hello";
}

集成拦截器
  • 写拦截器类
    • 对于拦截器、过滤器、监听器、跨域访问一系列和web相关的内容都可以在一个配置类中完成,这个配置类需要实现WebMvcConfigurer 接口
  • 在实现WebMvcConfigurer 接口的配置类中添加拦截器的配置
    • 可以在这个方法中注册多个拦截器,拦截器中的拦截路径和排除路径都是变长参数。
      拦截顺序按照注册顺序来
@Override
public void addInterceptors(InterceptorRegistry registry) {
    //在此处注册拦截器
    registry.addInterceptor(new MyInterceptor01()).addPathPatterns("/**").excludePathPatterns("/hello02");
}

文件上传
  • 添加文件上传相关的参数(这里就会开始对文件上传组件进行实例化)
  • 其他操作相同
#单个文件的最大大小
spring.http.multipart.max-file-size=1024Mb
#请求时所有文件加起来的最大大小
spring.http.multipart.max-request-size=2028Mb

跨域访问

在实现WebMvcConfigurer 接口的配置类中配置即可

public void addCorsMappings(CorsRegistry registry) {
    //设定跨域
registry.addMapping("/**").allowedMethods("*").allowedOrigins("*").allowedHeaders("*").allowCredentials(true);
}

过滤器、监听器
  • 编辑过滤器和监听器
  • 在实现WebMvcConfigurer 接口的配置类中配置即可
通过@Bean注解暴露出来
 /**
     * 配置过滤器
     */
    @Bean
    public FilterRegistrationBean addFilter01() {
        FilterRegistrationBean regist = new FilterRegistrationBean();
        regist.setFilter(new Filter01());
        regist.addUrlPatterns("/*");
        //初始化参数
//        regist.setInitParameters();
        //过滤器的过滤顺序
        //优先级:值越小,优先级越高
        //regist.setOrder();
        return regist;
    }

    /**
     * 配置监听器
     */
    @Bean
    public ServletListenerRegistrationBean addListener() {
        ServletListenerRegistrationBean listener = new ServletListenerRegistrationBean();
        listener.setListener(new MyContextListener());
        return listener;
    }

异常处理器
  • 同SpringMVC中的配法
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
                                         Exception ex) {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("500");
        mv.addObject("errMsg", ex.getMessage());
        return mv;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值