pom.xml
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
application.properties
#d1数据库连接 spring.datasource.d1.driver-class-name = com.mysql.cj.jdbc.Driver spring.datasource.d1.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.d1.username = root spring.datasource.d1.password = root #d1数据库连接池配置 spring.datasource.d1.type=com.alibaba.druid.pool.DruidDataSource #初始连接数 spring.datasource.d1.initialSize=1 #最小连接数 spring.datasource.d1.minIdle=3 #最大连接数 spring.datasource.d1.maxActive=20 #配置获取连接等待超时的时间 spring.datasource.d1.maxWait=60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 spring.datasource.d1.timeBetweenEvictionRunsMillis=60000 #配置一个连接在池中最小生存的时间,单位是毫秒 spring.datasource.d1.minEvictableIdleTimeMillis=30000 spring.datasource.d1.validationQuery=SELECT 1 FROM DUAL spring.datasource.d1.testWhileIdle=true spring.datasource.d1.testOnBorrow=false spring.datasource.d1.testOnReturn=false spring.datasource.d1.poolPreparedStatements=true #配置监控统计拦截的filters,stat:监控统计、slf4j:日志记录、wall:防御sql注入 spring.datasource.d1.filters=stat,wall,slf4j spring.datasource.d1.maxPoolPreparedStatementPerConnectionSize=20
多数据源配置d1连接配置类
@Configuration @MapperScan(basePackages = "com.test.dao.d1.mapper", sqlSessionTemplateRef = "d1SqlSessionTemplate") public class D1DatabaseConfig { @Bean(name = "d1DataSource") @ConfigurationProperties(prefix = "spring.datasource.d1") public DataSource d1DataSource() { DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource; } @Bean(name = "d1SqlSessionFactory") public SqlSessionFactory d1SqlSessionFactory(@Qualifier("d1DataSource") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/test/dao/d1/mapper/*.xml")); // 指明实体扫描(多个package用逗号或者分号分隔) MybatisConfiguration configuration = new MybatisConfiguration(); bean.setTypeAliasesPackage("com.test.dao.d1"); // 导入mybatis配置 configuration.setJdbcTypeForNull(JdbcType.NULL); configuration.setMapUnderscoreToCamelCase(true); configuration.setCacheEnabled(false); // 配置打印sql语句 configuration.setLogImpl(StdOutImpl.class); bean.setConfiguration(configuration); return bean.getObject(); } @Bean(name = "d1TransactionManager") public DataSourceTransactionManager d1TransactionManager(@Qualifier("d1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "d1SqlSessionTemplate") public SqlSessionTemplate d1SqlSessionTemplate(@Qualifier("d1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; } }
Druid监控配置
/** * 配置 Druid 监控管理后台的Servlet; * 内置 Servler 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式 * @return */ @Bean public ServletRegistrationBean statViewServlet() { ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map<String, String> initParams = new HashMap<>(); //后台管理界面的登录账号 initParams.put("loginUsername", "admin"); //后台管理界面的登录密码 initParams.put("loginPassword", "123456"); //后台允许谁(ip)可以访问,为空或者为null时,表示允许所有访问 initParams.put("allow", ""); //后台拒绝谁访问 //initParams.put("kuangshen", "192.168.1.20");表示禁止此ip访问 //设置初始化参数 bean.setInitParameters(initParams); return bean; } /** * 配置 Druid 监控 之 web 监控的 filter * WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计 * @return */ @Bean public FilterRegistrationBean webStatFilter() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); //exclusions:设置哪些请求进行过滤排除掉,从而不进行统计 Map<String, String> initParams = new HashMap<>(); initParams.put("exclusions", "*.js,*.css,/druid/*"); bean.setInitParameters(initParams); //"/*" 表示过滤所有请求 bean.setUrlPatterns(Arrays.asList("/*")); return bean; }
测试
//注入数据源 @Autowired @Qualifier("d1DataSource") DataSource dataSource; @Test public void contextLoads() throws SQLException { //看一下默认数据源 System.out.println(dataSource.getClass()); //获得连接 Connection connection = dataSource.getConnection(); System.out.println(connection); DruidDataSource druidDataSource = (DruidDataSource) dataSource; System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive()); System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize()); //关闭连接 connection.close(); }