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
})
相关推荐
逍遥德9 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
云烟成雨TD9 小时前
Spring AI 1.x 系列【54】Retry 机制分析
java·人工智能·spring
weixin_523185329 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
点燃大海9 小时前
SpringAI构建智能体
java·spring boot·spring·springai智能体
xier_ran9 小时前
【infra之路】02_RadixAttention与KV_Cache管理
java·spring boot·spring
swipe9 小时前
做多轮对话 Agent,为什么我建议把短期记忆放到 Redis
后端·面试·llm
黑马师兄10 小时前
RAG混合检索深度解析:让AI真正找到你要的内容
java·人工智能·ai·agent·rag·ai-native
码客日记10 小时前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git
程序员黑豆10 小时前
AI全栈开发之Java:什么是JDK
前端·后端·ai编程
凡人叶枫10 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发