diff --git a/src/main/java/com/example/scaffold/config/database/DatabaseConfig.java b/src/main/java/com/example/scaffold/config/database/DatabaseConfig.java new file mode 100644 index 0000000..fb6f1d3 --- /dev/null +++ b/src/main/java/com/example/scaffold/config/database/DatabaseConfig.java @@ -0,0 +1,79 @@ +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(); + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 27d32c1..b5f9457 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,7 +4,7 @@ server.forward-headers-strategy=framework spring.profiles.active=${APP_PROFILE:learn} -# H2 Database (default for learning) +# H2 Database (default baseline; learn profile overrides to in-memory) spring.h2.console.enabled=true spring.datasource.url=jdbc:h2:file:~/h2/springboot_scaffold spring.datasource.driverClassName=org.h2.Driver