本文纯个人读书笔记,书籍《一步一步学 Spring Boot 2》
如果喜欢,可直接购买书籍。如有侵权,请联系删除
一、集成 MySQL
Spring Boot 拥有功能非常强大的资源库,借助于 Spring Boot,我们可以十分方便的调用数据库。
1.依赖
在 pom 文件添加 MySQL 所需的依赖。
pom.xml:
<!--MySQL 连接 Java 的驱动程序-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- 支持 JDBC 连接数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
mysql-connector-java 如果不进行版本填写,有可能版本对不上,导致后续报错,请选择自己数据库对应对应的驱动版本。
2.添加数据库配置
在 application.properties 中添加数据库配置信息。
application.properties:
### mysql 连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/test
### 用户名
spring.datasource.username=root
### 密码
spring.datasource.password=123456
### 驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
到这里,Spring Boot 已经集成 MySQL 了。
二、测试
1.创建数据库表 user
直接运行下方建表语句,创建数据库表 user 。
-- ----------------------------
-- 用户表
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS USER;
CREATE TABLE USER (
id VARCHAR(32) NOT NULL COMMENT '主键',
NAME VARCHAR(10) DEFAULT NULL COMMENT '用户名',
PASSWORD VARCHAR(32) DEFAULT NULL COMMENT '密码'
);
INSERT INTO USER (id, NAME, PASSWORD) VALUES ('1', 'aa', '123456');
INSERT INTO USER (id, NAME, PASSWORD) VALUES ('2', 'bb', '123456');
2.创建实体类
创建 com.xiaoyue.demo.model.User 的实体类。
User .java:
public class User {
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserFilter{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
3.添加测试代码
在项目的单元测试类 DemoApplicationTests.java 中添加如下代码:
DemoApplicationTests.java:
@Resource
private JdbcTemplate jdbcTemplate ;
/**
* MySQL 集成 Sprig Boot 简单测试
*/
@Test
public void mySqlTest() {
String sql = "select id, name, password from user ";
List<User> userList = (List<User>) jdbcTemplate.query(sql, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}
});
System.out.println("查询成功:");
for (User user : userList) {
System.out.println(user);
}
}
4.运行测试
光标移到 mySqlTest 方法上面,右键执行 mySqlTest 的单元测试。
5.运行结果
在控制台打印出 User 信息。
三、Intellij IDEA 连接 MySql
点击 Intellij IDEA 的右侧 Database 图标。
点击 ‘+’ 号 ——> Data Source ——> MySQL。
注意选择对应的数据库驱动版本,然后填入相关信息,点击 “Test Connection” 进行连接测试。
成功后点击 “OK” 进行保存。
三、集成 Druid
Druid 是阿里巴巴开源项目中的一个 型数据库连接池。Druid 是一个 JDBC 组件,它包括三部分:
1. DruidDriver 代理 Driver,能够提供基于 Filter-Chain 模式的插件体系。
2. DruidDataSource 高效可管理的数据库连接池。
3. SQLParser。它支持所有 JDBC 兼容的数据库,包括 Oracle、MySQL、SQL Server 等。
Durid 在监控、可扩展、稳定性和性能方面具有明显的优势。通过其提供的监控功能,可以实现观察数据库连接池和 SQL 查询的工作情况。使用 Druid 连接池,可以提高数据库的访问性能。
(原谅我没用过这个,这边引用作者原本,简单点就是好用。)
1.引入依赖
在 pom.xml 中引入 Druid 依赖。
pom.xml:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
2.配置
在 application.properties 中添加 Druid 参数配置。
application.properties:
### 数据源类别
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
### 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
### 配置获取连接等待超时的时间,单位是毫秒
spring.datasource.maxWait=60000
### 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
### 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
### 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
### 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
### 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
### 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true
3.开启监控功能
这边采用代码注册 Servlet 和 Filter 的方式进行开启监控功能。Spring Boot 推荐使用这种方式。
新建一个 com.xiaoyue.demo.filter.DruidConfiguration.java 类。
DruidConfiguration.java:
@Configuration
public class DruidConfiguration {
@Bean
public ServletRegistrationBean statViewServlet(){
//创建servlet注册实体
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(),"/druid/*");
//设置ip白名单
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
servletRegistrationBean.addInitParameter("deny","192.168.0.19");
//设置控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername","druid");
servletRegistrationBean.addInitParameter("loginPassword","123456");
//是否可以重置数据
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean statFilter(){
//创建过滤器
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//设置过滤器过滤路径
filterRegistrationBean.addUrlPatterns("/*");
//忽略过滤的形式
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
@Configuration: Spring 中会有很多的 XML 配置文件,文件中会配置很多的 bean。在类上添加@Configuration 注解,大家可以理解为该类变成一个 XML 配置文件。
@Bean: 等同于 XML 配置文件中的配置。Spring Boot 会把加上该注解的方法的返回值装载进 Spring IoC 容器,方法的名称对应标签的 id 属性值。具体代码如下:
@Bean
public FilterRegistrationBean druidStatFilter(){
FilterRegistrationBean filterRegistrationBean
= new FilterRegistrationBean(new WebStatFilter());
return filterRegistrationBean;
}
等同于
<bean id="druidStatFilter"
class="org.springframework.boot.web.servlet.ServletRegistrationBean">
</bean>
4.测试
直接运行 “DemoApplication.java”,运行程序。访问 http://localhost:8080/druid/login.html 出现 Druid 的登录界面。
这边的用户名和密码就是在 DruidConfiguration.java 中设置的。
注: 如果在 application.properties 中配置了
application.properties :
server.servlet.context-path=/demo
这时候访问 http://localhost:8080/druid/login.html 会报 404 错误。这时候的访问地址应该是 http://localhost:8080/demo/druid/login.html 。