以下是SpringBoot整合Druid数据源的详细攻略。
准备工作
引入相关依赖
为了使用Druid数据源,我们需要在pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.2</version>
</dependency>
在配置文件中添加数据库信息
我们需要在application.properties
或application.yml
中添加数据库信息,示例:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root123
整合Druid数据源
添加Druid数据源配置
在application.properties
或application.yml
中添加Druid配置信息,示例:
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 'x' FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.filters=stat,wall,log4j
spring.datasource.druid.connection-properties=config.decrypt=false
配置Druid监控
为了更好地管理Druid连接池的使用情况,我们需要配置Druid监控信息。在SpringBoot中,我们需要使用ServletRegistrationBean
和FilterRegistrationBean
两个类来配置Druid监控。示例:
@Configuration
public class DruidConfig {
@Bean
public ServletRegistrationBean<StatViewServlet> statViewServlet() {
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
registrationBean.addInitParameter("allow", "127.0.0.1");
registrationBean.addInitParameter("loginUsername", "admin");
registrationBean.addInitParameter("loginPassword", "admin");
registrationBean.addInitParameter("resetEnable", "false");
return registrationBean;
}
@Bean
public FilterRegistrationBean<WebStatFilter> webStatFilter() {
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(new WebStatFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
return registrationBean;
}
}
示例
配置多数据源
在实际应用中,我们可能需要连接多个数据库。这时候,我们可以使用SpringBoot的多数据源配置。首先,在application.yml
中添加多数据源的配置信息:
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.url=jdbc:mysql://localhost:3306/db1
spring.datasource.test1.username=root
spring.datasource.test1.password=root123
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.url=jdbc:mysql://localhost:3306/db2
spring.datasource.test2.username=root
spring.datasource.test2.password=root123
然后,在代码中通过@Qualifier
注解和@Primary
注解表示使用哪个数据源,示例:
@Configuration
public class DataSourceConfig {
@Bean
@Qualifier("test1")
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource dataSourceTest1() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@Qualifier("test2")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource dataSourceTest2() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@Primary
public DynamicDataSource dataSource() {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put("test1", dataSourceTest1());
targetDataSources.put("test2", dataSourceTest2());
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(dataSourceTest1());
return dynamicDataSource;
}
}
@Service
public class TestService {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<Map<String, Object>> queryTest1() {
return jdbcTemplate.queryForList("SELECT * FROM table1");
}
public List<Map<String, Object>> queryTest2() {
return jdbcTemplate.queryForList("SELECT * FROM table2");
}
}
配置Druid连接池的参数
我们可以在配置文件中指定Druid连接池的各种参数来控制连接池的使用。以下是一些重要的配置参数:
- initialSize:初始化连接池大小,默认为0;
- maxActive:最大活动连接数,默认为8;
- minIdle:最小空闲连接数,默认为0;
- maxWait:获取连接的最大等待时间(毫秒),默认为-1;
- timeBetweenEvictionRunsMillis:通过扫描回收线程来回收连接的时间间隔(毫秒),默认为-1;
- minEvictableIdleTimeMillis:连接在连接池中最小空闲时间,达到此值后会被回收(毫秒),默认为10006030;
- validationQuery:连接校验语句,用于检测连接是否可用;
- testWhileIdle:空闲连接是否进行测试,默认为false;
- testOnBorrow:每次获取连接时是否进行测试,默认为false;
- testOnReturn:归还连接时是否进行测试,默认为false;
- poolPreparedStatements:是否缓存PreparedStatement,默认为false;
- maxPoolPreparedStatementPerConnectionSize:每个连接中最大缓存PreparedStatement大小,默认为10。
以上就是整合Druid数据源的详细攻略和示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Druid数据源过程详解 - Python技术站