79 lines
2.6 KiB
Java
79 lines
2.6 KiB
Java
|
|
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();
|
|||
|
|
}
|
|||
|
|
}
|