05 | 如何配置单数据源
H2
H2数据库介绍 H2数据库地址:http://www.h2database.com/html/main.html
H2是一个开源的嵌入式(非嵌入式设备)数据库引擎,它是一个用Java开发的类库,可直接嵌入到应用程序中,与应用程序一起打包发布,不受平台限制。
1.1 与其他开源数据库比较
H2与Derby、HSQLDB、MySQL、PostgreSQL等开源数据库相比,H2的优势为:a.存Java开发,不受平台限制;b.H2只有一个jar包,占用空间小,适合嵌入式数据库;c.有web控制台,用于管管理数据库。
作者:Jerry的技术博客 来源:CSDN 原文:https://blog.csdn.net/xktxoo/article/details/78014739 版权声明:本文为博主原创文章,转载请附上博文链接!
lombok
通过lombok注解实现自动生成get、set方法:https://www.zhihu.com/question/42348457
jdbc
Java Database Connectivity
bean
JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
只是一个简单的特殊的类,并没有什么,只是为什么要设计这样的类,用来做什么,后面看看
https://www.zhihu.com/question/19773379 这个解释了为什么用javabean,不知道科不科学
leesper 2019-02-23
老师,总是在Java里听到Bean这个词,到底什么是Bean,能详细讲讲吗,这些概念上还是有点模糊。
作者回复: Bean简单来讲就是由Spring容器创建并托管的实例。
Autowired
自动装配@Autowired&@Resource: https://blog.csdn.net/qq_27470131/article/details/79601287
springboot 自动配置数据源
private void showConnection() throws SQLException {
log.info(dataSource.toString());
Connection conn = dataSource.getConnection();
log.info(conn.toString());
conn.close();
}
输出log:
:HikariDataSource (HikariPool-1)
:HikariProxyConnection@2101326063 wrapping conn0: url=jdbc:h2:mem:testdb user=SA
- 查看配置的bean:
http://localhost:8080/actuator/beans
手动配置数据源
pure-spring-datasource-demo,这个demo演示了,不用spring boot,手动配置数据源
数据初始化
- sql文件在resources目录下,可以省略不写下列代码:
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql
spring.datasource.initialization-mode=ALWAYS
- sql文件在resources/sql目录下,必须加上下列代码:
spring.datasource.schema=classpath:sql/schema.sql
spring.datasource.data=classpath:sql/data.sql
spring.datasource.initialization-mode=ALWAYS
- spring boot 会自动执行schema.sql、data.sql
private void showData() {
jdbcTemplate.queryForList("SELECT * FROM FOO")
.forEach(row -> log.info(row.toString()));
}
输出log:
:{ID=1, BAR=aaa}
:{ID=2, BAR=bbb}
06 | 如何配置多数据源
配置多数据源的注意事项
1、不不同数据源的配置要分开
2、关注每次使⽤用的数据源 有多个DataSource时系统如何判断 对应的设施(事务、ORM等)如何选择DataSource
Spring Boot中的多数据源配置
1、⼿手⼯工配置两组 DataSource 及相关内容
2、与Spring Boot协同⼯工作(⼆选一)
2.1、配置@Primary类型的Bean 2.2、排除Spring Boot的⾃自动配置 DataSourceAutoConfiguration DataSourceTransactionManagerAutoConfiguration JdbcTemplateAutoConfiguration
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
JdbcTemplateAutoConfiguration.class})
@Slf4j
public class MultiDataSourceDemoApplication {
...
}
07 | 那些好用的连接池们:HikariCP
HikariCP性能很高,做了很多牛逼的优化,是spring boot的默认数据库连接池
常⽤用 HikariCP 配置参数 spring.datasource.hikari.maximumPoolSize=10 spring.datasource.hikari.minimumIdle=10 spring.datasource.hikari.idleTimeout=600000 spring.datasource.hikari.connectionTimeout=30000 spring.datasource.hikari.maxLifetime=1800000
https://github.com/brettwooldridge/HikariCP
08 | 那些好用的连接池们:Alibaba Druid
经过阿⾥里里巴巴各⼤大系统的考验,值得信赖
实⽤用的功能
详细的监控(真的是全⾯面) ExceptionSorter,针对主流数据库的返回码都有⽀支持 SQL 防注⼊入 内置加密配置 众多扩展点,⽅方便便进⾏行行定制
使用Druid
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc<artifactId>
<exclusions>
<exclusion>
<artifactId>HikariCP</artifactId>
<groupId>com.zaxxer</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter<artifactId>
<version>1.1.10</version>
</dependency>
在jdbc排除默认的HikariCP
09 | 如何通过Spring JDBC访问数据库
spring-jdbc
Spring 的 JDBC 操作类 core,JdbcTemplate 等相关核⼼心接⼝口和类 datasource,数据源相关的辅助类 object,将基本的 JDBC 操作封装成对象 support,错误码等其他辅助⼯工具
通过注解定义 Bean
@Component @Repository @Service @Controller @RestController
JdbcTemplate
query queryForObject queryForList update execute
SQL批处理
JdbcTemplate batchUpdate BatchPreparedStatementSetter
NamedParameterJdbcTemplate batchUpdate SqlParameterSourceUtils.createBatch
具体操作增删改查,看代码simple-jdbc-demo
插入2种方法: 1、jdbcTemplate.update; 2、simpleJdbcInsert.executeAndReturnKey(simpleJdbcInsert在SimpleJdbcDemoApplication)
Arrays.asList("b", "c").forEach(bar -> {
jdbcTemplate.update("INSERT INTO FOO (BAR) VALUES (?)", bar);
});
HashMap<String, String> row = new HashMap<>();
row.put("BAR", "d");
Number id = simpleJdbcInsert.executeAndReturnKey(row);
log.info("ID of d: {}", id.longValue());
10 | 什么是Spring的事务抽象(上)
Spring 的事务抽象
这个是啥?就是事物的隔离性等等设置?
11 | 什么是Spring的事务抽象(下)
编程式事物代码:programmatic-transaction-demo 声明式事物代码:declarative-transaction-demo
12 | 了解Spring的JDBC异常抽象
errorcode-demo: 自定义数据库异常(同时介绍了怎么做单元测试)
13 | 课程答疑(上)
/actuator/health 健康检查 /actuator/beans 查看容器器中的所有 Bean /actuator/mappings 查看 Web 的 URL 映射 /actuator/env 查看环境信息