1. 关于数据访问
对于数据访问层,无论是SQL还是NOSQL,spring boot都默认采用整个Spring Data的方式进行统一处理,添加大量的自动配置,屏蔽了很多设置。引入各种xxTemplate,xxRepository来简化我们对数据访问层的操作,对我们来说只要进行简单的设置即可。
2. JDBC&自动配置原理
2.1 创建项目
打包方式还是jar
选中web模块,JDBC和mysql(spring data jdbc比 jdbc api更简洁高效)
然后我们可以在pom文件看到JDBC和MySQL的驱动依赖了
yml文件(如果启动后控制台有报乱码的错误才在url最后加?serverTimezone=UTC
)
spring:
datasource:
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/sb?serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
测试类
@SpringBootTest
class DataJdbc01ApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
System.out.println(dataSource.getClass());
Connection connection=dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
效果
默认是用com.zaxxer.hikari.HikariDataSource
作为数据源,数据源的相关配置都在DataSourceProperties里面
2.2 自动配置原理
查看依赖包
org.springframework.boot.autoconfigure.jdbc
- 参考
DataSourceConfiguration
,根据配置创建数据源,默认使用Tomcat连接池;可以使用spring.datasource.type
指定自定义的数据源类型 - SpringBoot默认可以支持
org.apache.tomcat.jdbc.pool.DataSource/HikariDataSource/BasicDataSource
- 自定义数据源类型
/**
* Generic DataSource configuration.
*/
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {
@Bean
public DataSource dataSource(DataSourceProperties properties) {
//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
return properties.initializeDataSourceBuilder().build();
}
}
-
DataSourceInitializer
extendsApplicationListener
作用runSchemaScripts()
:运行建表语句runDataScripts()
:运行插入数据的sql语句
默认只需要将文件命名为
schema-*.sql
或data-*.sql
,我们也可以在yml加入以下语句,更改默认sql文件的名称,这样就可以更改其他名称啦
我们把schema-all.sql放到resources中(spring boot2.x以上要在yml中加
initialization-mode: always
,不然无法执行sql语句)
然后启动主程序,可以看到数据库建表成功
-
操作数据库:自动配置了JdbcTemplate操作数据库
创建controller.HelloController@Controller public class HelloController { @Autowired JdbcTemplate jdbcTemplate; @ResponseBody @GetMapping("/abc") public Map<String,Object> map(){ List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from department"); return list.get(0); } }
启动,然后给表添加数据,在到浏览器访问
3. 整个Druid&配置数据源监控
3.1 步骤
- 加入druid依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.8</version> </dependency>
- 在yml指定连接池
type: com.alibaba.druid.pool.DruidDataSource
- 运行,成功切换成druid
3.2 配置数据源监控
我们可以在yml对数据源进行各种配置
我们需要创建config.DruidConfig,即Druid配置类
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){//自定义数据源,yml中的其他配置才能有效
return new DruidDataSource();
}
//配置Druid监控
//1、配置一个管理后台的Servlet
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean=new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String,String> initParams=new HashMap<>();
initParams.put("loginUsername","admin");//到StatViewServlet extends ResourceServlet中看能配什么参数
initParams.put("loginPassword","123456");
initParams.put("allow","");//默认就是允许所有访问,可设置为localhost
initParams.put("deny","172.16.152.166");
bean.setInitParameters(initParams);
return bean;
}
//2、配置一个web监控的filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean=new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams=new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
一个Druid监控便完成,我们访问http://localhost:8080/druid,输入刚刚设置好的账号密码
来到了监控界面
然后我们访问前面设置的查询请求http://localhost:8080/abc,查看web应用
有相应的结果啦
该SpringBoot学习笔记学习自雷神前辈,是对知识点的整理和自我认识的梳理,如有不当之处,欢迎指出