SpringBoot自定义Mybatis数据源,SpringBoot集成Druid数据库连接池,自定义Mybatis拦截器转义特殊字符%_
文章目录
六、Springboot中使用Druid自定义数据库源
-
首先引入相关依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.15</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.6</version> </dependency>
-
在配置文件中配置数据库连接信息,以及一些需要的druid配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:p6spy:mysql://127.0.0.1:3306/reggie?characterEncoding=utf-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=mysqlroot # druid spring.datasource.druid.enable=true spring.datasource.druid.name=mysql spring.datasource.druid.initial-size=10 spring.datasource.druid.min-idle=10 spring.datasource.druid.max-active=20 spring.datasource.druid.max-wait=60000 spring.datasource.druid.validation-query=SELECT 1 FROM DUAL spring.datasource.druid.pool-prepared-statements=false
-
配置一个数据源,如果项目中有多个可以在此处配置多个,用@primary注解标注主数据源。在这里可以使用
@ConfigurationProperties(prefix = "spring.datasource.druid")
将配置文件中 的配置项自动加载进来,也可以先@Value
注解将数据先读取出来,再设置进去@Primary @Bean(name = "masterDataSource") @ConfigurationProperties(prefix = "spring.datasource.druid") public DruidDataSource masterDataSource() { return DruidDataSourceBuilder.create().build(); }
-
为Mybatis设置配置数据源、事务、mapper文件路径以及拦截器,这样数据源就设置好了,Springboot项目启动时就会自动加载我们的sqlSessionFactory吗,达到我们自定义数据源的目的了
@Configuration @MapperScan(basePackages = { "com.shadowy.mapper"}, sqlSessionFactoryRef = "sqlSessionFactory") // 首先定义mapperscan扫描包,可指定多个包路径 public class MybatisConfig { @Primary @Bean(name = "transactionManager") public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Primary @Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception { // 将上一步的DruidDataSource引入 // 为MybatisSqlSessionFactoryBean设置数据源,以及xml资源路径,一般mapper.xml都放在Resources目录下的 final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); String mapperLocation = "mapper/*.xml"; Resource[] resources = new PathMatchingResourcePatternResolver().getResources( ResourceLoader.CLASSPATH_URL_PREFIX + mapperLocation ); sessionFactory.setMapperLocations(resources); // 为Mybatis注册一些需要用到的插件 Properties prop = new Properties(); prop.setProperty("offsetAsPageNum", "true"); prop.setProperty("rowBoundsWithCount", "true"); prop.setProperty("reasonable", "true"); prop.setProperty("helperDialect", "mysql"); PageInterceptor pageInterceptor = new PageInterceptor(); pageInterceptor.setProperties(prop); // ES转义插件 EscapeInterceptor escapeInterceptor = new EscapeInterceptor(); List<Interceptor> interceptors = new ArrayList<>(); interceptors.add(pageInterceptor); interceptors.add(escapeInterceptor); sessionFactory.setPlugins(interceptors.toArray(new Interceptor[1])); return sessionFactory.getObject(); } }
-
检查数据源是否连接正常,定时任务健康检查,这里的
dataSource
就是我们前面定义的masterDataSource,注入进来即可@