Spring数据源配置

1 可配置啥类型的数据源?

1.1 数据源相关

DataSource(根据选择的连接池实现决定),SB默认的数据源:

java 复制代码
@Slf4j
@SpringBootApplication
public class BestPractiseApplication implements CommandLineRunner {

    @Autowired
    private DataSource dataSource;

    @Override
    public void run(String... args) throws Exception {
        showConnection();
    }

    public static void main(String[] args) {
        SpringApplication.run(BestPractiseApplication.class, args);
    }

    private void showConnection() throws SQLException {
        Log.info(dataSource.toString()); // dataSource: "HikariDataSource (HikariPool-1)"
        Connection connection = dataSource.getConnection();
        Log.info(connection.toString());
        connection.close();
    }
}

1.2 事务相关(可选)

  • Platform TransactionManager(DataSource TransactionManager)
  • TransactionTemplate

1.3 操作相关(可选)

  • Jdbc Template

2 SpringBoot默认配置

2.1 DataSourceAutoConfiguration

配置DataSource

2.2 DataSourceTransactionManagerAutoConfiguration

配置DataSource TransactionManager

2.3 Jdbc' TemplateAutoConfiguration

配置JdbcTemplate

2.4 符合条件时才进行配置

2.5 数据源相关配置属性

yaml 复制代码
spring:
  datasource:
    # 通用
    url: jdbc:mysql://localhost/test
    username: dbuser
    password: dbpass
    driver-class-name: com.mysql.jdbc.Driver  (可选)
    # 初始化内嵌数据库
    initialization-mode: always # embedded | always | never
    schema: # 初始化schema文件
    data: # 初始化data文件
    platform: mysql # hsqldb | h2 | oracle | mysql | postgresql (与前者对应)

以上是配置单数据源。

3 多数据源配置

3.1 注意事项

① 分离不同的数据源配置
② 关注每次使用的数据源
  • 有多个DataSource时系统咋判断
  • 对应的设施(事务、ORM等)咋选DataSource

手工配置两组DataSource及相关内容

与Spring Boot协作 (二选一)

  1. 配置@Primary类型的Bean
  2. 移除Spring Boot的自动配置:
    • DataSourceAutoConfiguration
    • DataSourceTransactionManagerAutoConfiguration
    • Jdbc TemplateAutoConfiguration
java 复制代码
@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class,
    DataSourceTransactionManagerAutoConfiguration.class,
    JdbcTemplateAutoConfiguration.class
})
相关推荐
树码小子21 小时前
综合练习:验证码案例(1)总体设计
java·开发语言·spring
一嘴一个橘子21 小时前
idea 执行 Maven 的 `clean`、`install`、`package` 等命令报错
java
Sylvia-girl21 小时前
线程通讯~
java
Victor35621 小时前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端
JaguarJack21 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端·php·服务端
BingoGo21 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端
Victor35621 小时前
MongoDB(3)什么是文档(Document)?
后端
MSTcheng.21 小时前
【C++】C++异常
java·数据库·c++·异常
大模型玩家七七1 天前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
Coder_Boy_1 天前
技术发展的核心规律是「加法打底,减法优化,重构平衡」
人工智能·spring boot·spring·重构