Files
springboot-scaffold/src/main/java/com/example/scaffold/config/database/DatabaseConfig.java

79 lines
2.6 KiB
Java
Raw Normal View History

package com.example.scaffold.config.database;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import javax.sql.DataSource;
/**
* 多数据库配置 - H2 / MySQL / PostgreSQL
*
* 学习要点
* 1. @Profile - 根据环境选择配置
* 2. 数据源配置
* 3. 连接池配置
*/
@Slf4j
@Configuration
public class DatabaseConfig {
/**
* H2 内存数据库 - 开发测试用默认
*/
@Bean
@Profile("!mysql & !postgresql")
@ConditionalOnMissingBean(DataSource.class)
public DataSource h2DataSource(
@Value("${spring.datasource.url:jdbc:h2:mem:springboot_scaffold_learn;MODE=MYSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE}") String url,
@Value("${spring.datasource.username:sa}") String username,
@Value("${spring.datasource.password:}") String password) {
log.info("🚀 使用 H2 数据库: {}", url);
return DataSourceBuilder.create()
.driverClassName("org.h2.Driver")
.url(url)
.username(username)
.password(password)
.build();
}
/**
* MySQL 数据库
*/
@Bean
@Profile("mysql")
public DataSource mysqlDataSource(
@Value("${DB_URL:jdbc:mysql://localhost:3306/springboot_scaffold}") String url,
@Value("${DB_USER:root}") String username,
@Value("${DB_PASS:}") String password) {
log.info("🚀 使用 MySQL 数据库: {}", url);
return DataSourceBuilder.create()
.driverClassName("com.mysql.cj.jdbc.Driver")
.url(url)
.username(username)
.password(password)
.build();
}
/**
* PostgreSQL 数据库
*/
@Bean
@Profile("postgresql")
public DataSource postgresqlDataSource(
@Value("${DB_URL:jdbc:postgresql://localhost:5432/springboot_scaffold}") String url,
@Value("${DB_USER:postgres}") String username,
@Value("${DB_PASS:}") String password) {
log.info("🚀 使用 PostgreSQL 数据库: {}", url);
return DataSourceBuilder.create()
.driverClassName("org.postgresql.Driver")
.url(url)
.username(username)
.password(password)
.build();
}
}