Springboot项目中解决Druid DataSource 连接Mysql 存取 emoji表情
2018-03-13 16:09
549 查看
一、原理:
应用获取数据库连接前,设置Session 字符集 "SET NAMES utf8mb4"
1)SpringMVC项目中,直接在数据源 xml 文件中添加 :
如图:
2)在Springboot项目中,默认数据源用的是tomcat数据源,如果使用druid数据源的话,则需要自己编写数据源配置类。
二、自己编写数据源配置
1)配置文件
2)数据源配置类
应用获取数据库连接前,设置Session 字符集 "SET NAMES utf8mb4"
1)SpringMVC项目中,直接在数据源 xml 文件中添加 :
<property name="connectionInitSqls" value="set names utf8mb4;" />
如图:
2)在Springboot项目中,默认数据源用的是tomcat数据源,如果使用druid数据源的话,则需要自己编写数据源配置类。
二、自己编写数据源配置
1)配置文件
spring: datasource: #驱动配置信息 url: jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true username: xxxx password: xxxx type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver #连接池的配置信息 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 filters: stat,wall,log4j connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
2)数据源配置类
import com.alibaba.druid.pool.DruidDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; import java.sql.SQLException; import java.util.Collections; import java.util.StringTokenizer; /** * @author Charlie * @create 2018-03-13 14:37 **/ @Configuration public class DruidDBConfig { private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class); @Value("${spring.datasource.url}") private String dbUrl; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driver-class-name}") private String driverClassName; @Value("${spring.datasource.initialSize}") private int initialSize; @Value("${spring.datasource.minIdle}") private int minIdle; @Value("${spring.datasource.maxActive}") private int maxActive; @Value("${spring.datasource.maxWait}") private int maxWait; @Value("${spring.datasource.timeBetweenEvictionRunsMillis}") private int timeBetweenEvictionRunsMillis; @Value("${spring.datasource.minEvictableIdleTimeMillis}") private int minEvictableIdleTimeMillis; @Value("${spring.datasource.validationQuery}") private String validationQuery; @Value("${spring.datasource.testWhileIdle}") private boolean testWhileIdle; @Value("${spring.datasource.testOnBorrow}") private boolean testOnBorrow; @Value("${spring.datasource.testOnReturn}") private boolean testOnReturn; @Value("${spring.datasource.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}") private int maxPoolPreparedStatementPerConnectionSize; @Value("${spring.datasource.filters}") private String filters; @Value("{spring.datasource.connectionProperties}") private String connectionProperties; @Bean //声明其为Bean实例 @Primary //在同样的DataSource中,首先使用被标注的DataSource public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); //configuration String connectionInitSqls = "SET NAMES utf8mb4"; StringTokenizer tokenizer = new StringTokenizer(connectionInitSqls, ";"); datasource.setConnectionInitSqls(Collections.list(tokenizer));//重点设置该参数 datasource.setInitialSize(initialSize); datasource.setMinIdle(minIdle); datasource.setMaxActive(maxActive); datasource.setMaxWait(maxWait); datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); datasource.setValidationQuery(validationQuery); datasource.setTestWhileIdle(testWhileIdle); datasource.setTestOnBorrow(testOnBorrow); datasource.setTestOnReturn(testOnReturn); datasource.setPoolPreparedStatements(poolPreparedStatements); datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { datasource.setFilters(filters); } catch (SQLException e) { logger.error("druid configuration initialization filter", e); } datasource.setConnectionProperties(connectionProperties); return datasource; } }
相关文章推荐
- Spring Boot多数据源连接8小时后断开的问题解决(MySQL)
- 简单的用jdbc使spring boot项目同时连接Oracle和Mysql数据源
- springboot+mybatis数据源的读写分离(mysql,后期连接设置,前期项目没做好的忽入会蒙的)
- Spring Boot解决项目启动时初始化资源的方法
- [置顶] spring boot项目实战:跨域问题解决
- SpringBoot + Gradle + mysql 搭建web 项目
- Springboot 项目中 手动取出连接执行sql,结束后将连接交还给连接池
- Eclipse安装了SpringSource Tool Suite插件后,编辑SpringBoot项目的yml配置文件仍然没有提示信息的解决办法
- SpringBoot之Mybatis连接MySQL进行CRUD(注解&配置文件)(简测试版)
- spring boot mysql 8小时连接超时
- Spring boot 项目 maven的profile多环境配置 不自动替换变量的问题解决
- [置顶] spring boot项目实战:跨域问题解决
- spring boot 项目 eclipse 环境下解决 Exception in thread "http-nio-9001-exec-9" 错误
- IntelliJ IDEA中Spring Boot项目使用spring-boot-devtools无法实现热部署/热更新的问题解决
- 搭建基于springboot的SSM项目时数据库出现的错误解决
- 解决eclipse创建spring boot项目加载不到application.properties配置文件的问题
- SpringBoot解决Mysql8小时问题
- 访问linux环境下的spring boot项目需要用户名和密码的解决办法
- [置顶] spring boot项目实战:跨域问题解决