druid mysql配置详解_springboot+druid+mybatis-Plus 配置详解

网上找了很多关于springboot+druid+mybatis-Plus的配置,遇见的很多问题 也没找到好的解决方案。折腾了好几天终于自己配置通过了。

springboot的pom文件

1

2 org.springframework.boot

3 spring-boot-starter-parent

4 2.0.4.RELEASE

5

6

7

8

9 UTF-8

10 UTF-8

11 1.8

12 2.2.0

13 1.0.5

14

15

16

17

18 org.springframework.boot

19 spring-boot-starter-web

20

21

22 org.springframework.boot

23 spring-boot-devtools

24

25

26

27 com.baomidou

28 mybatisplus-spring-boot-starter

29 ${mybatisplus-spring-boot-starter.version}

30

31

32 com.baomidou

33 mybatis-plus

34 ${mybatisplus.version}

35

36

37

38

39 mysql

40 mysql-connector-java

41 runtime

42

43

44 org.springframework.boot

45 spring-boot-starter-tomcat

46 provided

47

48

49 org.springframework.boot

50 spring-boot-starter-test

51 test

52

53

54

55 com.alibaba

56 druid

57 1.1.9

58

59

application.yml 文件

1 spring:2 datasource:3 url: jdbc:mysql://xxxx/selll?useUnicode=true&characterEncoding=utf-8&useSSL=false4 username: root5 password: xxx6 driver-class-name: com.mysql.jdbc.Driver7 platform: mysql8 type: com.alibaba.druid.pool.DruidDataSource9 # 下面为连接池的补充设置,应用到上面所有数据源中10 # 初始化大小,最小,最大11 initialSize: 112 minIdle: 313 maxActive: 2014 # 配置获取连接等待超时的时间15 maxWait: 6000016 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒17 timeBetweenEvictionRunsMillis: 6000018 # 配置一个连接在池中最小生存的时间,单位是毫秒19 minEvictableIdleTimeMillis: 3000020 validationQuery: select ‘x‘21 testWhileIdle: true22 testOnBorrow: false23 testOnReturn: false24 # 打开PSCache,并且指定每个连接上PSCache的大小25 poolPreparedStatements: true26 maxPoolPreparedStatementPerConnectionSize: 2027 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,‘wall‘用于防火墙28 filters: stat,wall,slf4j29 # 通过connectProperties属性来打开mergeSql功能;慢SQL记录30 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500031 # 合并多个DruidDataSource的监控数据32 #useGlobalDataSourceStat: true33 server:34 port: 808035 mybatis-plus:36 mapper-locations: mapper/*.xml37 type-aliases-package: com.wsy.dcxt.pojo38 global-config:39 id-type: 040 field-strategy: 241 capital-mode: true42 refresh-mapper: true

数据源的配置

1 packagecom.wsy.dcxt.config.dao;2

3 importjava.beans.PropertyVetoException;4

5 importcom.alibaba.druid.pool.DruidDataSource;6 importorg.mybatis.spring.annotation.MapperScan;7 importorg.springframework.beans.factory.annotation.Value;8 importorg.springframework.boot.context.properties.ConfigurationProperties;9 importorg.springframework.context.annotation.Bean;10 importorg.springframework.context.annotation.Configuration;11

12 importjavax.sql.DataSource;13

14 /**

15 * 配置datasource到ioc容器里面16 *17 *@authorxiangze18 *19 */

20 @Configuration21 @MapperScan(basePackages = "com.wsy.dcxt.dao")22 public classDataSourceConfiguration {23 @Value("${spring.datasource.driver-class-name}")24 privateString jdbcDriver;25 @Value("${spring.datasource.url}")26 privateString jdbcUrl;27 @Value("${spring.datasource.username}")28 privateString jdbcUsername;29 @Value("${spring.datasource.password}")30 privateString jdbcPassword;31

32

33 /**

34 * 生成与spring-dao.xml对应的bean dataSource35 *36 *@return

37 *@throwsPropertyVetoException38 */

39 @Bean(name = "dataSource")40 @ConfigurationProperties(prefix = "spring.datasource")41 publicDataSource dataSource(){42 return newDruidDataSource();43 }44

45 }

Mybatis-Plus的配置

1 packagecom.wsy.dcxt.config.dao;2

3 importjava.io.IOException;4

5 importjavax.sql.DataSource;6 importorg.apache.ibatis.plugin.Interceptor;7 importcom.alibaba.druid.pool.DruidDataSource;8 importcom.baomidou.mybatisplus.MybatisSessionFactoryBuilder;9 importcom.baomidou.mybatisplus.entity.GlobalConfiguration;10 importcom.baomidou.mybatisplus.plugins.PaginationInterceptor;11 importcom.baomidou.mybatisplus.plugins.PerformanceInterceptor;12 importcom.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;13 importorg.apache.ibatis.session.SqlSessionFactory;14 importorg.slf4j.Logger;15 importorg.slf4j.LoggerFactory;16 importorg.springframework.beans.factory.annotation.Autowired;17 importorg.springframework.beans.factory.annotation.Qualifier;18 importorg.springframework.beans.factory.annotation.Value;19 importorg.springframework.context.annotation.Bean;20 importorg.springframework.context.annotation.Configuration;21 importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;22 importorg.springframework.core.io.support.ResourcePatternResolver;23 importorg.springframework.jdbc.datasource.DataSourceTransactionManager;24

25 @Configuration26 public classMybatisPlusConfig {27 private static final Logger log= LoggerFactory.getLogger(DataSourceConfiguration.class);28 @Autowired29 privateDataSource dataSource;30 @Value("${mybatis-plus.global-config.id-type}")31 privateInteger idType;32 @Value("${mybatis-plus.global-config.field-strategy}")33 private intfieldStrategy;34 @Value("${mybatis-plus.global-config.capital-mode}")35 private booleancapitalMode;36 @Value("${mybatis-plus.mapper-locations}")37 privateString mapperLocations;38 @Value("${mybatis-plus.type-aliases-package}")39 privateString typeAliasesPackage;40 @Value("${mybatis-plus.global-config.refresh-mapper}")41 private booleanrefreshMapper;42

43 //mybatis plus 全局配置

44 @Bean(name = "globalConfig")45 publicGlobalConfiguration globalConfiguration(){46 log.info("初始化GlobalConfiguration");47 GlobalConfiguration configuration=newGlobalConfiguration();48 //主键策略

49 configuration.setRefresh(refreshMapper);50 configuration.setIdType(idType);51 //字段策略

52 configuration.setFieldStrategy(fieldStrategy);53 //数据库大写 下划线转换

54 configuration.setCapitalMode(capitalMode);55 returnconfiguration;56 }57 @Bean(name = "sqlSessionFactory")58 public SqlSessionFactory createSqlSessionFactoryBean(@Qualifier(value = "globalConfig") GlobalConfiguration configuration) throwsException{59 log.info("初始化SqlSessionFactory");60 MybatisSqlSessionFactoryBean sqlSessionFactoryBean=newMybatisSqlSessionFactoryBean();61 sqlSessionFactoryBean.setDataSource(dataSource);62 Interceptor[] interceptor={newPaginationInterceptor()};63 sqlSessionFactoryBean.setPlugins(interceptor);64 ResourcePatternResolver resolver=newPathMatchingResourcePatternResolver();65 try{66 sqlSessionFactoryBean.setGlobalConfig(configuration);67 sqlSessionFactoryBean.setMapperLocations(resolver.getResources(mapperLocations));68 sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);69 returnsqlSessionFactoryBean.getObject();70 }catch(Exception e){71 e.printStackTrace();72 }73 returnsqlSessionFactoryBean.getObject();74 }75 @Bean(name = "transactionManager")76 publicDataSourceTransactionManager transactionManager(){77 log.info("初始化transactionManager");78 return newDataSourceTransactionManager(dataSource);79 }80

81

82

83

84 }

Druid对于性能检测的配置

DruidStatFilter

1 packagecom.wsy.dcxt.config.dao;2

3 importcom.alibaba.druid.support.http.WebStatFilter;4

5 importjavax.servlet.annotation.WebFilter;6 importjavax.servlet.annotation.WebInitParam;7

8 @WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*",9 initParams ={10 @WebInitParam(name = "exclusions",11 value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*") })12 public class DruidStatFilter extendsWebStatFilter {13

14 }

DruidStatViewServlet

1 packagecom.wsy.dcxt.config.dao;2

3 importcom.alibaba.druid.support.http.StatViewServlet;4

5 importjavax.servlet.annotation.WebInitParam;6 importjavax.servlet.annotation.WebServlet;7

8 /**

9 * Druid 的数据源状态监控10 */

11 @WebServlet(urlPatterns = "/druid/*",12 initParams ={13 @WebInitParam(name = "allow",value = "127.0.0.1"),14 @WebInitParam(name = "deny",value = "192.168.1.3"),15 @WebInitParam(name ="loginUsername",value = "admin"),16 @WebInitParam(name = "loginPassword",value = "123456"),17 @WebInitParam(name = "resetEnable",value = "false")//禁止html页面上reset All功能

18 })19 public class DruidStatViewServlet extendsStatViewServlet {20 private static final long serialVersionUID = 1L;21 }

打开浏览器,输入配置allow的ip 用户名 密码 即可访问到性能检测面板

注: 记得在主类上添加

@ServletComponentScan 注解 不然会报404

对于传统的xml配置.测试了一个查看所有用户的方法

1 packagecom.wsy.dcxt.dao;2

3 importcom.wsy.dcxt.pojo.User;4 importcom.baomidou.mybatisplus.mapper.BaseMapper;5 importorg.apache.ibatis.annotations.Insert;6

7 importjava.util.List;8

9 public interface UserMapper extends BaseMapper{10

11

12 ListfindAllUsers();13 }

介绍UserMapper.java和UserMapper.xml

1 packagecom.wsy.dcxt.dao;2

3 importcom.wsy.dcxt.pojo.User;4 importcom.baomidou.mybatisplus.mapper.BaseMapper;5 importorg.apache.ibatis.annotations.Insert;6

7 importjava.util.List;8

9 public interface UserMapper extends BaseMapper{10

11

12 ListfindAllUsers();13 }

UserMapper.xml 记得统一 src/main/resouce/mapper (根据yml 文件的配置走)

1 <?xml version="1.0" encoding="UTF-8" ?>

2 /p>

4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5

6

7 select *from user8

9

最后贴出测试类,开森一会儿

1 packagecom.wsy.dcxt.dao;2

3 importcom.wsy.dcxt.pojo.User;4 importcom.wsy.dcxt.service.UserService;5 importorg.junit.Test;6 importorg.junit.runner.RunWith;7 importorg.springframework.beans.factory.annotation.Autowired;8 importorg.springframework.boot.test.context.SpringBootTest;9 importorg.springframework.test.context.junit4.SpringRunner;10

11 importjava.util.List;12

13 import staticorg.junit.Assert.assertEquals;14

15 @SpringBootTest16 @RunWith(SpringRunner.class)17 public classTestUserMapper {18 @Autowired19 privateUserMapper userMapper;20 @Test21 public voidtestMapper(){22 List users =userMapper.findAllUsers();23 assertEquals(3,users.size());24

25

26 }27 @Test28 public voidinsertUser(){29 User user =newUser();30 user.setPassword("123");31 user.setUsername("90");32 int result=userMapper.insert(user);33 System.out.println(result);34

35 }36 }

好多次的InvalidBound 超级神奇 有这么几处需要切记!切记!

<1>,Mapper.java的方法和mapper.xml的方法是否匹配

<2>,namespace 是否填写正确

<3>,yml 中 读取mapper.xml的路径是否正确

<4>,mapperScan注释是否调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot项目中使用MyBatis Plus和Druid多数据源的步骤如下: 1. 添加依赖 在`pom.xml`文件中添加以下依赖: ```xml <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <!-- Druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 2. 配置Druid数据源 在`application.yml`中添加Druid数据源的配置: ```yaml spring: datasource: # 主数据源 druid: url: jdbc:mysql://localhost:3306/main_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # Druid配置 initialSize: 5 minIdle: 5 maxActive: 20 testOnBorrow: false testOnReturn: false testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 validationQuery: SELECT 1 FROM DUAL # 从数据源 druid2: url: jdbc:mysql://localhost:3306/sub_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # Druid配置 initialSize: 5 minIdle: 5 maxActive: 20 testOnBorrow: false testOnReturn: false testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 validationQuery: SELECT 1 FROM DUAL ``` 3. 配置MyBatis Plus 在`application.yml`中添加MyBatis Plus的配置: ```yaml mybatis-plus: # 主数据源配置 mapper-locations: classpath:mapper/main/*.xml type-aliases-package: com.example.main.entity global-config: db-config: id-type: auto field-strategy: not_empty logic-delete-value: 1 logic-not-delete-value: 0 configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 从数据源配置 multi-datasource: main: mapper-locations: classpath:mapper/main/*.xml type-aliases-package: com.example.main.entity sub: mapper-locations: classpath:mapper/sub/*.xml type-aliases-package: com.example.sub.entity ``` 4. 配置数据源路由 在`com.example.config`包下创建`DynamicDataSourceConfig`类,用于配置数据源路由: ```java @Configuration public class DynamicDataSourceConfig { @Bean @ConfigurationProperties("spring.datasource.druid") public DataSource mainDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean @ConfigurationProperties("spring.datasource.druid2") public DataSource subDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean public DataSource dynamicDataSource() { DynamicDataSource dynamicDataSource = new DynamicDataSource(); Map<Object, Object> dataSourceMap = new HashMap<>(2); dataSourceMap.put("main", mainDataSource()); dataSourceMap.put("sub", subDataSource()); // 将主数据源作为默认数据源 dynamicDataSource.setDefaultTargetDataSource(mainDataSource()); dynamicDataSource.setTargetDataSources(dataSourceMap); return dynamicDataSource; } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dynamicDataSource()); sqlSessionFactoryBean.setTypeAliasesPackage("com.example.main.entity"); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/main/*.xml")); return sqlSessionFactoryBean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplate() throws Exception { return new SqlSessionTemplate(sqlSessionFactory()); } } ``` 5. 配置数据源切换 在`com.example.config`包下创建`DynamicDataSource`类,用于实现数据源切换: ```java public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDataSource(); } } ``` 在`com.example.config`包下创建`DataSourceContextHolder`类,用于存储当前数据源: ```java public class DataSourceContextHolder { private static final ThreadLocal<String> DATASOURCE_CONTEXT_HOLDER = new ThreadLocal<>(); public static void setDataSource(String dataSource) { DATASOURCE_CONTEXT_HOLDER.set(dataSource); } public static String getDataSource() { return DATASOURCE_CONTEXT_HOLDER.get(); } public static void clearDataSource() { DATASOURCE_CONTEXT_HOLDER.remove(); } } ``` 在`com.example.aop`包下创建`DataSourceAspect`类,用于切换数据源: ```java @Aspect @Component public class DataSourceAspect { @Pointcut("@annotation(com.example.annotation.DataSource)") public void dataSourcePointCut() { } @Before("dataSourcePointCut()") public void before(JoinPoint joinPoint) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); DataSource dataSource = signature.getMethod().getAnnotation(DataSource.class); if (dataSource != null) { String value = dataSource.value(); DataSourceContextHolder.setDataSource(value); } } @After("dataSourcePointCut()") public void after(JoinPoint joinPoint) { DataSourceContextHolder.clearDataSource(); } } ``` 6. 使用多数据源 在需要使用从数据源的方法上加上`@DataSource("sub")`注解,如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> listUsers() { DataSourceContextHolder.setDataSource("sub"); List<User> users = userMapper.selectList(null); DataSourceContextHolder.clearDataSource(); return users; } } ``` 这样就完成了Spring Boot项目中使用MyBatis Plus和Druid多数据源的配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值