HikariCP可以说是目前速度最快的数据源了。然而该数据源不像之前的数据源(如Druid或者C3P0)那样默认无需设置编码,因此需要额外针对编码做一些设置,否则就会出现乱码问题。
方法一:在对数据源进行初始化时进行设置。
清单1.传统方式初始化数据源
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
//下面两行是重点
dataSource.addDataSourceProperty("useUnicode", "true");
dataSource.addDataSourceProperty("characterEncoding", "utf8");
return dataSource;
清单2.初始化数据源编码——与Spring 4整合
package org.fhp.hikaricpdemo.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass=true)
@EnableTransactionManagement
public class DaoConfig {
@Bean(name="daoDataSource")
public DataSource daoDataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
//下面两行是重点
dataSource.addDataSourceProperty("useUnicode", "true");
dataSource.addDataSourceProperty("characterEncoding", "utf8");
return dataSource;
}
@Bean
public DataSourceTransactionManager transactionManager(@Qualifier("daoDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
方法二:在JDBC的URL中指定编码
清单3.在URL中指定编码
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("root");
//重点是这一行
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306test?useUnicode=true&characterEncoding=UTF-8");
return dataSource;
清单4.URL中指定编码——与Spring 4整合
package org.fhp.hikaricpdemo.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass=true)
@EnableTransactionManagement
public class DaoConfig {
@Bean(name="daoDataSource")
public DataSource daoDataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("root");
//重点是这一行
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8");
return dataSource;
}
@Bean
public DataSourceTransactionManager transactionManager(@Qualifier("daoDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}