• Spring Boot


    概述

    Redis 是一个完全开源免费的、遵守BSD 协议的、内存中的数据结构存储,它既可以作为数据库,也可以作为缓存和消息代理。因其性能优异等优势,目前已被很多企业所使用,但通常在企业中我们会将其作为缓存来使用。Spring Boot 对 Redis也提供了自动配置的支持,接下来本小节将讲解如何在Spring Boot 项目中使用 Redis。

    添加 Redis 缓存

    1.添加 Redis 起步依赖

    <dependency><groupId>org.springframework. boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId
    <version>1.4.4.RELEASE</version></dependency>

    2.添加缓存注解

    
(1)在引导类 Application.java中,添加@EnableCaching注解开启缓存

    @SpringBootApplication
    @EnableCaching
     //开启缓存 
    public class Application {
        public static void main(String[] args)
{
         SpringApplication.run(Application.class, args) ;
    
      }
    }

    (2)@Cacheable 注解来支持缓字,添加后的实现代码如下:

    @Cacheable(value="UserCache",key="'user.getAllUsers'")
       public List<User> getAllUsers (){

       return this.userMapper.getAllUsers();
    }

    需要注意的是,@Cacheable 注解中的 key 属性值除了需要被英文双引号引用外,还需要加入英文单引号,否则系统在执行缓存操作时将出错。

    3.实现可序列化接口

    4.指定 Redis 缓存主机地址

    通常情况下,Redis 缓存与 Web 应用并非部署在一台机器上,此时就需要远程调用 Redis。

    application.properties

    spring.redis.host=192.168.2.100 

    spring.redis.port=63795

    5.启动项目,测试缓存使用

     清除 Redis 缓存


    Redis 中的缓存数据不会一直存在,当执行添加、更新和删除操作后,数据库中的数据会发生变化,而 Redis 缓存中的数据同样也需要进行相应的变化。为了保证Redis 缓存中的数据与数据库中的一致,通常需要在执行添加、更新和删除操作之前清除缓存,然后在下一次执行查询操作时,将新的数据存储到Redis 缓存中。

    使用@CacheEvict 注解

    //删除用户
    @CacheEvict(value="UserCache",key="'user.getAllUsers'")
    public void deleteUser(Integer id){
    
     this.userMapper.delete (id);
         
System.out.println("删除了id为"+id+"的用户");
    }

    Spring Boot与ActiveMQ的集成

    1.添加ActiveMQ起步依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>
    <!-- activemq -->
    <dependency>
        <groupId>org.apache.xbean</groupId>
        <artifactId>xbean-spring</artifactId>
        <version>3.16</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
        <version>${activemq.version}</version>
    </dependency>

     2.创建消息队列对象

    在 Application.java中编写一个创建消息队列的方法

           @Bean
         public Queue queue(){
            return new ActiveMQQueue("active.queue");
         }

    3.创建消息生产者

    /**
     * 消息队列控制器
     */
    @RestController
    public class QueueController {
    
       @Autowired
        private JmsTemplate jmsTemplate;
       @Autowired
        private Queue queue;
    
       public void send(){
           //指定消息发送的目的地及内容
           this.jmsTemplate.convertAndSend(this.queue,"新发送的消息!");
       }
    }

    4.创建消息监听者

    /**
     * 客户控制器接收器
     */
    @RestController
    public class CustomerController {
        /**
         * 监听和读取消息队列
         * @param message
         */
        @JmsListener(destination = "active.queue")
        public  void  readActiveQueue(String message){
            System.out.println("接收到:"+message);
        }
    }

    @JmsListener是 Spring 4.1所提供的用于监听 JMS消息的注解,该注解的属性 destination 用于指定要监听的目的地。本案例中监听的是 active.queue中的消息。

    5.启动项目,测试应用

    打包部署

    WAR包

    
虽然通过Spring Bot 内嵌的Tomcat 可以直接运行所打的JAR包,但是有时候我们也会希望通过外部的Tomcat来管理多个项目。由于JAR包在Tomcat 中是无法运行的,所以我们需要将项目打成WAR包的形式
要想将项目打成 WAR包,并可以在Tomcat 中运行,需要执行以下两个步骤。
1.修改打包方式,并添加Tomcat 依赖
将项目 pom.xml 中<packaging>元素内的 jar修改为 war,并在文件中添加Tomcat 的依赖配置。其修改和添加的配置信息如下:

         <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope></dependency>

    上述配置代码中,spring-boot-starter-tomcat 是 Spring Boot自带的Tomcat依赖,默认会被打到项目的 lib包中。当我们将其依赖范围设置为 provided 时,将产生一个可执行的WAR包,在包中的lib-provided目录会有 provided 依赖。这样不仅可以部署到 Servlet 容器启动项目,还可以通过命令行执行java-jar命令来运行此应用。

    创建 SpringBootServletInitializer 子类,并覆盖其配置方法
要产生一个可部署的 war包,还需要提供一个SpringBootServletInitilizer子类,并覆盖它的configure()方法。通常我们可以采用两种方式:一是把应用的主类(引导类)修改为继承 SpringBootServletInitializer的类,并覆盖 contigure()方法;二是创建一个继承了SpringBootServletInitializer 的类,并覆盖 contigure()方法。以创建 SpringBootServletInitializer子类的方式为例,其子类实现代码如文件3-11所示。

    /**
     * web容器中进行部署
     *
     * @author miao
     */
    public class CocodeServletInitializer extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(CocodeApplication.class);
        }
    }
  • 相关阅读:
    关于树状数组区间最值
    Gym 100500B
    RQNOJ Bus
    关于加权的LIS问题
    vs tip1
    小常识
    我的魔方主力
    killer驱动
    从日升的mecha anime看mecha genre的衰退
    关于供给移动端的视频压制
  • 原文地址:https://www.cnblogs.com/sxw123/p/12819962.html
Copyright © 2020-2023  润新知