我不熟悉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();
}
}
1条答案
按热度按时间qnzebej01#
如果要从外部位置(即从命令行参数)获取文件的路径,可以使用filesystemresource和configurationproperties。创建配置类是一种很好的方法:
然后将其注入tempprocessorimpl类。然后可以运行spring应用程序:
p、 您可以使用字符串或其他数据类型而不是filesystemresource,这取决于什么对该任务更好。