目录
编写目的
一、线程池
1.1 setCorePoolSize
1.2 setMaxPoolSize
1.3 setQueueCapacity
1.4 setKeepAliveSeconds
1.5 setThreadNamePrefix
1.6 setRejectedExecutionHandler
1.7 示例代码
二、Durid数据库连接池
2.1 ServletRegistrationBean
2.2 FilterRegistrationBean
2.3 示例代码
三、Redis
3.1 setKeySerializer
3.2 setValueSerializer
3.3 setHashKeySerializer
3.4 setHashValueSerializer
3.5 示例代码
Welcome to Code Block's blog
本篇文章主要介绍了
[SpringBoot应用开发:配置类整理]
❤博主广交技术好友,喜欢文章的可以关注一下❤
编写目的
在使用SpringBoot进行应用开发中,通常需要编写很多的配置类,这些配置类在很大程度上提高了应用的开发速度.其中就包括线程池、数据库连接池、缓存的相关配置类。在这里我将经常用到的配置类进行整理和总结。
一、线程池
线程池用于优化异步任务的执行速度、并发处理能力.控制线程数量,避免资源过度消耗.通过设置线程前缀可以提高日志的可读性.
1.1 setCorePoolSize
指定线程中保持活跃的线程数量,即使线程空闲,核心线程也会存活(可通过allowCoreThreadTimeOut设置为true进行更改)
1.2 setMaxPoolSize
指定线程池中线程的最大数量,在核心线程数满时,会创建新线程,直到到达maxPoolSize为止.
1.3 setQueueCapacity
指定队列数量,在任务超过核心线程数量时,会被放到该队列中,在该队列满后会创建新的线程.
1.4 setKeepAliveSeconds
设置线程的超时时间,线程空闲超过该时间后线程会被销毁.
1.5 setThreadNamePrefix
设置线程前缀,该前缀可方便在线程调试和日志中进行查看.
1.6 setRejectedExecutionHandler
设置线程的拒绝策略,如CallerRunsPolicy:当线程执行失败时,由发起调用的线程执行失败的任务.
1.7 示例代码
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/**
* 线程池相关配置
*/
@Configuration
public class AsyncConfig {
@Bean
public TaskExecutor executor(){
ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);//核心线程数
executor.setMaxPoolSize(50); //最大线程数
executor.setQueueCapacity(1000); //队列大小
executor.setKeepAliveSeconds(300); //线程最大空闲时间
executor.setThreadNamePrefix("fsx-Executor-"); //指定用于新创建的线程名称的前缀。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
二、Durid数据库连接池
Durid连接池配置主要为了监控由 Druid 数据源 管理的数据库连接性能,可以方便的从web页面查看数据库连接性能.同时需配置需过滤的请求文件和类型.
2.1 ServletRegistrationBean
在ServletRegistrationBean配置中,需提供durid管理页面的访问路径,通过addInitParameter方法设置(deny)黑名单和(allow)白名单,(loginUsername)登录用户名和(loginPassword)密码,以及是否开启重置数据功能(resetEnable).
2.2 FilterRegistrationBean
在FilterRegistrationBean可以通过addUrlPatterns配置拦截的路径,通过addInitParameter中的exclusions参数配置可直接访问的文件.
注:配置可直接访问文件以保证管理页面可正常显示
2.3 示例代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
/**
* @author seaua
*/
@Configuration
public class DruidConfig {
private final Logger logger = LoggerFactory.getLogger(DruidConfig.class);
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
// IP白名单
servletRegistrationBean.addInitParameter("allow", "*");
// IP黑名单(共同存在时,deny优先于allow)
servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
// 控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
// 是否能够重置数据 禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
三、Redis
Redis数据库相关配置用于配置Redis的存储和序列化格式.
3.1 setKeySerializer
使用 StringRedisSerializer
将键序列化为普通字符串格式,便于可读
3.2 setValueSerializer
使用自定义的 JsonRedisSerializer
将值序列化为 JSON 格式。
3.3 setHashKeySerializer
将Hash键序列化为普通的字符串格式,方便阅读.
3.4 setHashValueSerializer
使用自定义的JsonRedisSerializer
将Hash值序列化为Json格式。
3.5 示例代码
import javax.annotation.Resource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import com.mozhi.archives.common.redis.serializer.JsonRedisSerializer;
/**
* @author seaua
*/
@Configuration
public class RedisConfig {
@Resource
private RedisConnectionFactory factory;
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JsonRedisSerializer<>(Object.class));
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new JsonRedisSerializer<>(Object.class));
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
}
相关阅读
-
Springboot应用开发:工具类整理
-
Springboot应用开发:SpringBootSecurity
-
Springboot秒集成视频推拉流
我的社区:区块链社区
如果你对区块链感兴趣,可以浏览我的专栏:区块链
感谢您的关注和收藏!!!!!!