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(); }