一, 简介
SpringBoot 自从问世以来, 以其方便的配置受到了广大开发者的青睐. 它提供了各种 starter 简化很多繁琐的配置. SpringBoot 整合 Druid,Mybatis 已经司空见惯, 在这里就不详细介绍了. 今天我们要介绍的是使用 SpringBoot 整合 Redis,ApacheSolr 和 SpringSession.
二, SpringBoot 整合 Redis
Redis 是大家比较常用的缓存之一, 一般 Redis 都会搭建高可用 (HA),Cluster 或者 Sentinel. 具体的搭建方法请参照 Redis 官方文档. 我们这里已 Sentinel 举例, 搭建 RedisSentinel 一般都是 3 个节点, Redis 的端口一般是 6379,Sentinel 的端口一般是 26379.
我们要使用 SpringBoot 整合 Redis, 首先要把对应的 Redis 的 starter 加入到 POM 中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
引入 jar 包以后, 我们直接在 application.properties 文件中, 添加 RedisSentinel 的配置即可完成整合.
- spring.redis.sentinel.master=mymaster
- spring.redis.sentinel.nodes=192.168.2.233:26379,192.168.2.234:26379,192.168.2.235:26379
- spring.redis.pool.max-active=1024
- spring.redis.pool.max-idle=200
- spring.redis.pool.min-idle=100
- spring.redis.pool.max-wait=10000
sentinel.master 是 master 的名称, 我们搭建 RedisSentinel 时使用的默认的名称 mymaster.
sentinel.nodes 是 sentinel 的节点, 注意是 sentinel 的节点, 不是 redis 的节点. 用 ip: 端口的格式, 多个节点用 "," 隔开.
下面则是一些连接池的信息:
pool.max-active: 最大活跃数
pool.max-idle: 最大空闲数
pool.min-idle: 最小空闲数
pool.max-wait: 最大等待时间
在程序中, 我们可以直接注入 redisTemplate, 对 Redis 进行操作
- @Autowired
- private StringRedisTemplate stringRedisTemplate;
至此, Redis 整合完了.
三, SpringBoot 整合 SpringSession
SpringSession 提供了集群 Session 的管理, 无需通过容器. 它可以接入不同的存储层, 例如: 数据库, Redis,MongoDB 等. 它可以和 SpringBoot 无缝结合.
首先, 我们将 SpringSession 引入到项目中, 在 POM 中加入如下配置:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</dependency>
然后在 application.properties 中指定一下 SpringSession 的存储类型:
spring.session.store-type=redis
这样就非常简单的整合了 SpringSession, 如果对 cookie 有特别的要求, 可以在项目中新建 cookie 的 Bean 来代替 SpringBoot 自动创建的 bean. 具体如下:
- @Bean
- public DefaultCookieSerializer cookieSerializer(){
- DefaultCookieSerializer cookie = new DefaultCookieSerializer();
- cookie.setCookieName("springboot_id");
- return cookie;
- }
上述的例子, 我们修改了 cookie 的名字. 如需修改其他属性, 请 set 相关的属性值.
四, SpringBoot 整合 Solr
ApacheSolr 是比较常见的搜索引擎, SpringBoot 也可以非常方便的整合 solr, 方便大家的开发. 具体的 ApacheSolr 的概念以及用法请自行查阅相关文档. 在搭建 solr 时, 我们一般都会借助 zookeeper 来搭建 SolrCloud, 以提高 Solr 的可用性. 在这里我们整理 SolrCloud.
首先我们引入 ApacheSolr 的 starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
在 application.properties 中, 添加 zookeeper 的信息, 如下:
spring.data.solr.zk-host=192.168.2.233:2181,192.168.2.234:2181,192.168.2.235:2181
多个 zookeeper 时, 用 "," 隔开.
这样, SpringBoot 整合 ApacheSolr 就完成了, 非常方便吧. 接下来我们就可以用 Spring-data 来访问 solr 了.
1, 编写自己的实体类对应 solr 返回的数据, 具体代码如下:
- @Setter@Getter
- @SolrDocument(solrCoreName = "xy_company")
- public class SolrCompany {
- @Field("id")
- private String id;
- @Field("companyName_txt")
- private String companyName;
- }
@Setter@Getter 这两个注解大家比较常见, 用于生成 get,set 方法.
@SolrDocument(solrCoreName = "xy_company"), 用于指定这个实体对应 solr 中的 core 或 collection,core 是单实例中的称呼, collection 是 SolrCloud 中的称呼, 意思大体一样.
@Field("id"), 用于指定对应 solr 中的字段.
2, 编写自己的存储层, 继承 SolrCrudRepository, 如下:
- public interface CompanyRepository extends SolrCrudRepository<SolrCompany,String> {
- List<SolrCompany> findByCompanyName(String companyName);
- }
这样, 这个存储层就可以访问 solr 了, 如果多个存储层共用一个实体, 可以写多个存储层, 继承不同 Repository, 具体请查阅 Spring-data.
3, 在自己的业务中, 使用 solr
- public List<SolrCompany> getCompanyByName(String companyName){
- return companyRepository.findByCompanyName(companyName);
- }
至此, SpringBoot 整合 Solr 就完成了, 很简单吧.
来源: https://yq.aliyun.com/articles/614428