如何在 Spring Boot 的 main 方法中创建存储库实例?

How to create a repository instance in main method of Spring Boot?

我需要设置 SSL 属性以在 Spring 启动应用程序的主要方法中启用 HTTPS。我的代码如下所示:

import com.our.Task.configuration.FileStorageProperties;
import com.our.Task.entities.ApplicationHttpsSettingsEntity;
import com.our.Task.repository.ApplicationHttpsSettingsEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;

import java.util.Properties;

@SpringBootApplication
@EnableConfigurationProperties({FileStorageProperties.class})
public class OurTaskApplication
{
    @Autowired
    static ApplicationHttpsSettingsEntityRepository applicationHttpsSettingsEntityRepository;

    public static void main(String[] args)
    {
        
        ApplicationHttpsSettingsEntity applicationsHttpsSettingsEntity = applicationHttpsSettingsEntityRepository.getById(44);

        SpringApplication application = new SpringApplication(OurTaskApplication.class);

        Properties properties = new Properties();

        if (applicationsHttpsSettingsEntity.getUseHttps() > 0)
        {
            properties.put("server.ssl.key-store", applicationsHttpsSettingsEntity.getKeyStore());
            properties.put("server.ssl.key-store-password", applicationsHttpsSettingsEntity.getKeyStorePassword());
            properties.put("server.ssl.key-store-type", applicationsHttpsSettingsEntity.getKeyStoreType());
            properties.put("server.ssl.key-alias", applicationsHttpsSettingsEntity.getKeyAlias());
        }

//        SpringApplication.run(OurTaskApplication.class, args);

        application.setDefaultProperties(properties);
        ConfigurableApplicationContext ctx = application.run(args);
    }

}

它警告我不允许在静态方法上使用@Autowired。执行时它给出空异常。 我读过这个

但它没有提供任何有关如何执行此操作的信息。我不想使用属性文件。

我不会在 main 方法中做这样的事情。让 Spring 运行 然后添加您的配置。

我会创建一个 runner class,它会在设置 Spring 上下文后执行我需要的任何操作。

示例:

@Component
@AllArgsConstructor
public class StartRunner implements ApplicationRunner {

    /* Add whatever Bean you need here and autowire them through the constructor or with @Autowired */


    @Override
    public void run(ApplicationArguments args) throws Exception {
        // Do whatever you need here inside
    }
}