不管是 SQL 还是 NOSQL,springboot 都默认采用整合 spring data 的方式进行统一处理,添加了大量自动配置,我们只需进行简单的配置即可使用。
以下示例使用 springboot 2.1.4,mysql 8.0.16
引入 jdbc 依赖和 mysql 驱动
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
配置数据源
## 配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/boot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=mysql
注意: springboot 2.1 使用的 mysql 驱动与之前版本不一样(可能是从2.0开始就不一样了),而且 url 必须指定时区,%2B 表示 +
测试用例
@RunWith(SpringRunner.class)
@SpringBootTest
public class JDBCTest {
@Autowired
DataSource datasource;
@Test
public void testJdbc() throws SQLException {
System.out.println(datasource.getClass());
Connection connection = datasource.getConnection();
System.out.println(connection);
connection.close();
}
}
运行结果如下,获取数据库连接成功,默认使用的是 com.zaxxer.hikari.HikariDataSource 数据源。
运行时执行 sql 脚本文件
如果是建表语句,可以把 .sql 的脚本文件命名为 sechema.sql 或 sechema-all.sql ;如果是操作数据,则命名为 data-*.sql ;并且把脚本文件放在根路径下。当然,如果是自定义的命名、自定义的文件位置,我们也可以在配置文件中指定
## 配置初始化数据库
spring.datasource.initializationMode=always
## schema 属性是一个 list,用 , 分割多个路径
spring.datasource.schema=classpath:books.sql,classpath:/sql/departments.sql
启动项目,即可执行 sql 脚本文件
JdbcTemplate 使用
在数据库表中插入一条数据,在 controller 中,使用 JdbcTemplate 进行查询
@Autowired
JdbcTemplate jdbcTemplate;
@ResponseBody
@RequestMapping("/getBooks")
public Map<String, Object> getBooks() {
List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from books");
return list.get(0);
}
启动项目,输入 /getBooks 请求,可查询出相应记录
整合 druid 数据源,配置 druid 监控
引入 druid 依赖
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.16version>
dependency>
在配置文件 application.properties 中加入配置
# 指定 druid 数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 配置数据源属性,以下属性需要另外绑定才能生效
spring.datasource.initialSize=10
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=50000
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall
创建一个 druid 配置类,绑定数据源属性
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix="spring.datasource")
@Bean
public DataSource druid() {
return new DruidDataSource();
}
}
配置 druid 监控,需要在配置类中加入相关的 servlet 和 filter
// 配置 druid 的监控
// 配置管理后台的 servlet
@Bean
public ServletRegistrationBean<StatViewServlet> statViewServlet(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
HashMap<String, String> initParameters = new HashMap<>();
initParameters.put("loginUsername", "admin");
initParameters.put("loginPassword", "123");
initParameters.put("allow",""); // 为空默认是允许所有访问
initParameters.put("deny", "192.168.0.101");
bean.setInitParameters(initParameters);
return bean;
}
// 配置监控的 filter
@Bean
public FilterRegistrationBean<WebStatFilter> webStatFilter(){
FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
HashMap<String, String> initParameters = new HashMap<>();
initParameters.put("exclusions", "/druid/*,*.js,*.css");
bean.setInitParameters(initParameters);
ArrayList<String> list = new ArrayList<String>();
list.add("/*");
bean.setUrlPatterns(list);
return bean;
}
启动项目,输入 /druid 请求,来到监控登录页面,输入配置的用户名和密码即可进入
再执行一次 /getBooks 请求,可发现监控页面已经监控到了相关记录