目录
1.6 setRejectedExecutionHandler
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; } }
相关阅读
我的社区:区块链社区
如果你对区块链感兴趣,可以浏览我的专栏:区块链
感谢您的关注和收藏!!!!!!
编辑