Springboot应用开发:配置类整理
在使用SpringBoot进行应用开发中,通常需要编写很多的配置类,这些配置类在很大程度上提高了应用的开发速度.其中就包括线程池、数据库连接池、缓存的相关配置类。在这里我将经常用到的配置类进行整理和总结。
目录
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;
}
}
相关阅读
我的社区:区块链社区
如果你对区块链感兴趣,可以浏览我的专栏:区块链
感谢您的关注和收藏!!!!!!
更多推荐
所有评论(0)