我是Spring框架的新手。使用它在lombok库的帮助下开发java命令行程序。
我正在尝试根据通过命令行参数传递的值来创建我的bean,此时此命令失败。
使用args: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();
}
}
DataService类(工作正常)
@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();
}
}
答案 0 :(得分:0)
如果要从FileSystemResource(即从命令行参数)获取文件的路径,可以使用external location和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.S。您可以使用String或其他数据类型而不是FileSystemResource,取决于此任务的更好。