You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot 2.7.4:无需CONFIG_DIR环境变量初始化数据源的替代方案

无需CONFIG_DIR环境变量初始化数据源的替代方案

方法一:利用Spring Boot默认的Profile配置机制

Spring Boot原生支持按环境Profile加载配置文件,你可以把不同环境的数据源配置直接放在src/main/resources目录下,命名为application-{profile}.properties(或YAML格式),比如application-dev.properties、application-prod.properties。

在配置文件里直接定义HikariCP相关参数:

# application-dev.properties
spring.datasource.url=jdbc:mysql://localhost:3306/dev_db
spring.datasource.username=dev_user
spring.datasource.password=dev_pass
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Hikari连接池配置
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.connection-timeout=30000

之后要么让Spring自动装配DataSource:

@Autowired
private DataSource dataSource;

要么手动构建HikariConfig时,直接从Environment读取配置项,不用自己拼接文件路径:

HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl(env.getProperty("spring.datasource.url"));
hikariConfig.setUsername(env.getProperty("spring.datasource.username"));
hikariConfig.setPassword(env.getProperty("spring.datasource.password"));
hikariConfig.setMaximumPoolSize(Integer.parseInt(env.getProperty("spring.datasource.hikari.maximum-pool-size")));

方法二:直接读取类路径下的独立配置文件

如果想保留单独的datasource-{profile}.properties文件(比如datasource-dev.properties),放在src/main/resources下,可以通过类加载器或Spring的ResourceLoader直接读取,完全不需要CONFIG_DIR:

用类加载器读取:

String configFileName = "/datasource" + propertyName + env.getProperty("spring.profiles.active") + ".properties";
InputStream inputStream = getClass().getResourceAsStream(configFileName);
Properties props = new Properties();
props.load(inputStream);
HikariConfig hikariConfig = new HikariConfig(props);

用Spring ResourceLoader读取:

@Autowired
private ResourceLoader resourceLoader;

// 初始化逻辑
String configPath = "classpath:datasource" + propertyName + env.getProperty("spring.profiles.active") + ".properties";
Resource resource = resourceLoader.getResource(configPath);
HikariConfig hikariConfig = new HikariConfig(resource.getFile());

方法三:通过@ConfigurationProperties绑定配置

创建一个配置类,用@ConfigurationProperties绑定数据源参数,再手动构建HikariConfig,这种方式更规范,也便于维护:

首先定义配置类:

@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProps {
    private String url;
    private String username;
    private String password;
    private String driverClassName;
    private Hikari hikari;

    // 生成getter、setter

    public static class Hikari {
        private int maximumPoolSize;
        private long connectionTimeout;

        // 生成getter、setter
    }
}

然后在配置类中注册并使用:

@Configuration
@EnableConfigurationProperties(DataSourceProps.class)
public class DataSourceConfig {
    @Autowired
    private DataSourceProps dataSourceProps;

    @Bean
    public DataSource dataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setJdbcUrl(dataSourceProps.getUrl());
        hikariConfig.setUsername(dataSourceProps.getUsername());
        hikariConfig.setPassword(dataSourceProps.getPassword());
        hikariConfig.setDriverClassName(dataSourceProps.getDriverClassName());
        hikariConfig.setMaximumPoolSize(dataSourceProps.getHikari().getMaximumPoolSize());
        hikariConfig.setConnectionTimeout(dataSourceProps.getHikari().getConnectionTimeout());
        return new HikariDataSource(hikariConfig);
    }
}

之后只需在对应Profile的application配置文件中配置spring.datasource前缀的参数即可,无需关注文件路径。

内容的提问来源于stack exchange,提问作者OTUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:02:32