【SpringBoot系列4】SpringBoot定制自己的bean
起因:SpringBoot我是越用越喜欢,但当SpringBoot出了问题的时候,我却无从下手,因为封装实在是太高度化了。然后之前有一个需求,使用SpringBoot提供的StringRedisTemplate,我想定制里面几个属性。如下面代码。
private boolean enableTransactionSupport = false;
private boolean exposeConnection = false;
private boolean initialized = false;
private boolean enableDefaultSerializer = true;
private @Nullable RedisSerializer<?> defaultSerializer;
private @Nullable ClassLoader classLoader; @SuppressWarnings("rawtypes") private @Nullable RedisSerializer keySerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer valueSerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashKeySerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashValueSerializer = null;
private RedisSerializer<String> stringSerializer = new StringRedisSerializer(); private @Nullable ScriptExecutor<K> scriptExecutor; // cache singleton objects (where possible)
private @Nullable ValueOperations<K, V> valueOps;
private @Nullable ListOperations<K, V> listOps;
private @Nullable SetOperations<K, V> setOps;
private @Nullable ZSetOperations<K, V> zSetOps;
private @Nullable GeoOperations<K, V> geoOps;
private @Nullable HyperLogLogOperations<K, V> hllOps;
但我每次使用都是直接autowire注入进去的,然后注入进去并不能set & get 来修改属性,这高度封装就产生了一个问题。像之前用Spring,在xml文件配置一下即可,但SpringBoot呢?
方法一:
以最常见的DataSource数据库为例。一般注入DataSource直接在application.properties配置一下数据源即可以使用,返回的为SpringBoot默认的数据源,号称史上最快的HikariDataSource。但假设我想修改里面的配置如何?比如为连接池起一个名字?
package com.config; import javax.sql.DataSource; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource; @Configuration
public class DataSourceConfig { @Bean
public DataSource getDataSource() { HikariConfig config = new HikariConfig();
config.setUsername("name");
config.setPassword("pass");
config.setJdbcUrl("url");
//测试
config.setPoolName("do you see me"); return new HikariDataSource(config);
}
}
直接新建立一个DataSourceConfig类,然后加上@Configuration注解。最后再写一个方法,方法名亲测可以随便。加上@Bean注解,然后SpringBoot就会自动加载这个配置类了。你就可以定制自己喜欢的属性了。
ps。这里有一个疑问,SpringBoot如何知道这个Bean是配置的数据源呢?方法名亲测可以胡乱改的,难道根据返回的值?请大神指教。
方法二:
假设你想在配置文件里面配置好变量,然后在类中直接使用已经定义好的变量。这样比较好维护。
package com.redis; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; @Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisConfig { private String host;
private int port;
private String password; /**
* timeout 3000毫秒
* @return
* 2018年5月21日
*/
@Bean
public JedisPool getJedisPool() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(1000);
config.setMaxIdle(1000);
config.setMaxWaitMillis(3000);
JedisPool pool = new JedisPool(config, host, port, 3000 ,password);
return pool;
} }
注解变为@ConfigurationProperties,定义好直接使用即可,方便得很。
【SpringBoot系列4】SpringBoot定制自己的bean的更多相关文章
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
前言 由于在开发My Blog项目时使用了大量的技术整合,针对于部分框架的使用和整合的流程没有做详细的介绍和记录,导致有些朋友用起来有些吃力,因此打算在接下来的时间里做一些基础整合的介绍,当然,可能也 ...
- SPRING-BOOT系列之SpringBoot快速入门
今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...
- SPRING-BOOT系列之SpringBoot的诞生及其和微服务的关系
转载自 : https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法 ...
- SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣
在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ...
- SpringBoot系列教程之Bean之指定初始化顺序的若干姿势
上一篇博文介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢? 本文将介绍几种可行的方式来控制 bean 之间 ...
- 补习系列(14)-springboot redis 整合-数据读写
目录 一.简介 二.SpringBoot Redis 读写 A. 引入 spring-data-redis B. 序列化 C. 读写样例 三.方法级缓存 四.连接池 小结 一.简介 在 补习系列(A3 ...
- 补习系列(11)-springboot 文件上传原理
目录 一.文件上传原理 二.springboot 文件机制 临时文件 定制配置 三.示例代码 A. 单文件上传 B. 多文件上传 C. 文件上传异常 D. Bean 配置 四.文件下载 小结 一.文件 ...
- SpringBoot系列: RestTemplate 快速入门
====================================相关的文章====================================SpringBoot系列: 与Spring R ...
- SpringBoot系列(五)Mybatis整合完整详细版
SpringBoot系列(五)Mybatis整合 目录 mybatis简介 项目创建 entity dao service serviceImpl mapper controller 1. Mybat ...
- 补习系列(15)-springboot 分布式会话原理
目录 一.背景 二.SpringBoot 分布式会话 三.样例程序 四.原理进阶 A. 序列化 B. 会话代理 C. 数据老化 小结 一.背景 在 补习系列(3)-springboot 几种scope ...
随机推荐
- RxSwift学习笔记5:Binder
使用 Binder 创建观察者 //Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval ...
- [javascript-debug-ajax-json]两种不同的json格式数据
Bug 1: 1. 这里面的 data 只是一维数组{"state":0,"errorCode":0,"data":{"origi ...
- Android-Kotlin-抽象类与多态的表现
选择包名,然后右键: 选择Class类型,会有class: 选择File类型,不会自动有class: 目录结构: 定义描述抽象类 Person人类: package cn.kotlin.kotlin ...
- 转:iOS9的新特性以及适配方案
2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送. 新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了 ...
- Windows安装配置docker
如果是win10的,请在https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows 下载Stable ...
- 利用 LibWebP-NET 解码与编码 WebP 格式图片
此文以后将会在我的新博客更新,有任何疑问可在我的新博文中提出 https://blog.clso.fun/posts/2019-03-02/vb-net-webp.html WebP 格式是谷歌开发并 ...
- 【.NET架构】BIM软件架构02:Web管控平台后台架构
一.前言 之前一篇叙述的是Revit插件(桌面软件)的软件架构,本篇将开始叙述Web项目的架构方案.今年一月在老东家加入BIM平台部门,为一些大型国家项目搭建BIM管控平台,业主使用管控 ...
- vs2017使用rdlc实现批量打印
接着上一篇:上一篇写了安装,这篇直接搞定批量打印,A4纸横版竖版页面设计,正式开始.(我的表达不怎么好,我尽量发图片都是程序员一点就通) 一.界面展示 忽略界面设计丑 查看预览界面,因为有数据就不截全 ...
- 常用下载方式的区别-BT下载、磁力链接、电驴
出处:https://www.jianshu.com/p/72b7a64e5be1 打开 115 离线下载的窗口,看到支持这么多种链接,你都清楚他们是什么原理嘛?接下来我们一个一个说. 一.HTTP( ...
- 计算机中的K、M、G、T到底指的是
计算机语言是二进制数字01组成. 在计算机工作中,2的10次方用K(kilo)表示,2的20次方用M(mega)表示,2的30次方用G(giga)表示,2的40次方用T(tera)表示.因此,4K=2 ...