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

Spring Boot如何将参数读取逻辑移至独立类并注入主类使用?

实现步骤

1. 创建独立的ConfigurationReader类

在util包下创建ConfigurationReader类,将原main方法中的参数解析逻辑封装进去,并添加@Component注解让Spring管理该类:

package com.yourpackage.util;

import org.springframework.stereotype.Component;
import java.math.BigInteger;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Component
public class ConfigurationReader {

    public JobConfiguration parseArgs(String[] args) {
        JobConfiguration jobConfiguration = new JobConfiguration();
        
        // 解析任务类型
        jobConfiguration.setJobType(ProgramJobType.fromValue(args[0]));
        
        // 解析触发时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        if (!args[1].isEmpty() && args[1].length() >= 20) {
            jobConfiguration.setTriggerTime(Utility.getFormattedTimeStamp(LocalDateTime.parse(args[1].substring(0, 19), formatter)));
        }
        
        // 解析节目编号
        if (!args[2].isEmpty() && args[2].length() >= 7) {
            jobConfiguration.setProgramNumber(new BigInteger(args[2]));
        }
        
        return jobConfiguration;
    }
}

2. 改造主类实现依赖注入

有两种方式可以在主类中使用ConfigurationReader:

方式一:手动从Spring上下文获取实例

适合需要在main方法启动初期就处理参数的场景:

import com.yourpackage.util.ConfigurationReader;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class Mainclass {

    public static void main(String[] args) throws Exception {
        // 启动Spring应用并获取上下文
        ApplicationContext context = SpringApplication.run(Mainclass.class, args);
        
        // 获取ConfigurationReader实例
        ConfigurationReader configReader = context.getBean(ConfigurationReader.class);
        
        // 调用解析方法生成JobConfiguration
        JobConfiguration jobConfiguration = configReader.parseArgs(args);
        
        // 后续业务逻辑处理
    }
}

方式二:实现CommandLineRunner接口(推荐)

更符合Spring依赖注入规范,Spring启动后会自动执行run方法:

import com.yourpackage.util.ConfigurationReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Mainclass implements CommandLineRunner {

    @Autowired
    private ConfigurationReader configurationReader;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Mainclass.class, args);
    }

    @Override
    public void run(String[] args) throws Exception {
        // 调用解析方法生成JobConfiguration
        JobConfiguration jobConfiguration = configurationReader.parseArgs(args);
        
        // 后续业务逻辑处理
    }
}

3. 注意事项

  • 确保ConfigurationReader所在的util包被Spring扫描到:@SpringBootApplication默认扫描主类所在包及其子包,如果util包是主类包的子包则无需额外配置,否则需要添加@ComponentScan指定扫描范围。
  • 如果参数可能为空或格式不正确,建议在ConfigurationReader中添加参数校验逻辑,避免空指针或格式异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:08:10