1.使用http://start.spring.io/ 新建web项目,选择spring-boot版本为1.5.13选择mysql,mybatis,web依赖,下载好生成的demo
2.导入idea,然后写导入druid依赖
1 2 3 4 5
| <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.23</version> </dependency>
|
2.设置druid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
| package com.my.blog.website.config; import com.alibaba.druid.filter.Filter; import com.alibaba.druid.filter.logging.Slf4jLogFilter; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import com.github.pagehelper.PageHelper; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties; /** * cn.sparrowx.druid.conf * * @author bosong * @since 2018/6/11 15:30. */ @Configuration public class DruidConfiguration { private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class); private static final String DB_PREFIX = "spring.datasource"; @Bean public ServletRegistrationBean druidServlet() { logger.info("init Druid Servlet Configuration "); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); // IP白名单 servletRegistrationBean.addInitParameter("allow", ""); // IP黑名单(共同存在时,deny优先于allow) servletRegistrationBean.addInitParameter("deny", ""); //控制台管理用户 servletRegistrationBean.addInitParameter("loginUsername", "bosong"); servletRegistrationBean.addInitParameter("loginPassword", "qwe13579QWE"); //是否能够重置数据 禁用HTML页面上的“Reset All”功能 servletRegistrationBean.addInitParameter("resetEnable", "true"); return servletRegistrationBean; } @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } List<Filter> list=new ArrayList<>(); @Bean Slf4jLogFilter logfilter(){ Slf4jLogFilter slf4jLogFilter=new Slf4jLogFilter(); slf4jLogFilter.setConnectionLogEnabled(false); slf4jLogFilter.setStatementLogEnabled(false); slf4jLogFilter.setStatementExecutableSqlLogEnable(true); slf4jLogFilter.setResultSetLogEnabled(true); list.add(slf4jLogFilter); return slf4jLogFilter; } //解决 spring.datasource.filters=stat,wall,log4j 无法正常注册进去 @ConfigurationProperties(prefix = DB_PREFIX) class IDataSourceProperties { private String url; private String username; private String password; private String filters; private String connectionProperties; @Bean //声明其为Bean实例 @Primary //在同样的DataSource中,首先使用被标注的DataSource public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setName("blog-onlie"); datasource.setUrl(url); datasource.setUsername(username); datasource.setPassword(password); //configuration datasource.setInitialSize(1); datasource.setMinIdle(1); datasource.setMaxActive(20); datasource.setMaxWait(60000); datasource.setTimeBetweenLogStatsMillis(300000); datasource.setTimeBetweenEvictionRunsMillis(60000); datasource.setMinEvictableIdleTimeMillis(300000); datasource.setTestWhileIdle(true); datasource.setTestOnBorrow(false); datasource.setTestOnReturn(false); datasource.setPoolPreparedStatements(true); datasource.setMaxPoolPreparedStatementPerConnectionSize(20); datasource.setAsyncInit(true); datasource.setProxyFilters(list); datasource.setValidationQuery("select 'x'"); try { datasource.setFilters(filters); } catch (SQLException e) { System.err.println("druid configuration initialization filter: " + e); } datasource.setConnectionProperties(connectionProperties); return datasource; } @Bean(name = "sqlSessionFactory") @Primary public SqlSessionFactory sqlSessionFactoryBean() { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource()); bean.setTypeAliasesPackage("com.my.blog.website.model.Vo"); // 分页插件 PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); properties.setProperty("reasonable", "true"); properties.setProperty("supportMethodsArguments", "true"); properties.setProperty("returnPageInfo", "check"); properties.setProperty("params", "count=countSql"); pageHelper.setProperties(properties); // 添加插件 bean.setPlugins(new Interceptor[] {pageHelper}); // 添加XML目录 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml")); return bean.getObject(); } catch (Exception e) { throw new RuntimeException(e); } } @Bean @Primary public SqlSessionTemplate sqlSessionTemplate( SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } @Bean @Primary public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource()); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getFilters() { return filters; } public void setFilters(String filters) { this.filters = filters; } public String getConnectionProperties() { return connectionProperties; } public void setConnectionProperties(String connectionProperties) { this.connectionProperties = connectionProperties; } } }
|
6.配置application.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| spring: datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://xxxxxx:3306/teaching?useSSL=false username: root password: SK7q1NJTgWERV924WLnm7IcxBHjDNJ81UMo10EuFzjcXwblNte68QyxAHpoaV57KHRob7Rle+syYyvaGE2Fa7Q== # 下面为连接池的补充设置,应用到上面所有数据源中 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: config,stat,wall,slf4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAItGtxZCgxe9j3hEBJtW46xjlm6doeYY0/VvOEqcs3VQG5pcA3Tyv0SjjMXAq0zOQdI6nGMXUhtqrMG41Yk7RgMCAwEAAQ== # mybatis配置 mybatis: mapper-locations: classpath*:/mapper/*Mapper.xml server: port: 10086 logging: level: debug file: logs/spring.log
|
7.数据库密码可以经过加密,加密方法可以直接在网上查询,配置好数据库的查询语句 就可以了 。登录到http://localhost:10086/druid/login.html使用账号密码登录进去即可成功