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

如何在Spring Boot主方法中获取Repository实例配置SSL开启HTTPS

问题根因

你遇到的报错由两个核心问题导致:

  • @Autowired无法注入静态成员,Spring容器的依赖注入只会作用于实例对象,不会给静态字段赋值
  • 你在SpringApplication.run()执行前就调用Repository,此时Spring上下文尚未初始化,数据源、JPA Repository等所有Bean都还未被创建,必然会抛出空指针
可行解决方案

不用在main方法中提前处理SSL属性配置,改用Spring Boot官方提供的WebServerFactoryCustomizer扩展接口即可,该接口的回调会在嵌入式Web服务器启动前触发,此时Spring上下文已初始化完成,Repository可以正常注入使用,完全满足你从数据库读取配置、不使用properties文件的需求。

步骤1:简化启动类代码

import com.our.Task.configuration.FileStorageProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@SpringBootApplication
@EnableConfigurationProperties({FileStorageProperties.class})
public class OurTaskApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(OurTaskApplication.class, args);
    }
}

步骤2:新增SSL动态配置类

import com.our.Task.entities.ApplicationHttpsSettingsEntity;
import com.our.Task.repository.ApplicationHttpsSettingsEntityRepository;
import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;

@Component
public class CustomSslConfig implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    private final ApplicationHttpsSettingsEntityRepository httpsSettingsRepository;

    // Spring 4.3及以上版本单构造函数注入无需加@Autowired注解
    public CustomSslConfig(ApplicationHttpsSettingsEntityRepository httpsSettingsRepository) {
        this.httpsSettingsRepository = httpsSettingsRepository;
    }

    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        ApplicationHttpsSettingsEntity settings = httpsSettingsRepository.getById(44);
        if (settings.getUseHttps() > 0) {
            Ssl ssl = new Ssl();
            ssl.setKeyStore(settings.getKeyStore());
            ssl.setKeyStorePassword(settings.getKeyStorePassword());
            ssl.setKeyStoreType(settings.getKeyStoreType());
            ssl.setKeyAlias(settings.getKeyAlias());
            ssl.setEnabled(true);
            factory.setSsl(ssl);
            // 可自定义HTTPS端口,默认是8443
            factory.setPort(443);
        }
    }
}
注意事项

如果你使用的是WebFlux响应式技术栈,只需要把配置类实现的接口泛型从ConfigurableServletWebServerFactory替换为ConfigurableReactiveWebServerFactory即可,其余逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:03