为什么要使用c3p0?
使用springboot默认的数据源配置方式:
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8username: rootpassword: root
会存在mysql 8小时的问题,是无法在生产环境使用的,关于java中使用连接池引发的mysql 8小时问题。
springboot配置c3p0连接池
当然,除了c3p0连接池,你也可以使用其他连接池,我这里只不过是拿c3p0来举例子。
1.引入c3p0依赖
<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.2.1</version></dependency>
2.在application.yml中配置c3p0连接池的属性
spring:datasource:type: com.mchange.v2.c3p0.ComboPooledDataSourcedriverClass: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8user: rootpassword: rootmaxPoolSize: 200minPoolSize: 10initialPoolSize: 10acquireIncrement: 5idleConnectionTestPeriod: 28000maxIdleTime: 28000
注意,大家要理解,为什么一开始datasource下面是driver-class-name,而在c3p0配置的时候却成了driverClass,不仅如此,我们发现url、username也变成了jdbcUrl、user,为什么呢?因为这里写什么取决于type对应的类的属性,c3p0的com.mchange.v2.c3p0.ComboPooledDataSource类的属性是什么,这里就要写什么。
3.使用上面的配置生成bean,并放入spring的容器中。
import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configuration
public class DataSourceConfiguration extends WebMvcConfigurerAdapter {@Bean(name = "dataSource")@Qualifier(value = "dataSource")@Primary@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource(){DataSource dataSource=DataSourceBuilder.create().type(com.mchange.v2.c3p0.ComboPooledDataSource.class).build();return dataSource;}
}
4.其实经过上面3步就已经完成了springboot使用c3p0的配置,下面我们来验证一下,怎么验证呢?我们在springboot的启动类中获取到注入的ComboPooledDataSource对应的bean,并查看它各个属性的值就可以了:
public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(SbedaApplication.class, args);ComboPooledDataSource bean = run.getBean(ComboPooledDataSource.class);System.out.println(bean);}
在System.out.println(bean);这一行加个断点,debug模式启动springboot,可以看到ComboPooledDataSource类在spring中的bean对应的信息是:
而这个值就是我们指定的值,说明配置已经生效了,具体信息大家可以debug看一下ComboPooledDataSource类对应的bean的各个属性的值。
















