基于命令行参数的java自动连接bean

z0qdvdin  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(277)

我不熟悉spring框架。在lombok库的帮助下,用它来开发java命令行程序。
我试图基于通过命令行参数传递的值创建bean,但现在失败了。
通过带参数的命令行运行应用程序: java -jar TestProject.jar -Dfield="TEMP" 任何建议都会有帮助。谢谢。
主要类别

public class TestApp implements CommandLineRunner {

@Autowired
private DataService dataService;

/**
 *
 * @param args
 * @throws FileNotFoundException
 * @throws IOException
 */
public static void main(String[] args) throws FileNotFoundException, IOException {

    SpringApplication.run(TestApp.class, args);
    System.out.println("STOPPING******");
}

@Override
public void run(String... arg0) throws Exception {

    this.dataService.processFile();
 }
}

数据服务类(工作正常)

@Component
public class DataServiceImpl implements DataService {

@Autowired(required = false)
private Processor processor;

/**
 * Processes file and returns results
 *
 * @throws java.io.FileNotFoundException
 * @throws java.io.IOException
 */
@Override
public void processFile() throws FileNotFoundException, IOException {

    if (processor != null) {
        System.out.println(this.processor.getClass());
        List<Long> values = processor.roundUp();

        String strDisplay = "";
        for (int i = 0; i < values.size() - 1; i++) {
            if (StringUtils.isEmpty(strDisplay)) {
                strDisplay = "" + values.get(i);
            } else {
                strDisplay = strDisplay + "," + values.get(i);
            }
        }

        if (!StringUtils.isEmpty(strDisplay)) {
            System.out.println(strDisplay);
        } else {
            System.out.println("Testing");
        }
    }
 }

}
处理器(抽象类)

public abstract class Processor {

@Autowired
public FileParser fileParser;

public abstract List<String> process();

public List<Long> roundUp() {
    List<String> valueList = process();
    List<Long> valueListDouble = new ArrayList<>();
    if (valueList != null) {
        for (String value : valueList) {
            valueListDouble.add(Math.round(Double.parseDouble(value)));
        }
    }
    return valueListDouble;

  }
 }

tempprocessorimpl类,将基于命令行参数创建

@Component
@ConditionalOnExpression("#{systemProperties['field']!=null && systemProperties['field'].equals('TEMP')}")
public class TempProcessorImpl extends Processor {

@Override
public List<String> process() {
    return fileParser.getColumnValuesForHeaderFromFile();
  } 
}
qnzebej0

qnzebej01#

如果要从外部位置(即从命令行参数)获取文件的路径,可以使用filesystemresource和configurationproperties。创建配置类是一种很好的方法:

@Component
@ConfigurationProperties
public class AppConfig {

  private FileSystemResource file;

  public FileSystemResource getFile() {
    return file;
  }

  public void setFile(FileSystemResource file) {
    this.file = file;
  }
}

然后将其注入tempprocessorimpl类。然后可以运行spring应用程序:

java -jar -Dfile=/Users/some/file.txt yourapp.jar

p、 您可以使用字符串或其他数据类型而不是filesystemresource,这取决于什么对该任务更好。

相关问题